感知机 代码实现

前言:本文是李航统计学习方法第二章《感知机》的python代码实现,与在下的统计学习系列博文搭配使用。
感知机的代码实现较为简单,感知机原理请移步感知机.
代码如下:

import pandas as pd 
import numpy as np
##生成数据集
df=pd.DataFrame({'x1':[3,4,1],
'x2':[3,3,1],
'y':[1,1,-1]})
#定义感知机主题函数
def Perceptron(df,xlist,y,eta,maxiter):
###df是训练集,xlist是训练集中x字段的list,
#y是标签名,type为str,eta是学习率,maxiter是最大迭代次数###
    tmp=df.copy()
    n=len(xlist)
    ##初始化w b
    w=np.asarray(np.zeros(n))
    b=0
    #初始化误分类点和迭代次数i
    tmp_wrong=pd.DataFrame([1])
    i=1
    ##计算损失
    while (len(tmp_wrong)>0)&(i<=maxiter):
        tmp['loss']=np.asmatrix(df[xlist])*np.asmatrix(w).T+b
        tmp['loss1']=tmp['loss']*tmp[y]
        ##抓取误分类点集##
        tmp_wrong=tmp[tmp['loss1']<=0]
        if len(tmp_wrong)>0:
        ##选择损失最大的误分类点进行迭代
            wrong_index=tmp_wrong['loss1'].idxmin()#抓取其行索引
            #迭代
            wrong_index=tmp_wrong['loss1'].idxmin()
            w=w+eta*np.asarray(tmp.loc[wrong_index,y])*np.asarray(tmp.loc[wrong_index,xlist])
            b=b+eta*np.asarray(tmp.loc[wrong_index,y])
            i+=1
        else:
            break
    # 打印相关信息
    print('总共迭代了%s次,w为'%(i))
    print(w)
    print('b=%s'%(b))
    #返回w和b
    return w,b

结果如下:

w1,b1=Perceptron(df,['x1','x2'],y='y',eta=0.3,maxiter=100)
#总共迭代了8次,w为
#[0.6 0.3]
#b=-0.8999999999999999
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值