统计学习方法(1)——感知机

感知机简介

感知机为二类分类的线性分类模型,其输入为特征向量,输出为实例类别,即{+1,-1}。
在进行感知机学习策略的时候,需要注意训练数据集是否线性可分

示例代码

import numpy as np
import matplotlib.pyplot as plt
p_x = np.array([[3, 3], [4, 3], [1, 1]])
y = np.array([1, 1, -1])
plt.figure()

for i in range(len(p_x)):
    if y[i] == 1:
        plt.plot(p_x[i][0], p_x[i][1], 'ro') #'ro'表示红色圆点
    else:
        plt.plot(p_x[i][0], p_x[i][1], 'bo') #'bo'表示蓝色圆点
 
w = np.array([0, 0])
b = 0
delta = 1
 
for i in range(100):
    choice = -1
    for j in range(len(p_x)):
        if y[j] != np.sign(np.dot(w, p_x[0]) + b): #np.dot()表示两向量内积,返回的是常数
            choice = j
            break
    if choice == -1:
        break
    w = w + delta * y[choice]*p_x[choice] #此处常数与矩阵相乘,返回矩阵;若choice=-1,则代表取列表最后一位
    b = b + delta * y[choice]
 
line_x = [0, 10]
line_y = [0, 0]
 
for i in range(len(line_x)):
    line_y[i] = (-w[0] * line_x[i]- b)/w[1]
 
plt.plot(line_x, line_y)

手动迭代还可以计算,可是这块代码硬是没看懂,我还是缺失基本的编程思维,不过相信以后慢慢会好起来的,知乎萧大推荐了SICP这本书,原话如下:“在阅读SICP之前,你也许能通过调用几个函数解决一个简单问题。但阅读完SICP之后,你会学会如何将问题抽象并且分解,从而处理更复杂更庞大的问题,这是编程能力巨大的飞跃,这会在本质上改变你思考问题以及用代码解决问题的方式。”——思维方式确实是最重要的东西,我想提高代码能力的话,必须花时间观摩一下SICP这本书~

猜你喜欢

转载自blog.csdn.net/weixin_42785446/article/details/89003434