KNN邻近算法可用于分类,也可用于回归,具体的原理介绍参考博文http://www.cnblogs.com/v-July-v/archive/2012/11/20/3125419.html
本篇主要包括:手写数字图片的识别和KNN的实现。因为KNN分类算法通过距离来确定最近邻。距离算法有欧氏距离、曼哈顿距离和闵可夫斯基距离等,本篇主要使用欧氏距离。
通过找到K个最近邻做预测,计算预测样本和所有训练集中样本的距离,计算出最小的k个距离,然后多数表决。
(一)处理手写数字图片
数据下载地址:https://pan.baidu.com/s/1c1GXdJi
样本图片都为底色为黑色,手写数字为白色的位图(.bmp格式),而且图片大小固定,为28*28pi
处理方法:
- 计算每个像素点位置的rgb值,rgb(0,0,0)为纯黑色,rgb(255,255,255)为纯白色;
- 将所有像素点的颜色处理成'“0”和“1”的数值,黑色处理为数字‘1’,白色处理为数字‘0’
- 然后将每个像素点的数值写入文本文件。
抽样生成测试集数据文件和训练集数据文件。
代码:
import os
import datetime
import numpy as np
from numpy import *
from PIL import Image
import pandas as pd
import traceback
#图片处理函数
def Picture_handle(file_route, final_route):
img = Image.open(fi