#感知机的Python实现

原始形式


# coding: utf-8
# 原始感知机的学习算法
import pandas as pd
import numpy as np
from pandas import *
import matplotlib.pyplot as plt
from numpy import *
x = np.array([[3, 4, 1],[3, 3, 1]]) #数据集

x = x.transpose()
print x[:,1]
y = np.array([1, 1, -1])
y = y.transpose()
m, n = shape(x)
w = zeros(n)
b = zeros(1)
Eta = 1
i = 1
while(1):
    flag = 0
    for i in range(0, m):
        ca = 0
        for h1 in range(0, n):
            ca += x[i][h1] * w[h1]
        result = (ca + b[0]) * y[i]
        print i, result
        if result <= 0:
            flag = 1
            for h1 in range(0, n):
                w[h1] = w[h1] + Eta * y[i] * x[i][h1]
            b[0] = b[0] + y[i]
            break
    if (i == 2) & (flag == 0):
        break
for i in range(0, n):
    print w[i] , b

fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ax1.scatter(x[:, 0], x[:, 1])
x1 = array([3, 3, 1])
y1 = 3 - x1
y1 = y1.transpose()
print 'x1', x1
print 'y1', y1
ax1.plot(x1, y1)
plt.show()

分类的结果图片显示为:
这里写图片描述

对偶形式

# 感知机的对偶形式
import pandas as pd
from pandas import *
import numpy as np
from numpy import *

x = array([[3, 4, 1], [3, 3, 1]])
y = array([1, 1, -1])
x = x.transpose()
m, n = shape(x)
Alpha = zeros(m)
Eta = 1
b = 0
flag = 0
while(1):
    flag = 0
    for i in range(0, m):
        temp = 0
        for j in range(0, m):
            for k in range(0, n):
                temp = temp + Alpha[j] * y[j] * x[j][k] * x[i][k]
        result = y[i] * (temp + b)
        if result <= 0:
            flag = 1
            Alpha[i] = Alpha[i] + Eta
            b = b + Eta * y[i]
            break
    if (flag == 0) & (i == m-1):
        break
for i in range(0, m):
    print Alpha[i], b




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值