李航统计学习感知机算法实现


前言

李航的《统计学习方法》和西瓜书是入门机器学习进而到深度学习的经典书籍,笔者是数学专业大二在读,在编程方面仍有许多不足之处,在已经看完相关经典书籍后开始编程实践。因为本人愚钝,且不善编程,所以在实现算法的过程中总有许多冗余操作,但那也不失为一种特色,因为我在编辑代码的时候仅使用简单的操作同时多注释足够详细。希望自己的代码可以帮助到更多和我一样初入机器学习的同学,我们一起进步。本文对感知机算法做出了实现,仅供参考,转载注明出处。

感知机的算法实现

感知机是最基本的,也是最简单的机器学习模型,主要通过线性模型来区分线性可分的数据集
1,数据集的具体内容
李航统计学习感知机算法实现_第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,代码实现结果
李航统计学习感知机算法实现_第2张图片

总结

感知机算法是比较古老的算法了,对于线性可分模型具有较好的分类效果,因为只用到了随机梯度下降算法和简单的线性模型,所以相对容易实现

你可能感兴趣的:(笔记,python,机器学习)