如果你想知道怎么玩一下kaggle?那这篇文章就非常适合你了。
Kaggle练手项目:https://www.kaggle.com/c/digit-recognizer 0~9的手写体识别。
项目简要:
训练集:第一列为标签列,其余784列为对应像素点的明亮程度(28*28的图像)
测试集:给你N*784列的像素点,让你判断这N样本的手写输入。
解题思路:使用KNN算法,测算临近5个训练集是什么数字,选择投票最高的。
使用sklearn-KNN算法完成kaggle的手写识别比赛测试代码如下:
# coding: utf-8
#读取表头信息
import csv
import sklearn.cross_validation as cross_validation
from sklearn import neighbors
from sklearn import neighbors
import sklearn.metrics as metrics
csvfile = open(r'F:\pythonstudy\kaggle-Knn\data\train.csv', 'rb')
reader=csv.reader(csvfile)
headers = reader.next()
print headers
#读取特征信息和结果信息
featureList=[]
labelList=[]
for row in reader:
labelList.append(row[0])
featureList.append(row[1:])
#将原始信息按9:1分割为训练集与测试集
train_data, test_data, train_target, test_target = cross_validation.train_test_split(featureList,labelList, test_size=0.1, random_state=0)
#输入默认模型
knn=neighbors.KNeighborsClassifier()
#训练模型
knn.fit(train_data,train_target)
#预测测试集
predict_test=knn.predict(test_data)
#现实预测结果
print metrics.classification_report(test_target, predict_test)
precision recall f1-score support
0 0.98 0.99 0.98 422
1 0.97 0.99 0.98 473
2 0.98 0.96 0.97 409
3 0.97 0.97 0.97 426
4 0.97 0.96 0.97 429
5 0.94 0.97 0.96 382
6 0.97 0.99 0.98 412
7 0.96 0.97 0.96 469
8 0.98 0.91 0.94 384
9 0.95 0.95 0.95 394
avg / total 0.97 0.97 0.97 4200
#输出结果你就可以上传啦~~
f = open(r"f:\result.csv", "w")
for i in predict_test:
f.write(i+'\n')
f.close()
使用完成后的感受:knn原始算法虽然简单,但是速度很慢。
后续处理方案:
1、改进knn稀疏矩阵的运算方案。(将像素为0的特征去除)
2、使用并行化的神经网络算法。
请期待后续blog更新~
另求机器学习组,讨论工程与算法~~~谢谢