KNN应用之手写体识别

知识点:1 参数K的个数先选训练样本总数的开方,然后再调参

2. 图片转换成矩阵用cv2.imread()

   三维图片转换成2维用cv2.cvtColor()

   将多张二维图片组成的三维矩阵如(1000,28,28)即1000张28*28的图片转换成二维的数据用

  X_test = X_test.reshape(1000,784)或  X_test = X_test.reshape(1000, -1)

digit = cv2.imread('F:/sxt/data/0_1.bmp')

digit = cv2.cvtColor(digit, code = cv2.COLOR_BGR2GRAY)
digit.shape
plt.imshow(digit, cmap = plt.cm.autumn )

3. 将矩阵展示成图片用plt.imshow(digit)  后边一个参数调显示颜色

4. 将数据切分成测试集和训练集

X_train,X_test,y_train,y_test = train_test_split(X, y, test_size = 0.2,random_state = 100)

5. 将类实例化

    然后训练 

    预测的数据一般表示为字母加一个下划线 y_

    看结果好坏--两种方法

注:n_jobs 电脑开启的线程数,-1即全开,开的越多运行时间越短

        weights='distance', p=2  权重根据距离度量,距离越近权重越大, p为1则用曼哈顿距离,p为2则为欧氏距离。

knn = KNeighborsClassifier(n_neighbors= 63,weights='distance',p=2, n_jobs = -1)

knn.fit(X_train,y_train)

# 使用算法进行预测
# 保留了1000个数据,算法‘没见过‘这1000个数据
X_test = X_test.reshape(1000,784)
y_ = knn.predict(X_test)
# 准确率--以下两种方法都行
# (y_ == y_test).sum()/1000
print((y_ == y_test).mean())

knn.score(x_test, y_test)

 

 6. 将图片里的数字调成完全黑白,没有灰色过渡带,提高准确率.  这里二值化对结果影响不大,验证码识别时候二值化影响会较大

# 二值化操作
for i in range(5000):
    for y in range(28):
        for x in range(28):
            if X[i][y,x] < 200:
                X[i][y,x] = 0
            else:
                X[i][y,x] = 255

7.np.meshgrid

二维坐标系中,X轴可以取三个值1,2,3, Y轴可以取三个值7,8, 请问可以获得多少个点的坐标?
显而易见是6个:
(1,7)(2,7)(3,7)
(1,8)(2,8)(3,8)

np.meshgrid()就是干这个的

8. ravel()函数  concatenate() 函数

X1 = X1.reshape(-1,1)
Y1 = Y1.reshape(-1,1)
X_test = np.concatenate([X1,Y1],axis = 1)
X_test.shape
x1 = x1.reshape(-1,1)  # 变成8000行1列
# 平铺,一维化,reshape
# np.c_即上边的 np.concatenate的简写
X_test = np.c_[X1.ravel(),Y1.ravel()]
# X1.ravel() 与X1.reshape(-1)作用一样 将数据一维化

10. jupyternotebook 中%%time的使用

%%time执行正段代码用时
%%time 
y_ = knn.predict(X_test)
%time 执行紧跟到后边的一行代码用时
%time y_ = knn.predict(X_test)

#这样写输出时间是0
%time 
 y_ = knn.predict(X_test)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值