您的位置:首页 > 编程语言 > Python开发

kaggle的手写识别比赛(python sklearn-KNN)

2016-02-28 23:46 751 查看
如果你想知道怎么玩一下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更新~

另求机器学习组,讨论工程与算法~~~谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: