前言
李航的《统计学习方法》和西瓜书是入门机器学习进而到深度学习的经典书籍,笔者是数学专业大二在读,在编程方面仍有许多不足之处,在已经看完相关经典书籍后开始编程实践。因为本人愚钝,且不善编程,所以在实现算法的过程中总有许多冗余操作,但那也不失为一种特色,因为我在编辑代码的时候仅使用简单的操作同时多注释足够详细。希望自己的代码可以帮助到更多和我一样初入机器学习的同学,我们一起进步。本文对感知机算法做出了实现,仅供参考,转载注明出处。
感知机的算法实现
感知机是最基本的,也是最简单的机器学习模型,主要通过线性模型来区分线性可分的数据集
1,数据集的具体内容
2,通过代码实现感知机算法`
代码实现如下:
import numpy as np
import pandas as pd
#仅供参考转载注明出处
#定义sgn函数
def sgn(x):
if x > 0:
return 1
else:
return -1
#判断是否存在误分类点
def classfy(data, w, b):
for i in range(data.shape[0]):
xi = data[i, :-1].T
yi = data[i, -1]
if(sgn(np.matmul(xi.T, w)+b) != yi):
return i
return -1
def perceptran(data, lr):
w = np.array([0, 0, 0]).T
b = 0 #初始化w和b
while(1):
for i in range(data.shape[0]):
xi = data[i, :-1].T
yi = data[i, -1]
flag = classfy(data, w, b)
if(flag == -1): #判断是否有误分类点
return w, b
else:
w = w + lr*data[flag, -1]*data[flag, :-1].T
b = b + lr*data[flag, -1] #随机梯度下降方法的实践
break
#读取数据
csv = pd.read_csv('machineLearning1\perceptron\perceptranData.csv',
dtype={'sample': str, 'label': int})
data = np.array(csv)[:, 1:]
w, b = perceptran(data, 1)
print(w, b)
3,代码实现结果
总结
感知机算法是比较古老的算法了,对于线性可分模型具有较好的分类效果,因为只用到了随机梯度下降算法和简单的线性模型,所以相对容易实现