-
分类机器学习算法:
- 感知器perceptron
- 自适应性神经元adaptive linear neuron
内容:
- 使用pandas、NumPy和matplotlib读取、处理和可视化数据
- 使用python实现线性分类算法
感知器算法实现
-
感知器模型
-
感知器学习规则
输入训练样本X和初始权重向量W,将其进行向量的点乘,然后将点乘求和的结果作用于激活函数sign(),得到预测输出O,根据预测输出值和目标值之间的差距error,来调整初始化权重向量W。如此反复,直到W调整到合适的结果为止。 -
算法的原始形式
参考:https://blog.csdn.net/red_stone1/article/details/80491895
-算法:
#感知器算法
import numpy as np
class Perceptron(object):
'''
Perceptron classifier(感知器分类器)
Parameters(参数)
---------------------
eta:float 学习率
Learning rate(between 0.0 and 1.0)
n_iter:int 权重向量的训练次数
Passes over training dataset
Attributes(属性)
---------------------
w_: 1d_array 一维权重向量
Weights after fitting
errors_: list 记录神经元判断错误的次数
Number of misclassifications in every epoch
'''
#初始化对象
def __init__(self,eta=0.01,n_iter=10): #eta:学习率;n_iter:在训练集上进行迭代的次数
self.eta = eta
self.n_iter = n_iter
#训练模型
def fit(self,X,y):
'''
fit training data.(拟合训练数据)
Parameters(参数)
-------------------
X: {array-like},shape = [n_samples, n_features]
Trainig vectors,where n_samples is the number of samples and n_features is the number of features
y: arrat-like, shape = [n_samples]
Target values
X为n行m列的训练样本矩阵(n个样本,m个特征值);y为目标矩阵n行1列
Returns
---------------
self : object
'''
##对于那些并非在初始化对象时创建但是又被对象中其他方法调用的属性,可以在后面添加一个下划线,例如self.w_
self.w_ = np.zeros(1 + X.shape[1]) #self.w_为权值,初始化为0向量(一维矩阵) ;shape属性返回维数,shape[0]返回行数,shape[1]返回列数
self.errors_ =[] #self.error_为误差
for _ in range(self.n_iter): #下划线表示临时变量, 仅用一次,后面无需再用到
errors = 0
for xi, target in zip(X,y): #zip()函数见下解释;xi,target为一条样本的特征值(训练数)及目标值
update = self.eta*(target - self.predict(xi)) #计算预测与实际值之间的误差在乘以学习率
self.w_[1:] +=