《统计学习方法》 感知机Python 对偶形式实现
来源:互联网 发布:树莓派开源人工智能 编辑:程序博客网 时间:2024/05/16 07:37
上个博客中http://blog.csdn.net/tudaodiaozhale/article/details/77193533给大家讲了感知机的原始形式的实现。
接着给大家看看对偶形式的实现,其实跟原始形式就除了那个train不太一样,但是为了完整性,还是全部代码都写吧。首先是书中的数据集以及整体运行情况。
dataSet = [[3, 3], [4, 3], [1, 1]]labels = [1, 1, -1]perceptron = Perceptron(dataSet, labels) #创建一个感知机对象weights, bias = perceptron.train() #训练print "结果是:%s, %s" % (weights, bias)在构造函数中赋值到我们对象中的成员变量中。
def __init__(self, dataSet, labels): #初始化数据集和标签 self.dataSet = np.array(dataSet) self.labels = np.array(labels).transpose()这次不需要符号函数了。我们来直接看下训练函数。
def train(self): m, n = np.shape(self.dataSet) #m是行和n是列 weights = np.zeros(n) bias = 0 flag = False Gram = np.zeros((m , m)) for i in range(m): #计算Gram矩阵 for j in range(m): Gram[i][j] = dataSet[i] * np.mat(dataSet[j]).transpose() print Gram a = np.zeros(m) while flag != True: flag = True for i in range(m): #遍历样本 sum = 0 for j in range(m): #求误分条件 sum += a[j] * self.labels[j] * Gram[j][i] sum += bias print sum if (sum * self.labels[i] <= 0): a[i] += 1 bias += self.labels[i] flag = False for i in range(m): weights += a[i] * self.dataSet[i] * self.labels[i] return weights, bias
先按惯例求出行和列,然后按书上说的求出Gram矩阵,用于后面的计算。
其次设置个flag标记,这个标记是用来标记训练出来的参数w和b 是否符合当前的训练样本了(进入循环时先设置为True,遍历训练样本时一旦发现有不符合的就设置为False)。
然后就是误分条件了。
对偶形式的原始条件有点复杂,仔细看下代码。
然后就是a和bias的更新了
最后是根据a求出权重,返回。
阅读全文
0 0
- 《统计学习方法》 感知机Python 对偶形式实现
- 统计学习方法(2)——感知机原始形式、对偶形式及Python实现
- 统计学习方法之感知机对偶形式Java实现代码
- 《统计学习方法》 感知机Python 原始形式实现
- 《统计学习方法》——对偶感知器的python实现
- 感知机的对偶形式 @ Python
- 感知机对偶形式的程序实现
- 感知机及其对偶问题,参考《统计学习方法》
- 《统计学习方法》学习笔记—感知机模型python实现
- 【用python实现《统计学习方法》】之感知机(perceptron)
- 统计学习方法 第2章+ 感知机python实现
- 感知机的对偶形式
- 感知机的对偶形式实现java版
- 统计学习方法感知机的实现
- 统计学习方法---感知机算法实现代码
- [统计学习方法]感知机
- 统计学习方法-感知机
- 统计学习方法:感知机
- 2017 Multi-University Training Contest
- 统计字符串中每个字符出现的个数
- unity性能最高的Shader:Unlit
- H5面试——Label的作用是什么?是怎么用的?
- hdu6124 Euler theorem 2017多校1005签到题
- 《统计学习方法》 感知机Python 对偶形式实现
- Android Studio 替换包名
- .net学习路线(转载)
- maven groupID 和 ArtifactID的区别与作用
- NSProxy浅谈--- Objective-c 伪多继承
- Android开发之6.0动态权限管理
- UVa 1588
- MySql直接备份数据库文件的方法(MyISAM和InnoDB有所不同)
- android webview与h5交互时所遇到的坑