机器学习经典算法:感知机PLA
创始人
2025-05-31 23:08:03
0

机器学习常见模型(面试必备)

第一篇:感知机模型


文章目录

  • 机器学习常见模型(面试必备)
  • 一、感知机概述
    • 1.1 感知机必备知识
    • 1.2 原始感知机
    • 1.3 对偶感知机
  • 二、Python编程实现感知机
  • 三、参考资料
  • 总结


一、感知机概述

1.1 感知机必备知识

  • 针对:二分类问题
  • 实质:分离超平面,是一个判别模型
  • 策略:基于误分类的损失函数
  • 方法:利用梯度下降对损失函数进行极小化
  • 特点:简单易实现
  • 分类:原始形式,对偶形式

1.2 原始感知机

  • 输入:训练数据集 T={(x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_1, y_1), (x_2, y_2), ... , (x_N, y_N)\}T={(x1​,y1​),(x2​,y2​),...,(xN​,yN​)},其中Xi∈RnX_i\in R^nXi​∈Rn, yi∈y={−1,+1}y_i \in y=\{-1, +1\}yi​∈y={−1,+1},i=1,2,...,Ni=1, 2, ... , Ni=1,2,...,N,学习率 η(0<η≤1)\eta(0<\eta \leq 1)η(0<η≤1)。

  • 输出:www,bbb;模型 f(x)=sign(w⋅x+b)f(x)=sign(w \cdot x+b)f(x)=sign(w⋅x+b)
       1、选取初始值 w0w_0w0​,b0b_0b0​;
       2、在训练集中选取数据(xi,yi)(x_i, y_i)(xi​,yi​);
       3、如果 yi(w⋅x+b)≤0y_i(w \cdot x+b) \leq 0yi​(w⋅x+b)≤0,则 w=w+ηyixiw=w+\eta y_i x_iw=w+ηyi​xi​;$b=b+\eta y_i $;
       4、转至 2 ,直到训练集中没有误分类点。

1.3 对偶感知机

  • 假设样本点 (xi,yi)(x_i, y_i)(xi​,yi​) 在整个更新过程中被误分类 nin_ini​ 次,那么权重更新公式更改为: w=∑i=1Nniηyixiw=\sum\limits_{i = 1 }^N n_i \eta y_i x_iw=i=1∑N​ni​ηyi​xi​;b=∑i=1Nniηyib=\sum\limits_{i = 1 }^N n_i \eta y_ib=i=1∑N​ni​ηyi​。那么模型函数为: f(x)=sign(∑i=1Nniηyixi⋅x+∑i=1Nniηyi)f(x)=sign(\sum\limits_{i = 1 }^N n_i \eta y_i x_i \cdot x+ \sum\limits_{i = 1 }^N n_i \eta y_i )f(x)=sign(i=1∑N​ni​ηyi​xi​⋅x+i=1∑N​ni​ηyi​)

  • 按照新的权重更新方式,直到训练集中没有误分类点。

二、Python编程实现感知机

  • 准备数据集
  • 模型训练
  • 效果测试
  • 可视化展示
import numpy as np
import random
import matplotlib.pyplot as plt# sign function
def sign(v):if v > 0:return 1else:return -1# train function to get weight and bias
def training():train_data1 = [[1, 3, 1], [2, 5, 1], [3, 8, 1], [2, 6, 1]]  # positive sampletrain_data2 = [[3, 1, -1], [4, 1, -1], [6, 2, -1], [7, 3, -1]]  # negative sampletrain_data = train_data1 + train_data2;weight = [0, 0]bias = 0learning_rate = 0.1train_num = int(input("train num:"))for i in range(train_num):train = random.choice(train_data)x1, x2, y = train;y_predict = sign(weight[0] * x1 + weight[1] * x2 + bias)print("train data:x:(%d, %d) y:%d ==>y_predict:%d" % (x1, x2, y, y_predict))if y * y_predict <= 0:weight[0] = weight[0] + learning_rate * y * x1weight[1] = weight[1] + learning_rate * y * x2bias = bias + learning_rate * yprint("update weight and bias:")print(weight[0], weight[1], bias)print("stop training :")print(weight[0], weight[1], bias)# plot the train data and the hyper curveplt.plot(np.array(train_data1)[:, 0], np.array(train_data1)[:, 1], 'ro')plt.plot(np.array(train_data2)[:, 0], np.array(train_data2)[:, 1], 'bo')x_1 = []x_2 = []for i in range(-10, 10):x_1.append(i)x_2.append((-weight[0] * i - bias) / weight[1])plt.plot(x_1, x_2)plt.show()return weight, bias# test function to predict
def test():weight, bias = training()while True:test_data = []data = input("enter q to quit,enter test data (x1, x2):")if data == 'q':breaktest_data += [int(n) for n in data.split(',')]predict = sign(weight[0] * test_data[0] + weight[1] * test_data[1] + bias)print("predict==>%d" % predict)if __name__ == "__main__":test()

三、参考资料

案例参考

总结

   感知机算法到这里就结束了,望大家多多指点。

相关内容

热门资讯

嘉兴男子与妻争吵,突然将行李箱... 近日,浙江嘉兴一对夫妻因琐事发生争吵,丈夫突然将装满衣物的行李箱从6楼扔到楼下,引发关注。11月22...
三地107家律所齐聚丰台,京津... 11月22日,京津冀律师驿站举办“党建业务深度融合 促进行业规范发展”主题活动,发布“百千万行动计划...
家装预付资金安全困局如何破解,... 家装预付资金安全困局如何破解 专家提出:建立“先验收后付款”装修资金存管制度 预交数万元甚至数十万元...
工行安康解放路支行积极开展《反... 为深入贯彻落实《国家金融监督管理总局安康监管分局办公室关于开展<反有组织犯罪法>宣传活动的通知》要求...
重庆公布育儿补贴制度实施方案 原标题:每孩每年3600元 重庆公布育儿补贴制度实施方案 11月21日,记者了解到,市卫生健康委、市...
十五运会组委会在深总结本届赛事... 深圳新闻网2025年11月22日讯(深圳报业集团记者 林炜航)11月21日,十五运会组委会在深圳市民...
中国军视网:日本妄言击沉福建舰... 本文转自【中国军视网】; 日本首相高市早苗发表涉台错误言论,公然挑战一个中国原则,甚至还有日本无知政...
重磅!东莞长安50万㎡产城发布... 在当下竞争激烈的市场环境中,中小企业如何突破成本压力,找到一片既能扎根成长又能眺望未来的理想栖息地?...
毕马威:政策、资本等多维着力 ... 由毕马威联合长三角G60科创走廊创新研究中心主办的“长三角高端装备新质领袖榜单发布仪式”于11月21...