有木有完整的代码
请问老师~代码可不要上传到git上
请问老师~代码可不要上传到git上
2017-05-23
# coding=utf-8 import numpy as np #分类器代码 class Perceptron(object): """ eta:学习率 n_iter:权重向量的训练次数 w_:神经分叉权重向量 errors_:用于记录神经元判断出错次数 """ def __init__(self,eta = 0.01,n_iter = 10): self.eta = eta; self.n_iter = n_iter pass def fit(self,X,y): """ 输入训练数据,培训神经元 :param X: 输入样本向量 :param y: 对应样本分类 X:shape[n_samples, n_features] X:[[1,2,3],[4,5,6]] n_samples :2 n_features:3 y:[1,-1] """ """ 初始化向量为0 加一是因为步调函数阈值 """ self.w_ =np.zeros(1+X.shape[1]); self.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) self.errors_.append(errors) pass pass def net_input(self,X): 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 import pandas as pd file = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data' df = pd.read_csv(file,header=None) import matplotlib.pyplot as plt y = df.loc[0:100,4].values y=np.where(y=='Iris-setosa',-1,1) #根据整数位置选取单列或单行数据 X = df.loc[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('huabanchangdu') plt.ylabel('huajingchangdu') plt.legend(loc='upper left') ppn =Perceptron(eta=0.1,n_iter=10) ppn.fit(X,y) from matplotlib.colors import ListedColormap def plot_decision_region(X,y,classifier,resolution=0.02): markers=('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() 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) print (xx1.ravel()) print(xx2.ravel()) print Z Z=Z.reshape(xx1.shape) 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) plot_decision_region(X,y,ppn,resolution=0.02) plt.xlabel('huajingchang') plt.ylabel('huabanchang') plt.legend(loc='upper left') plt.show()
# coding=utf-8 import numpy as np import matplotlib.pyplot as plt #ada代码 class AdalineGd(object): ''' eta: float 学习效率,处于0和1之间 n_iter:int 对训练数据进行学习,改进次数 w_:一维向量 存储权重数值 error_: 一维向量 存储每次迭代改进时,神经网络对数据进行错误判断的次数 ''' def __init__(self,eta = 0.01,n_iter=50): self.eta=eta self.n_iter =n_iter def fit(self,X,y): ''' :param X: 二维数组[n_samples, n_features] n_samples 表示X中含有训练数据条目数 n_features含有4个数据的一维向量,用于表示一条训练条目 :param y: 一维向量 用于存储每一训练条目对应的正确分类 :return: ''' 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 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(X) def predict(self,X): return np.where(self.activation(X)>=0,1,-1) import pandas as pd file = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data' df = pd.read_csv(file,header=None) y = df.loc[0:100,4].values y=np.where(y=='Iris-setosa',-1,1) #根据整数位置选取单列或单行数据 X = df.loc[0:100,[0,2]].values from matplotlib.colors import ListedColormap def plot_decision_region(X,y,classifier,resolution=0.02): markers=('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() 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) print (xx1.ravel()) print(xx2.ravel()) print Z Z=Z.reshape(xx1.shape) 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) ada = AdalineGd(eta=0.0001,n_iter=100) ada.fit(X,y) plot_decision_region(X,y,classifier=ada) plt.xlabel('huajingchang') plt.ylabel('huabanchang') 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') plt.show()
举报