文档章节

感知机算法-原始形式

二胡艺
 二胡艺
发布于 2017/03/22 00:11
字数 389
阅读 42
收藏 0

一、感知机算法-原始形式
算法描述:
输入:数据集$T = { (x_{1},y_{1}),(x_{2},y_{2}),..,(x_{n},y_{n})}$,其中$x_{i} \in X = R^{n},y_{i} \in Y={-1,1},i = 1,2,..,N$。学习率$\eta(0<\eta<1)$
输出:$w,b$ ;感知机模型:$f(x) = sign(w \cdot x + b)$
(1).选取初始值$w_{0},b_{0}$
(2).在训练数据中选取$(x_{i},y_{i})$
(3).如果$y_{i}(w\cdot x_{i}+b) \leqslant 0$
$w \leftarrow w + \eta y_{i}x_{i}$
$b \leftarrow b + \eta y_{i}$
(4).转到(2),直到训练集中没有误分类点

%matplotlib inline
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import numpy as np

class Perceptron:
    def __init__(self):
        self.W = []
        self.b = 0
        self.eta = 0.1
    def __decission_func(self,x,y):
        return y * self.__clac_Wx_add_b(x)
    def __clac_Wx_add_b(self,x):
        sum = 0
        for i in range(len(x)):
            sum += self.W[i]*x[i]
        return sum + self.b
    def fit(self,X,Y):
        num_samples,feat_dim = X.shape
        self.W = np.zeros((feat_dim))
        self.b = 0
        OK = False
        while OK == False:
            num_Ok = 0
            for n in range(num_samples):
                xi = X[n,:]
                yi = Y[n]
                if self.__decission_func(xi,yi) <= 0:
                    self.W = self.W + self.eta * yi * xi
                    self.b = self.b + self.eta * yi
                else:
                    num_Ok += 1
                if num_Ok == num_samples:
                    OK = True
    def predict(self,x):
        return 1 if self.__clac_Wx_add_b(x) > 0 else -1
def clac_y(x,W,b):
    return -b / W[0] - W[1] / W[0] * x

X = np.array([[3,3],[4,3],[1,1]])
Y = np.array([1,1,-1])
clf = Perceptron()
clf.fit(X,Y)

color = [str(item/255.) for item in Y]
plt.scatter(X[:,0],X[:,1],c = color,s=300)
plt.text(3,2.5,s='+1')
plt.text(4,2.5,s='+1')
plt.text(1,0.5,s='-1')

print 'W=',clf.W,' b=',clf.b
x = [1,3]
y = []
for i in range(2):
    y.append(clac_y(x[i],clf.W,clf.b))
plt.plot(x,y)

#pridect data
xx=[2,5]
rsp = clf.predict(xx)
colr = [str(item/255.) for item in [rsp]]
plt.scatter(xx[0],xx[1],s=100)
sym = '+1' if rsp == 1 else '-1'
plt.text(xx[0],xx[1] - 0.5,s=sym)
W= [ 0.1  0.1]  b= -0.3

输入图片说明

© 著作权归作者所有

上一篇: KNN
二胡艺
粉丝 4
博文 42
码字总数 12555
作品 0
镇江
程序员
私信 提问
统计学习方法之感知机

1.感知机模型 在机器学习中,感知机(perceptron)是二分类的线性分类模型,属于监督学习算法。输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两...

JasonhavenD
2017/12/08
0
0
感知机理论与实践代码

本文主要参考李航老师的《统计学习方法》第二章感知机 感知机(perceptron)是一个二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别,取值为+1或-1。感知机模型是神经网络和SVM...

FoolishFlyFox
2017/12/30
0
0
统计学习方法第二章:感知机(perceptron)算法及python实现

统计学习方法第二章:感知机(perceptron)算法及python实现 统计学习方法第三章:k近邻法(k-NN),kd树及python实现 统计学习方法第四章:朴素贝叶斯法(naive Bayes),贝叶斯估计及python实现 ...

无限大的饿
02/17
0
0
感知机(python实现)

感知机(perceptron)是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两类的分离超平面。感知机旨在求出该超平面,为求得...

技术mix呢
2017/10/18
0
0
统计学习二:2.感知机代码实现

通过上文可知感知机模型的基本原理,以及算法的具体流程。本文实现了感知机模型算法的原始形式,通过对算法的具体实现,我们可以对算法有进一步的了解。具体代码可以在我的github上查看。 代...

之语
2018/08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
6
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部