统计学习方法读书笔记4-感知机课后习题

本文记录了学习统计学习方法中感知机的部分,详细解答了课本和视频课后的习题,包括从自编程实现到使用sklearn库的实践,深入理解感知机的工作原理。
摘要由CSDN通过智能技术生成

1.课本课后习题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.视频课后习题

在这里插入图片描述

(1)自编程实现
# 感知机自编程实现-面向对象
import numpy as np
import matplotlib.pyplot as plt

# 构建感知机类
class Myperceptron():
    # 属性初始化
    def __init__(self):
        # 不知道x_train的shape
        self.w = None
        self.b = 0
        self.η = 1

    # 核心方法实现-随机梯度下降
    def fit(self,x_train,y):

        m,n = np.shape(x_train)
        # w的dim1与x的特征值相对应
        # x.T:[2,3] w : [1,2]
        self.w = np.zeros((1,n))
        i = 0
        # for 与 while的区别
        while i < m:
            # 获取训练集的x,y
            xi = x_train[i]
            yi = y[i]
            # 误判点的特征为:-yi*(w*xi+b) >= 0,如果为误判点,则w、b更新
            if -1 * yi * (np.dot(self.w,xi.T) + self.b) >= 0:
                self.w = self.w + self.η * np.dot(yi,xi)
                self.b = self.b + self.η * yi
                # 如果为误判点,重头检测
                i = 0
            else:
                i += 1
        # 当i=m时,while循环结束

def draw(x,w,b):

    # 生产分离超平面的两个点
    x_new = np.array([[0], [6]])
    # 公式变形
    # y_predict = -(w[0]*x_new + b) / w[1]
    y_predict = -(b + w[0][0] * x_new) / w[0][1]

    plt.plot(x[:2,0],x[:2,1],'b*',label='1')
    plt.plot(x[-1,0],x[-1,1],'rx',label='-1')

    # 绘制分离超平面
    plt.plot(x_new, y_predict, "b-")
    # 设置两坐标轴起止值
    plt.axis([0, 6, 0, 6])
    # 设置坐标轴标签
    plt.xlabel('x1')
    plt.ylabel('x2')
    # 显示图例
    plt.legend()
    # 显示图像
    plt.show()


# 主函数
def main():
    x_train = np.array([[3,3],[4,3],[1,1]])
    y = np.array([1,1,-1])

    # 构建感知机对象,对数据进行训练
    perceptron = Myperceptron()
    perceptron.fit(x_train,y)
    print(perceptron.w)
    # 结果图像绘制
    draw(x_train,perceptron.w,perceptron.b)


if __name__ == '__main__':
    main()
(2)sklearn形式

在这里插入图片描述

L1正则化:特征值更稀疏
L2正则化:权值更均匀
w,b初始值为0时,w、b均为eta0的整数倍,
误分类点的判定条件为yi(w*xi + b) <= 0,此时eta0的影响为0
所以不同的学习速率对模型学习速度和结果无影响

当w,b不为0时,有影响
# sklean实现感知机
import numpy as np
from sklearn.linear_model import Perceptron

# 训练数据集
x_train = np.array([[3,3],[4,3],[1,1]])
y = np.array([1,1,-1])

perceptron = Perceptron()
perceptron.fit(x_train,y)

# attribute
print('w:',perceptron.coef_)
print('b:',perceptron.intercept_)
print('n_iter:',perceptron.n_iter_)

# 测试模型预测的准确率
res = perceptron.score(x_train,y)
print('correct rate : %d'%res)
w: [[1. 0.]]
b: [-2.]
n_iter: 9
correct rate : 1
(3)感知机

在这里插入图片描述

感知机模型的假设空间是分离超平面wx+b=0
模型的复杂度主要体现在x的特征数量上面,也就是维度d上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值