KNN-验证码识别

1、验证码数据集
验证码captcha 是是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水等。
本章主要以MNIST数据集为例介绍数字型验证码,MNIST是一个入门级的计算机视觉数据库,它包含各种手写数字图片。总共分十类,0~9十个数字。数据集包括60000张图片训练数据集和10000张图片测试数据集。每一个MNIST数据单元由两部分组成:一张包含手写数字的图片和一个对应的标签。每张图片包含2828个像素点,可以把这个数组展开成一个二维向量,长度是2828=784.
KNN-验证码识别_第1张图片
2.特征提取
1.一维向量方法
这也是MNIST默认的特征提供方法,将28*28的图片转换成长度为784的一维向量。

import tflearn.datasets.mnist as mnist
X, Y, testX, testY = mnist.load_data(one_hot=True)

2.二维向量方法
为了适应特定模型,需要将原本的一维向量转换回原来的28*28的二维向量,具体方法使用数组的reshape 函数可以完成。

X = X.reshape([-1, 28, 28, 1])
    testX = testX.reshape([-1, 28, 28, 1])

3、K邻近算法模型训练
步骤:
1.读取MNIST数据集数据。
2.按照文件划分为训练集和测试集。
3.使用K邻近算法在训练集上训练,获得模型数据。
4.使用模型数据在测试集上进行预测。
5.验证K邻近算法预测效果。
4、代码

# -*- coding: utf-8 -*-

import tflearn
import os
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn import svm
from sklearn import neighbors

# Data loading and preprocessing
import tflearn.datasets.mnist as mnist

def do_knn_1d(x_train, y_train,x_test, y_test):
    print("KNN and 1d")
    clf = neighbors.KNeighborsClassifier(n_neighbors=15)
    print(clf)
    clf.fit(x_train, y_train)
    y_pred = clf.predict(x_test) 
    print(metrics.accuracy_score(y_test, y_pred))
     #print metrics.confusion_matrix(y_test, y_pred)
     
if __name__ == "__main__":
    print("Hello MNIST")
    X, Y, testX, testY = mnist.load_data(one_hot=False)
    do_knn_1d(X, Y, testX, testY)

结果:Hello MNIST
Extracting mnist/train-images-idx3-ubyte.gz
Extracting mnist/train-labels-idx1-ubyte.gz
Extracting mnist/t10k-images-idx3-ubyte.gz
Extracting mnist/t10k-labels-idx1-ubyte.gz
KNN and 1d
KNeighborsClassifier(algorithm=‘auto’, leaf_size=30, metric=‘minkowski’, metric_params=None, n_jobs=None, n_neighbors=15, p=2, weights=‘uniform’)
KNN-验证码识别_第2张图片

你可能感兴趣的:(KNN-验证码识别)