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