用python实现简单感知机算法
来源:互联网 发布:ireport java 编辑:程序博客网 时间:2024/06/09 07:41
之前有写过一篇关于感知机的理论篇,这算是实践篇,自己看了网上的视频后实现了一遍,具体代码仅供参考:
一、创建感知机类
import numpy as npclass perceptron(): '''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): '''输入训练数据,培训神经元,x输入样本向量,y对应样本分类''' '''初始化权重向量为0 加一是因为算法提到的w0,也就是步调函数阈值''' self.w_=np.zero(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=n*(y-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) pass pass def net_input(self,X): '''z=w0*1+x1*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 pass
二、导入数据
file = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'import pandas as pddf=pd.read_csv(file,header=None)
三、可视化展示
import matplotlib.pyplot as pltimport numpy as npy=df.loc[0:100,4].valuesy=np.where(y=='Iris-setosa',-1,1)X=df.loc[0:100,[0,2]].valuesplt.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()ppn=Perceptron(eta=0.1,n_iter=10)ppn.fit(X,y)from matplotlib.colors import ListedColormapdef plot_decision_regions(X,y,classifier,resolution=0.02): marker=('a','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() Z=classifier.predict(np.array([xx1.ravel(),xx2.ravel()]).T) print(xx1.ravel()) print(xx2.ravel())plot_decision_regions(X,y,ppn,resolution=0.02)plt.xlabel('花瓣长度')plt.ylabel('花径长度')plt.legend(loc='upper left')plt.show() 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),label=cl)
阅读全文
2 0
- 用python实现简单感知机算法
- 感知机学习算法的简单实现(Python)
- 感知机算法python实现
- [python]感知机学习算法实现
- Python感知机算法
- python实现简单感知器
- python实现感知器算法
- 感知机Python实现
- 感知机实现Python
- python感知机实现
- 词性标注的python实现-基于平均感知机算法
- 感知机算法原理(PLA原理)及 Python 实现
- 词性标注的python实现-基于平均感知机算法
- 感知哈希算法--python实现
- 神经网络-感知器算法python代码实现
- python实现自适应线性感知器算法
- MATLAB 感知机简单实现
- 感知机的 python 实现
- 国外官网ngrok内网映射外网方法
- android 字符串比较
- angular-cli配置 windows
- monkey运行日志基础分析
- 一篇不错的v4l2入门文档
- 用python实现简单感知机算法
- 什么是Web容器
- IOS 多工程依赖(.a)静态库和Bundle
- oracle表分区
- Bootstrap + AngularJS 双向数据绑定Form表单测试
- 华为OJ——iNOC产品部-杨辉三角的变形
- pdf.js跨域加载文件
- LeetCode
- thinkphp5 学习的一些注意事项