第二章节 训练简单的机器学习分类算法
import numpy as np
class Perceptron(object):
"""
参数:
1.eta:学习速率
2.n_iter:训练集上迭代次数
3.w:权重
4.errors:每次迭代错误分类数目
"""
def __init__(self,eta=0.01,n_iter=10):
self.eta=eta
self.n_iter=n_iter
def fit(self,X,y):
"""拟合训练集
X;n×m,n个样本,m个特征
"""
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)
return self
def net_input(self,X):
"计算输入z"
return np.dot(X,self.w_[1:])+self.w_[0]
def predict(self,X):
"返回预测值"
return np.where(self.net_input(X) >=0, 1,-1)
import pandas as pd
df=pd.read_csv('https://archive.ics.uci.edu/ml/'
'machine-learning-databases/iris/iris.data',header=None)
df.tail()
|
0 |
1 |
2 |
3 |
4 |
145 |
6.7 |
3.0 |
5.2 |
2.3 |
Iris-virginica |
146 |
6.3 |
2.5 |
5.0 |
1.9 |
Iris-virginica |
147 |
6.5 |
3.0 |
5.2 |
2.0 |
Iris-virginica |
148 |
6.2 |
3.4 |
5.4 |
2.3 |
Iris-virginica |
149 |
5.9 |
3.0 |
5.1 |
1.8 |
Iris-virginica |
import matplotlib.pyplot as plt
import numpy as np
y=df.iloc[0:100,4].values
y=np.where(y=='Iris-setosa',-1,1)
X=df.iloc[0:100,[0,2]].values
plt.scatter(X[0:50,0],X[:50,1],color='red',label='setosa',marker='o')
plt.scatter(X[50:100,0],X[50:100,1],color='blue',label='versicolor',marker='o')
plt.xlabel('petal length')
plt.ylabel('sepal length')
plt.legend(loc='best')
plt.show()
![在这里插入图片描述](https://img-blog.csdnimg.cn/533db8f6349b44989ce18ff7c48f32ce.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5Y-q6K6h566X54uX,size_11,color_FFFFFF,t_70,g_se,x_16#pic_center)
ppn=Perceptron(eta=0.1,n_iter=20)
ppn.fit(X,y)
plt.plot