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

鸟窝 2017-12-07 19:36

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

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

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

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

格式如下

123456789101112131415
v16,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,party1,-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,democrat1,-1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,1,-1,-1,democrat1,1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,1,democrat1,-1,1,1,-1,1,1,-1,-1,-1,-1,-1,-1,1,1,1,democrat1,-1,1,-1,1,1,1,-1,-1,-1,-1,-1,-1,-1,1,1,democrat1,-1,1,-1,1,1,1,-1,-1,-1,-1,-1,-1,1,1,-1,republican1,-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后,保留先前训练的权值,训练结束后平均所有权值。最终用平均权值作为最终判别准则的权值。参数平均化可以克服由于学习速率过大所引起的训练过程中出现的震荡现象。

代码

12345678910111213141516171819202122232425262728293031323334
package mainimport (	"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))}

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

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

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

最后将评估结果打印。

评估结果

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

[返回] [原文链接]