机器学习算法完整版见fenghaootong-github

MINST for KNN

数据集描述

数据文件train.csv和test.csv包含从零到九的手绘数字的灰度图像。

每个图像是高28个像素,宽28个像素,总共784像素,每个像素都有一个与之相关的像素值,用来表示像素的亮度,数字越高亮度越暗,这个值的范围是0-255

训练集有785列,第一列是标签是用户绘制的真实数字,剩下的列是像素值,每一行是一个数字

训练集中的每个像素列都有一个名称,如pixelx,其中x是0到783之间的整数。为了在图像上定位这个像素,假设我们已经将x分解为x = i * 28 + j,其中i和j是0到27之间的整数。然后,pixelx位于28 x 28矩阵的第i行和第j列(索引为零)。

测试数据集(test.csv)与训练集相同,只是它不包含“标签”列。

000 001 002 003 ... 026 027   
028 029 030 031 ... 054 055   
056 057 058 059 ... 082 083   
 |   |   |   |  ...  |   |    
728 729 730 731 ... 754 755   
756 757 758 759 ... 782 783   

代码如下

from sklearn import neighbors
import pandas as pd

数据预处理

df = pd.read_csv('../DATA/train.csv')
labels = df.as_matrix(columns=['label'])#find lable to transform to matrix
dataset = df.drop('label', axis=1).as_matrix()#transform dataset to matrxi without drop lable 
dataset = dataset / (28.0*28.0)

数据分为测试和验证集

train_len = int(len(labels.ravel()) * 0.75)
train_dataset = dataset[:train_len]
train_labels = labels[:train_len]
valid_dataset = dataset[train_len:]
valid_labels = labels[train_len:]

模型训练

knn = neighbors.KNeighborsClassifier()  
#训练数据集  
knn.fit(train_dataset, train_labels.ravel())  
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=1, n_neighbors=5, p=2,
           weights='uniform')

模型预测

#预测  
predictions = [int(a) for a in knn.predict(valid_dataset)]

查看结果

sum = 0
for a, y in zip(predictions, valid_labels.ravel()):
    if a == y:
        sum = sum + 1
print ("%s of %s test values correct.\ntest accuracy: %f" % (sum, len(valid_labels.ravel()), sum / len(valid_labels.ravel())))
957 of 1050 test values correct.
test accuracy: 0.911429
posted on 2018-03-08 10:52  一小白  阅读(302)  评论(0编辑  收藏  举报