使用Go 机器学习库来进行数据分析 3 (平均感知器)

smallnest · · 2214 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

目录 [−]

  1. 1984美国国会投票记录数据集
  2. 平均感知器
  3. 代码
  4. 评估结果

这一次,我们使用平均感知器(Average Perceptron)算法来预测美国国会的投票。

1984美国国会投票记录数据集

这一次,我们使用1984美国国会的投票记录来预测一下投票结果。

数据集针对不同的投票议题分为了16类, 记录了民主党和共和党议员们得投票结果。

格式如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
v16,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,party
1,-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,republican
-1,-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,republican
-1,-1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,democrat
1,-1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,1,-1,-1,democrat
1,1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,1,democrat
1,-1,1,1,-1,1,1,-1,-1,-1,-1,-1,-1,1,1,1,democrat
1,-1,1,-1,1,1,1,-1,-1,-1,-1,-1,-1,-1,1,1,democrat
1,-1,1,-1,1,1,1,-1,-1,-1,-1,-1,-1,1,1,-1,republican
1,-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,republican
-1,1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,-1,democrat
-1,-1,1,-1,1,1,-1,-1,-1,-1,-1,-1,-1,1,1,-1,republican
-1,-1,1,-1,1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,republican
......

这一次,我们还是将数据集分为训练数据和测试数据,以评估算法的预测结果的准确性。

平均感知器

感知器算法一个监督学习的二分分类器, 是线性分类器的一种。

感知机算法是非常好的二分类算法,该算法求取一个分离超平面,超平面由w参数化并用来预测,对于一个样本x,感知机算法通过计算y = [w,x]预测样本的标签,最终的预测标签通过计算sign(y)来实现。算法仅在预测错误时修正权值w。
平均感知机和感知机算法的训练方法一样,不同的是每次训练样本xi后,保留先前训练的权值,训练结束后平均所有权值。最终用平均权值作为最终判别准则的权值。参数平均化可以克服由于学习速率过大所引起的训练过程中出现的震荡现象。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package main
import (
"fmt"
base "github.com/sjwhitworth/golearn/base"
evaluation "github.com/sjwhitworth/golearn/evaluation"
perceptron "github.com/sjwhitworth/golearn/perceptron"
"math/rand"
)
func main() {
rand.Seed(4402201)
rawData, err := base.ParseCSVToInstances("../datasets/house-votes-84.csv", true)
if err != nil {
panic(err)
}
//Initialises a new AveragePerceptron classifier
cls := perceptron.NewAveragePerceptron(10, 1.2, 0.5, 0.3)
//Do a training-test split
trainData, testData := base.InstancesTrainTestSplit(rawData, 0.50)
fmt.Println(trainData)
fmt.Println(testData)
cls.Fit(trainData)
predictions := cls.Predict(testData)
// Prints precision/recall metrics
confusionMat, _ := evaluation.GetConfusionMatrix(testData, predictions)
fmt.Println(evaluation.GetSummary(confusionMat))
}

首先读入国会投票数据集。

然后创建平均感知器算法实例。

之后将数据集分为两份,一份训练数据,一份用来预测和评估。

最后将评估结果打印。

评估结果

1
2
3
4
5
Reference Class True Positives False Positives True Negatives Precision Recall F1 Score
--------------- -------------- --------------- -------------- --------- ------ --------
democrat 98 24 70 0.8033 0.6806 0.7368
republican 70 46 98 0.6034 0.7447 0.6667
Overall accuracy: 0.7059

有疑问加站长微信联系(非本文作者)

本文来自:鸟窝

感谢作者:smallnest

查看原文:使用Go 机器学习库来进行数据分析 3 (平均感知器)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

2214 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传