-
iris数据集:
5.1 3.5 1.4 0.2 Iris-setosa 4.9 3 1.4 0.2 Iris-setosa 4.7 3.2 1.3 0.2 Iris-setosa 4.6 3.1 1.5 0.2 Iris-setosa 5 3.6 1.4 0.2 Iris-setosa 5.4 3.9 1.7 0.4 Iris-setosa 4.6 3.4 1.4 0.3 Iris-setosa 5 3.4 1.5 0.2 Iris-setosa 4.4 2.9 1.4 0.2 Iris-setosa 4.9 3.1 1.5 0.1 Iris-setosa 5.4 3.7 1.5 0.2 Iris-setosa 4.8 3.4 1.6 0.2 Iris-setosa 4.8 3 1.4 0.1 Iris-setosa 4.3 3 1.1 0.1 Iris-setosa 5.8 4 1.2 0.2 Iris-setosa 5.7 4.4 1.5 0.4 Iris-setosa 5.4 3.9 1.3 0.4 Iris-setosa 5.1 3.5 1.4 0.3 Iris-setosa 5.7 3.8 1.7 0.3 Iris-setosa 5.1 3.8 1.5 0.3 Iris-setosa 5.4 3.4 1.7 0.2 Iris-setosa 5.1 3.7 1.5 0.4 Iris-setosa 4.6 3.6 1 0.2 Iris-setosa 5.1 3.3 1.7 0.5 Iris-setosa 4.8 3.4 1.9 0.2 Iris-setosa 5 3 1.6 0.2 Iris-setosa 5 3.4 1.6 0.4 Iris-setosa 5.2 3.5 1.5 0.2 Iris-setosa 5.2 3.4 1.4 0.2 Iris-setosa 4.7 3.2 1.6 0.2 Iris-setosa 4.8 3.1 1.6 0.2 Iris-setosa 5.4 3.4 1.5 0.4 Iris-setosa 5.2 4.1 1.5 0.1 Iris-setosa 5.5 4.2 1.4 0.2 Iris-setosa 4.9 3.1 1.5 0.1 Iris-setosa 5 3.2 1.2 0.2 Iris-setosa 5.5 3.5 1.3 0.2 Iris-setosa 4.9 3.1 1.5 0.1 Iris-setosa 4.4 3 1.3 0.2 Iris-setosa 5.1 3.4 1.5 0.2 Iris-setosa 5 3.5 1.3 0.3 Iris-setosa 4.5 2.3 1.3 0.3 Iris-setosa 4.4 3.2 1.3 0.2 Iris-setosa 5 3.5 1.6 0.6 Iris-setosa 5.1 3.8 1.9 0.4 Iris-setosa 4.8 3 1.4 0.3 Iris-setosa 5.1 3.8 1.6 0.2 Iris-setosa 4.6 3.2 1.4 0.2 Iris-setosa 5.3 3.7 1.5 0.2 Iris-setosa 5 3.3 1.4 0.2 Iris-setosa 7 3.2 4.7 1.4 Iris-versicolor 6.4 3.2 4.5 1.5 Iris-versicolor 6.9 3.1 4.9 1.5 Iris-versicolor 5.5 2.3 4 1.3 Iris-versicolor 6.5 2.8 4.6 1.5 Iris-versicolor 5.7 2.8 4.5 1.3 Iris-versicolor 6.3 3.3 4.7 1.6 Iris-versicolor 4.9 2.4 3.3 1 Iris-versicolor 6.6 2.9 4.6 1.3 Iris-versicolor 5.2 2.7 3.9 1.4 Iris-versicolor 5 2 3.5 1 Iris-versicolor 5.9 3 4.2 1.5 Iris-versicolor 6 2.2 4 1 Iris-versicolor 6.1 2.9 4.7 1.4 Iris-versicolor 5.6 2.9 3.6 1.3 Iris-versicolor 6.7 3.1 4.4 1.4 Iris-versicolor 5.6 3 4.5 1.5 Iris-versicolor 5.8 2.7 4.1 1 Iris-versicolor 6.2 2.2 4.5 1.5 Iris-versicolor 5.6 2.5 3.9 1.1 Iris-versicolor 5.9 3.2 4.8 1.8 Iris-versicolor 6.1 2.8 4 1.3 Iris-versicolor 6.3 2.5 4.9 1.5 Iris-versicolor 6.1 2.8 4.7 1.2 Iris-versicolor 6.4 2.9 4.3 1.3 Iris-versicolor 6.6 3 4.4 1.4 Iris-versicolor 6.8 2.8 4.8 1.4 Iris-versicolor 6.7 3 5 1.7 Iris-versicolor 6 2.9 4.5 1.5 Iris-versicolor 5.7 2.6 3.5 1 Iris-versicolor 5.5 2.4 3.8 1.1 Iris-versicolor 5.5 2.4 3.7 1 Iris-versicolor 5.8 2.7 3.9 1.2 Iris-versicolor 6 2.7 5.1 1.6 Iris-versicolor 5.4 3 4.5 1.5 Iris-versicolor 6 3.4 4.5 1.6 Iris-versicolor 6.7 3.1 4.7 1.5 Iris-versicolor 6.3 2.3 4.4 1.3 Iris-versicolor 5.6 3 4.1 1.3 Iris-versicolor 5.5 2.5 4 1.3 Iris-versicolor 5.5 2.6 4.4 1.2 Iris-versicolor 6.1 3 4.6 1.4 Iris-versicolor 5.8 2.6 4 1.2 Iris-versicolor 5 2.3 3.3 1 Iris-versicolor 5.6 2.7 4.2 1.3 Iris-versicolor 5.7 3 4.2 1.2 Iris-versicolor 5.7 2.9 4.2 1.3 Iris-versicolor 6.2 2.9 4.3 1.3 Iris-versicolor 5.1 2.5 3 1.1 Iris-versicolor 5.7 2.8 4.1 1.3 Iris-versicolor 6.3 3.3 6 2.5 Iris-virginica 5.8 2.7 5.1 1.9 Iris-virginica 7.1 3 5.9 2.1 Iris-virginica 6.3 2.9 5.6 1.8 Iris-virginica 6.5 3 5.8 2.2 Iris-virginica 7.6 3 6.6 2.1 Iris-virginica 4.9 2.5 4.5 1.7 Iris-virginica 7.3 2.9 6.3 1.8 Iris-virginica 6.7 2.5 5.8 1.8 Iris-virginica 7.2 3.6 6.1 2.5 Iris-virginica 6.5 3.2 5.1 2 Iris-virginica 6.4 2.7 5.3 1.9 Iris-virginica 6.8 3 5.5 2.1 Iris-virginica 5.7 2.5 5 2 Iris-virginica 5.8 2.8 5.1 2.4 Iris-virginica 6.4 3.2 5.3 2.3 Iris-virginica 6.5 3 5.5 1.8 Iris-virginica 7.7 3.8 6.7 2.2 Iris-virginica 7.7 2.6 6.9 2.3 Iris-virginica 6 2.2 5 1.5 Iris-virginica 6.9 3.2 5.7 2.3 Iris-virginica 5.6 2.8 4.9 2 Iris-virginica 7.7 2.8 6.7 2 Iris-virginica 6.3 2.7 4.9 1.8 Iris-virginica 6.7 3.3 5.7 2.1 Iris-virginica 7.2 3.2 6 1.8 Iris-virginica 6.2 2.8 4.8 1.8 Iris-virginica 6.1 3 4.9 1.8 Iris-virginica 6.4 2.8 5.6 2.1 Iris-virginica 7.2 3 5.8 1.6 Iris-virginica 7.4 2.8 6.1 1.9 Iris-virginica 7.9 3.8 6.4 2 Iris-virginica 6.4 2.8 5.6 2.2 Iris-virginica 6.3 2.8 5.1 1.5 Iris-virginica 6.1 2.6 5.6 1.4 Iris-virginica 7.7 3 6.1 2.3 Iris-virginica 6.3 3.4 5.6 2.4 Iris-virginica 6.4 3.1 5.5 1.8 Iris-virginica 6 3 4.8 1.8 Iris-virginica 6.9 3.1 5.4 2.1 Iris-virginica 6.7 3.1 5.6 2.4 Iris-virginica 6.9 3.1 5.1 2.3 Iris-virginica 5.8 2.7 5.1 1.9 Iris-virginica 6.8 3.2 5.9 2.3 Iris-virginica 6.7 3.3 5.7 2.5 Iris-virginica 6.7 3 5.2 2.3 Iris-virginica 6.3 2.5 5 1.9 Iris-virginica 6.5 3 5.2 2 Iris-virginica 6.2 3.4 5.4 2.3 Iris-virginica 5.9 3 5.1 1.8 Iris-virginica 查看全部 -
import numpy as np class Perceptron(object): """ eta:学习率 n_iter:权重向量的训练次数 w_:神经分叉权重向量 errors:用于记录神经元判断出错次数 """ def __init__(self, eta, n_iter): self.eta=eta self.n_iter=n_iter pass def net_input(self,X): """ z = W0*1 + W1*X1 +.... Wn*Xn """ return np.dot(X,self.w_[1:]) + self.w_[0] pass def predict(self, X): return np.where(self.net_input(X) >= 0.0 ,1, -1) pass def fit(self,X,y): """ 输入训练数据,训练神经元,x输入样本向量,y对应样本的正确分类 X:shape[n_samples, n_features] eg:X:[[1, 2, ,3],[4, 5, 6]] n_samples: 2 n_features: 3 y:[1, -1] """ """ 初始化权重向量为0 加一是因为前面算法提到的w0,也就是步调函数阈值 """ self.w_ = np.zeros(1+X.shape[1]) self.errors_ =[] for _ in range(self.n_iter): errors = 0 """ X:[[1,2,3],[4,5,6]] y:[1, -1] zip(X,y)=[[1,2,3, 1],[4,5,6, -1]] """ for xi, target in zip(X,y): """ update = 学习率 * (y-y') """ update = self.eta * (target - self.predict(xi)) """ xi 是一个向量 update * xi 等价: [更新w(1) = X[1]*update, 更新w(2) = X[2]*update,更新w(3) = X[3]*update,] """ self.w_[1:]+=update * xi self.w_[0] += update errors += int(update != 0.0) self.errors_.append(errors) pass pass pass file = "D:/PyCharm_test_file/Jupyter_test/iris1.xlsx" import pandas as pd df = pd.read_excel(file,header=None) #df.head(10) #print(df) import matplotlib.pyplot as plt import numpy as npy = df.loc[0:99, 4].values y = np.where(y == 'Iris-setosa', -1, 1) #print(y) X = df.iloc[0:100, [0, 2]].values #print(X) plt.scatter(X[:50, 0], X[:50, 1], color='red', marker='o', label='setosa') plt.scatter(X[50:100, 0], X[50:100, 1], color='blue', marker='x', label='vericolor') plt.rcParams['font.sans-serif']=['SimHei'] plt.xlabel('花瓣长度') plt.ylabel('花茎长度') plt.legend(loc='upper left') plt.show() from matplotlib.colors import ListedColormap def plot_decision_regions(X, y, classifier, resolution=0.02): marker = ('s', 'x', 'o', 'v') colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan') cmap = ListedColormap(colors[:len(np.unique(y))]) x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() #将x1、x2最大最小值通过arange函数得到的向量,扩展成两个二维矩阵 xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution)) #预测 Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T) #ravel还原成单维向量 #绘制 Z= Z.reshape(xx1.shape) #将Z转换成与xx1一样的二维数组 plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap) #在两组分类结果中间画分割线-->必须线性可分 plt.xlim(xx1.min(), xx1.max()) plt.ylim(xx2.min(), xx2.max()) for idx, cl in enumerate(np.unique(y)): plt.scatter(x=X[y==cl, 0], y=X[y==cl, 1], alpha=0.8, c=cmap(idx), marker=marker[idx], label=cl) ppn = Perceptron(0.1, 10) ppn.fit(X, y) plot_decision_regions(X, y, ppn, resolution=0.02)
查看全部 -
自适应线性神经元的分类算法
class AdalineGD(object): def __init__(self, eta=0.1, n_iter=50): self.eta = eta self.n_iter = n_iter def fit(self, X, y): #与感知器最大的不同 self.w_ = np.zeros(1 + X.shape[1]) self.cost_ = [] #成本函数:判断改进效果,使其不断减小 for i in range(self.n_iter): output = self.net_input(X) errors = y - output self.w_[1:] += self.eta * X.T.dot(errors) self.w_[0] += self.eta * errors.sum() cost = (errors ** 2).sum()/2.0 self.cost_.append(cost) return self def net_input(self, X): return np.dot(X, self.w_[1:] + self.w_[0]) def activation(self, X): return self.net_input(self, X): def predict(self, X): return np.where(self.activation(X) >= 0, 1, -1) #运行算法 ada = AdalineGD(eta=0.0001, n_iter=50) #学习率越低,每次权重的改进越精确;迭代次数越大,优化的结果越准确。 ada.fit(X, y) plot_decision_regions(X, y, classifier=ada) #预测数据输入到神经网络后预测 plt.title('Adaline-Gradient descent') plt.xlabel('花茎长度') plt.ylabel('花瓣长度') plt.legend(loc='upper left') plt.show() plt.plot(range(1, len(ada.cost_)+1), ada.cost_, marker='o') #检测改进效果 plt.xlabel('Epochs') #自我迭代的学习次数 plt.ylabel('sum-squard-error') #做出错误判断的次数
查看全部 -
感知器的激活函数是步调函数,当输入数据大于阈值-->1,小于阈值-->0.
自适应线性神经元的激活函数是直接将输入数据与参数相乘后求和:w0+x1w1+x2w2+……,并且会将计算结果与输入结果进行比较,若不一致,会根据给定结果动态调整参数-->渐进下降法。
渐进下降法:
和方差函数(U型),当函数对w求偏导后得到的切线斜率小于0(大于0)-->增大(减小)相应神经元参数w值
查看全部 -
数据解析和可视化
import pandas as pd import matplotlib.pyplot as plt import numpy as np df = pd.read_csv(file, header=None) y = df.loc[0:100, 4].values y = np.where(y == 'Iris-setosa', -1, 1) X = df.iloc[0:100, [0, 2]].values plt.scatter(X[:50, 0], X[:50, 1], color='red', marker='o', label='setosa') plt.scatter(X[50:100, 0], X[50:100, 1], color='blue', marker='x', label='versicolor') plt.xlabel('花瓣长度') plt.ylabel('花茎长度') plt.legend(loc='upper left') plt.show()
数据分类(将预测的数据输入到神经网络中,以图形方式绘制)
from matplotlib.colors import ListedColormap def plot_decision_regions(X, y, classifier, resolution=0.02): marker = ('s', 'x', 'o', 'v') colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan') cmap = ListedColormap(colors[:len(np.unique(y))]) x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() #将x1、x2最大最小值通过arange函数得到的向量,扩展成两个二维矩阵 xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution)) #预测 Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T) #ravel还原成单维向量 #绘制 Z= Z.reshape(xx1.shape) #将Z转换成与xx1一样的二维数组 plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap) #在两组分类结果中间画分割线-->必须线性可分 plt.xlim(xx1.min(), xx1.max()) plt.ylim(xx2.min(), xx2.max()) for idx, cl in enumerate(np.unique(y)): plt.scatter(x=X[y==cl, 0], y=X[y==cl, 1], alpha=0.8, c=cmap(idx), marker=markers[idx], label=cl)
查看全部 -
感知器的分类算法
import numpy as mp class Perception(objet): def __init__(self, eta=0.01, n_ier=10): #eta学习率,n_iter训练权重向量的重复次数 self.eta = eta self.n_iter = n_iter #根据输入样本培训神经元,X:shape[n_sample, n_feature], n_feature指神经元接收的电信号X数量 def fit(self, X, y): self.w_ = np.zero(1+X.shape[1]) #初始权重向量w_为0,括号里加一是包括激励函数的阈值w0 self.errors_ = [] #errors_用于记录神经元判断出错次数,是个队列 for _ in range(self.n_iter): errors = 0 for xi, target in zip(X, y): #权重更新 update = self.eta * (target - self.predict(xi)) self.w_[1:] += update * xi #阈值更新 self.w_[0] += update errors += int(update != 0.0) self.errors_.append(errors) def net_input(self, X): #输入电信号X与权重w的点积 return np.dot(X, self.w_[1:]) + self.w_[0] def predict(self, X): #预测分类 return np.where(self.net_input(X) >= 0.0, 1, -1)
查看全部 -
感知器算法:要求数据线性可分
查看全部 -
机器学习中用于对数据进行分类的算法:1.感知器。2.适应性的线性神经元。
激活函数(也叫单元步调函数)
机器学习的本质是模拟人的神经元对信息的处理方法。根据神经学的研究,神经元可以看做是一个简单的带有二进制输出功能的逻辑电路门。
查看全部 -
自适应线性神经元
查看全部 -
神经元的数学表示
激活函数
向量的转置与乘积的表达式
查看全部 -
课程大纲
查看全部 -
算法步骤总结
查看全部 -
感知器数据分类算法步骤
查看全部 -
真反馈电路查看全部
-
更新权重
查看全部
举报
0/150
提交
取消