Python用KNN算法实现验证码识别

合集下载

python验证码识别示例(二)复杂验证码识别

python验证码识别示例(二)复杂验证码识别

python验证码识别⽰例(⼆)复杂验证码识别 在这篇博⽂中⼿把⼿教你如何去分割验证,然后进⾏识别。

⼀:下载验证码 验证码分析,图⽚上有折线,验证码有数字,有英⽂字母⼤⼩写,分类的时候需要更多的样本,验证码的字母是彩⾊的,图⽚上有雪花等噪点,因此识别改验证码难度较⼤⼆:⼆值化和降噪: 三:切割:四:分类:五:测试识别率六:总结: 综合识别率在70%左右,对于这个识别率我觉得还是挺⾼的,因为这个验证码的识别难度还是很⼤代码:⼀. 下载图⽚:#-*-coding:utf-8-*-import requestsdef spider():url = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"for i in range(1, 101):print("正在下载的张数是:",i)with open("./1__get_image/{}.png".format(i), "wb") as f:f.write(requests.get(url).content)spider()⼆:验证码⼆值化和降噪:#-*-coding:utf-8-*-# coding:utf-8import sys, osfrom PIL import Image, ImageDraw# ⼆值数组t2val = {}def twoValue(image, G):for y in range(0, image.size[1]):for x in range(0, image.size[0]):g = image.getpixel((x, y))if g > G:t2val[(x, y)] = 1else:t2val[(x, y)] = 0# 根据⼀个点A的RGB值,与周围的8个点的RBG值⽐较,设定⼀个值N(0 <N <8),当A的RGB值与周围8个点的RGB相等数⼩于N时,此点为噪点# G: Integer 图像⼆值化阀值# N: Integer 降噪率 0 <N <8# Z: Integer 降噪次数# 输出# 0:降噪成功# 1:降噪失败def clearNoise(image, N, Z):for i in range(0, Z):t2val[(0, 0)] = 1t2val[(image.size[0] - 1, image.size[1] - 1)] = 1for x in range(1, image.size[0] - 1):for y in range(1, image.size[1] - 1):nearDots = 0L = t2val[(x, y)]if L == t2val[(x - 1, y - 1)]:nearDots += 1if L == t2val[(x - 1, y)]:nearDots += 1if L == t2val[(x - 1, y + 1)]:nearDots += 1if L == t2val[(x, y - 1)]:nearDots += 1if L == t2val[(x, y + 1)]:nearDots += 1if L == t2val[(x + 1, y - 1)]:nearDots += 1if L == t2val[(x + 1, y)]:nearDots += 1if L == t2val[(x + 1, y + 1)]:nearDots += 1if nearDots < N:t2val[(x, y)] = 1def saveImage(filename, size):image = Image.new("1", size)draw = ImageDraw.Draw(image)for x in range(0, size[0]):for y in range(0, size[1]):draw.point((x, y), t2val[(x, y)])image.save(filename)for i in range(1, 101):path = "1__get_image/" + str(i) + ".png"image = Image.open(path)image = image.convert('L')twoValue(image, 198)clearNoise(image, 3, 1)path1 = "2__erzhihua_jiangzao/" + str(i) + ".jpg"saveImage(path1, image.size)三:切割验证码:#-*-coding:utf-8-*-from PIL import Imagedef smartSliceImg(img, outDir, ii,count=4, p_w=3):''':param img::param outDir::param count: 图⽚中有多少个图⽚:param p_w: 对切割地⽅多少像素内进⾏判断:return:'''w, h = img.sizepixdata = img.load()eachWidth = int(w / count)beforeX = 0for i in range(count):allBCount = []nextXOri = (i + 1) * eachWidthfor x in range(nextXOri - p_w, nextXOri + p_w):if x >= w:x = w - 1if x < 0:x = 0b_count = 0for y in range(h):if pixdata[x, y] == 0:b_count += 1allBCount.append({'x_pos': x, 'count': b_count})sort = sorted(allBCount, key=lambda e: e.get('count')) nextX = sort[0]['x_pos']box = (beforeX, 0, nextX, h)img.crop(box).save(outDir + str(ii) + "_" + str(i) + ".png") beforeX = nextXfor ii in range(1, 101):path = "2__erzhihua_jiangzao/" + str(ii) + ".jpg"img = Image.open(path)outDir = '3__qiege/'smartSliceImg(img, outDir, ii,count=4, p_w=3)四:训练:#-*-coding:utf-8-*-import numpy as npimport osimport timefrom PIL import Imagefrom sklearn.externals import joblibfrom sklearn.neighbors import KNeighborsClassifierdef load_dataset():X = []y = []for i in"23456789ABVDEFGHKMNPRSTUVWXYZ":target_path = "fenlei/" + iprint(target_path)for title in os.listdir(target_path):pix = np.asarray(Image.open(os.path.join(target_path, title)).convert('L'))X.append(pix.reshape(25 * 30))y.append(target_path.split('/')[-1])X = np.asarray(X)y = np.asarray(y)return X, ydef check_everyone(model):pre_list = []y_list = []for i in"23456789ABCDEFGHKMNPRSTUVWXYZ":part_path = "part/" + ifor title in os.listdir(part_path):pix = np.asarray(Image.open(os.path.join(part_path, title)).convert('L'))pix = pix.reshape(25 * 30)pre_list.append(pix)y_list.append(part_path.split('/')[-1])pre_list = np.asarray(pre_list)y_list = np.asarray(y_list)result_list = model.predict(pre_list)acc = 0for i in result_list == y_list:print(result_list,y_list,)if i == np.bool(True):acc += 1print(acc, acc / len(result_list))X, y = load_dataset()knn = KNeighborsClassifier()knn.fit(X, y)joblib.dump(knn, 'yipai.model')check_everyone(knn)五:模型测试:# -*- coding: utf-8 -*-import numpy as npfrom PIL import Imagefrom sklearn.externals import joblibimport ostarget_path = "1__get_image/"source_result = []for title in os.listdir(target_path):source_result.append(title.replace('.png',''))def predict(model):predict_result = []for q in range(1,101):pre_list = []y_list = []for i in range(0,4):part_path = "part1/" + str(q) + "_" + str(i) + ".png"# print(part_path)pix = np.asarray(Image.open(os.path.join(part_path)))pix = pix.reshape(25 * 30)pre_list.append(pix)y_list.append(part_path.split('/')[-1])pre_list = np.asarray(pre_list)y_list = np.asarray(y_list)result_list = model.predict(pre_list)print(result_list,q)predict_result.append(str(result_list[0] + result_list[1] + result_list[2] + result_list[3])) return predict_resultmodel = joblib.load('yipai.model')predict_result = predict(model)# print(source_result)# print(predict_result)。

python 登录识别验证码算法-概述说明以及解释

python 登录识别验证码算法-概述说明以及解释

python 登录识别验证码算法-概述说明以及解释1. 引言1.1 概述验证码(Captcha)是一种用于识别用户是否为机器人的技术。

它通常通过在登录、注册或其他需要验证身份的页面上展示一串随机生成的字符或图像,要求用户正确输入或点击相关对象,以证明自己是真实的用户。

验证码的存在旨在防止自动化程序或恶意黑客攻击,保护网站和用户的安全。

在当前互联网的发展背景下,登录系统的验证码已经成为很多网站必备的安全措施之一。

然而,由于验证码的人工智能性质,很多传统的自动化操作和爬虫程序无法绕过验证码的阻拦,从而给网站的自动运营和数据采集带来了一定的困难。

因此,开发一种高效、准确的Python验证码识别算法成为了迫切需求。

本文将着重研究基于Python的验证码识别算法,探究其识别原理和应用方法。

首先,我们将详细介绍验证码的概念和其在用户身份验证中的重要性。

随后,我们将调研现有的验证码识别算法,分析其优缺点和应用场景。

最后,我们将重点讨论基于Python的验证码识别算法的研究,探索其在实际应用中的可行性和效果。

通过本文的阅读,读者将能够全面了解到验证码识别算法在Python 中的实现方式,为解决网站登录阻碍和数据采集问题提供了一种切实可行的解决方案。

同时,本文也可作为对验证码算法感兴趣的读者的参考,为他们进一步深入学习和研究验证码识别领域提供了一个起点。

1.2 文章结构本文主要分为以下几个部分来介绍Python登录识别验证码算法。

第一部分是引言,通过概述、文章结构和目的三个小节来介绍本文要阐述的内容。

第二部分是正文,其中包括验证码的概念和Python登录识别验证码的重要性两个小节。

在验证码的概念部分,将介绍验证码的定义、作用和常见类型等内容,为读者提供对验证码的基本了解。

在Python登录识别验证码的重要性部分,将探讨验证码在登录系统中的重要性,并介绍为何有必要使用Python来实现验证码识别算法。

第三部分是结论,包含现有的验证码识别算法和基于Python的验证码识别算法研究两个小节。

python 本地识别验证码代码

python 本地识别验证码代码

识别验证码通常是一个复杂的过程,因为验证码通常被设计成能够区分计算机程序和人类用户。

然而,有一些验证码可能相对容易通过机器学习或深度学习模型来识别。

下面是一个基本的例子,它使用Python的opencv库来识别验证码。

这个例子仅仅是一个简单的演示,并不能处理所有类型的验证码。

```pythonimport cv2import numpy as np# 读取图片img = cv2.imread('captcha.png', 0)# 二值化处理_, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)# 查找轮廓contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 遍历轮廓,尝试匹配每个字符for contour in contours:# 计算轮廓的边界框x, y, w, h = cv2.boundingRect(contour)# 提取字符图像char_img = img[y:y+h, x:x+w]# 尝试识别字符# 这里我们只是简单地将其转换为灰度图像并查找边界框gray = cv2.cvtColor(char_img, cv2.COLOR_BGR2GRAY)_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)if len(contours) > 0:# 如果找到轮廓,假设字符是字母或数字char = ''for cnt in contours:if cv2.contourArea(cnt) > 50:char = 'a' + str(len(char))else:char = '0' + str(len(char))print(char)```这个代码假设每个字符都是一个简单的形状,并且可以通过查找轮廓来识别。

基于Python的简单验证码识别

基于Python的简单验证码识别

基于Python的简单验证码识别摘要:验证码在⽹络安全⽅⾯发挥着关键作⽤,验证码的主要⽬的是区分⼈类和计算机,⽤来防⽌⾃动化脚本对⽹站的⼀些恶意⾏为。

⽬前绝⼤多数⽹站都利⽤验证码来阻⽌恶意脚本程序的⼊侵。

验证码经过图像的预处理字符分割,匹配识别等步骤来完成对字符验证的处理,后进过特征提取与匹配等操作完成对⼀个验证码的识别。

本⽂选取了⼀个⽹站进⾏⽹站登录的验证码识别,识别结果取得了预期的效果,较好的识别出了验证码。

关键字:验证码;图像识别;Python;预处理Abstrat:CAPTCHA plays a key role in network security, The main purpose of the CAPTCHA is to differentiate between humans and computers, to prevent some malicious behavior from automating scripts on the site. At present, most websites use Authenticode to prevent the intrusion of malicious script programs. The verification code passes the preprocessing character segmentation of the image, the matching recognition and so on completes the processing to the character verification, the backward feature extraction and the matching operation completes to the verification code recognition. In this paper, a website is selected to identify the verification code, the result obtained the expected results, a better identification of the verification code.Key words:CAPTCHA; Image recognition; Python; Pretreatment;0.引⾔验证码是⽬前互联⽹上⼀种⾮常重要⾮常常见的安全识别技术,先引⽤⼀段来⾃wiki的关于验证码的描述:“全⾃动区分计算机和⼈类的公开图灵测试(Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA)[1],俗称验证码,是⼀种区分⽤户是计算机和⼈的公共⾃动程序。

基于 KNN 技术的验证码识别 李露

基于 KNN 技术的验证码识别 李露

基于 KNN 技术的验证码识别李露发表时间:2018-04-17T17:10:26.767Z 来源:《电力设备》2017年第32期作者:李露[导读] 摘要:随着科技日新月异的发展,验证码技术在网络防护和信息安全方面有着广泛的应用。

(西华大学)摘要:随着科技日新月异的发展,验证码技术在网络防护和信息安全方面有着广泛的应用。

由于网络攻击手段的提升,验证码技术也在改进。

本文采用的教务系统验证码是当前网络中最普遍的字符验证码类型,它多元化的背景噪音和字符扭曲粘连的特点,使得验证码很难实现程序自动识别。

针对这些特点,本文在背景去噪阶段,提出RGB 三原色去噪法;在单个字符切割阶段,采用轮廓差投影法与水滴算法相结合的分割方法。

最后得到所有字符模型,再利用 KNN 算法,进行字符识别,从而得到识别结果。

关键词:验证码;图像二值化;图像分割;KNN1研究背景与研究现状验证码作为当前一种网络安全技术,主要是用来防止对机器做暴力破解、批量在线注谋取利益、信息大规模采集聚合,以及一些恶意注册、访问和发送垃圾文件等恶意事件。

验证码图片有诸多特点,主要包括图片的格式和图片的内容。

1)格式方面,由于验证码图片的分辨率较低,且高度一般在 20 ~ 50 之间,而宽度一般在 100 左右。

这些特点使得字符间的距离较小,从而难以分割。

与此同时,分辨率小也表明待识别的字符信息量相对较小。

2)在内容方面,验证码中会出现诸多干扰。

比如背景噪音干扰;随机的独立像素点;字符上嵌入的平滑干扰线;字符本身的扭曲旋转和粘连;字体位置随机摆放等。

这些因素在很大程度上会影响自动识别算法的识别率。

本文的校内网验证码的特点是多元化的背景噪音、扭曲粘连的字符,是当前最具有代表性的字符型验证码。

2 识别算法模型验证码自动识别算法整体流程可分为 3 大步骤:图片预处理;字符切割;单字符分析。

分析过程中又包含建立模板库和字符匹配 2 个过程。

其中图像处理不是本文重点算法,本文主要介绍KNN算法,KNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。

python识别计算验证码流程

python识别计算验证码流程

python识别计算验证码流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 数据收集收集大量的验证码图像,包括各种类型和难度的验证码。

Python网络爬虫的验证码识别与破解方法

Python网络爬虫的验证码识别与破解方法

Python网络爬虫的验证码识别与破解方法网络爬虫是一种用于自动获取网页信息的程序,它可以在互联网上自动化地浏览网页、抓取数据等。

然而,在进行网络爬取时,我们经常会遇到验证码的问题,这给爬虫程序带来了困扰。

本文将介绍基于Python的网络爬虫的验证码识别与破解方法。

一、验证码的作用与种类验证码(CAPTCHA)是为了区分人类用户和计算机程序的一种技术手段。

它目的在于阻止自动化程序(如爬虫)对网站进行恶意攻击,保障网站的安全性。

常见的验证码类型包括数字验证码、字母验证码、混合验证码、中文验证码等。

二、验证码识别的原理验证码识别是指通过计算机程序自动识别并破解验证码的过程。

常用的验证码识别方法包括图像处理与模式识别两部分内容。

图像处理主要用于降噪、二值化、分割等预处理操作,以便提取验证码中的有效信息。

模式识别则使用机器学习算法,通过训练模型来对验证码进行分类和识别。

三、验证码识别的Python库Python提供了许多强大的图像处理和机器学习库,为验证码识别提供了便捷的解决方案。

以下是常用的Python库:1. PIL(Python Imaging Library):用于图像预处理、特征提取等操作。

2. OpenCV(Open Source Computer Vision):提供了丰富的图像处理函数和工具。

3. Scikit-learn:用于机器学习任务,提供了常见的分类算法和模型评估方法。

4. TensorFlow:深度学习框架,可以应用于验证码的识别和破解。

5. Keras:基于TensorFlow的高级神经网络库,可以快速搭建验证码识别模型。

四、验证码识别与破解方法基于以上提到的Python库,我们可以采用以下方法来识别和破解验证码:1. 图像预处理:使用PIL和OpenCV库进行验证码图像的读取、降噪、二值化、分割等预处理操作。

2. 特征提取与选择:通过特征工程技术,提取验证码图像中的有效特征,如轮廓、颜色、形状等。

python 验证码识别 训练

python 验证码识别 训练

验证码识别:基于深度学习的卷积神经网络模型训练示例验证码识别是一个比较复杂的任务,需要使用机器学习或深度学习模型进行训练。

以下是一个简单的Python 验证码识别训练的示例代码,使用的是基于深度学习的卷积神经网络模型。

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.model_selection import train_test_splitfrom keras.models import Sequentialfrom yers import Conv2D, MaxPooling2D, Flatten, Densefrom keras.utils import to_categorical# 加载验证码图片和标签数据集data = np.loadtxt("captcha_dataset.txt", delimiter=",")x_train, x_test, y_train, y_test = train_test_split(data[:, :-1], data[:, -1], test_size=0.2)# 将验证码图片转换为 32x32 大小的灰度图像x_train = x_train.reshape((x_train.shape[0], 32, 32, 1))x_test = x_test.reshape((x_test.shape[0], 32, 32, 1))# 将标签数据进行 one-hot 编码y_train = to_categorical(y_train)y_test = to_categorical(y_test)# 构建卷积神经网络模型model = Sequential()model.add(Conv2D(32, (3, 3), activation="relu", input_shape=(32, 32, 1)))model.add(MaxPooling2D((2, 2)))model.add(Conv2D(64, (3, 3), activation="relu"))model.add(MaxPooling2D((2, 2)))model.add(Flatten())model.add(Dense(128, activation="relu"))model.add(Dense(64, activation="relu"))model.add(Dense(10, activation="softmax"))# 编译模型,设置优化器和损失函数pile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])# 训练模型,设置批次大小、训练轮数和验证频率model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_test, y_test), verbose=1)# 评估模型性能,输出准确率score = model.evaluate(x_test, y_test, verbose=0)print("Test accuracy: %.2f%%" % (score[1]*100))在这个示例中,我们首先使用numpy库加载验证码图片和标签数据集,然后将验证码图片转换为 32x32 大小的灰度图像,并将标签数据进行 one-hot 编码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Python用KNN算法实现验证码识别
作为一名爬虫爱好者,把互联网作为数据库的同时总会遇到很多坑,其中一个就是验证码,设置验证码一大理由就是为了限制你乱爬,不过对于很多简单的验证码,破解还是相当容易的。

比如类似下面这种。

最简单的办法是直接用pytesseract库,具体方法请自行搜索。

当然如果不想用它,自己来写一个识别算法也并不难。

可以用机器学习里面比较基础的KNN算法。

先来介绍一下这个KNN算法,他全称叫K最近邻(kNN,
k-NearestNeighbor),所谓K最近邻,就是离谁最近,是谁的可能性就更大。

什么意思,举个例子就明白了。

我现在已经统计了一组手机数据,方便起见,假设只有高端机和低端机两个分类,如下:此时如果有一个新手机T(1500元,15小时),该怎么判断是什么手机呢?我把它们放到同一个坐标系中去比较一下。

它并不能很好地跟已知数据完全重合,但不要紧,可以算一下它与其他手机的距离。

经过计算,与T的距离D就是这么简单。

当然了,这里面只是举个例子所以数据量比较小,当数据量足够大时,比如有200台低端机和300台高端机,选出最接近的200个数据,其中哪种机器多就归到哪种,得出的结论就会比较准确。

这就是最简单的KNN算法,离哪个近,就把它归类为哪个种类。


是二维,还可以再加个“像素”属性,变为三维,仍然可以求最近距离。

拓展到N个属性也是一样的道理。

基本原理就是这样,下面来介绍如何识别验证码,以下代码基于Python3 还是这张验证码,我们把它放大一点可以看到,其实他就是一个一个的像素点构成的。

里面颜色太多不好操作,首先把这张图变成黑白的from PIL import Image#引入Image类
im = Image.open('图片路径')#打开图片
im=im.convert('1')#原来图片是彩色的,这里把图片转换成模式'1',即黑白的
im.show()#显示图片
于是我们就得到了这么一张图
可以把每个点的颜色转变成0和1,并打印出来for i in range(im.size[1]):
temp=[]
for j in range(im.size[0]):
pos=(j,i)
col=im.getpixel(pos)
#获取某坐标的点的颜色,黑色为0,白色为255,为了显示规程,把它转变成1了
if col==255:
col=1
temp.append(col)
print(temp)
可以从打印出来的字符中隐约看到这几个数字
然后处理一下这串字符,把不连续的点,即上下左右都没有同色的点去掉
im2 = im
for i in range(im.size[1]):
for j in range(im.size[0]):
#pos=(j,i)
#print(pos)
if i==0 or j==0 or i==im.size[1]-1 or
j==im.size[0]-1:
im2.putpixel((j,i),255)#图片最外面一周都换成白点
elif im.getpixel((j,i))!=im.getpixel((j-1,i)) and im.getpixel((j,i))!=im.getpixel((j+1,i)) and
im.getpixel((j,i-1))!=im.getpixel((j,i)) and
im.getpixel((j,i+1))!=im.getpixel((j,i)):
im2.putpixel((j,i),255)#不连续点也都换成白点
然后开始切割图片
inletter = False
foundletter = False
start = 0
end = 0
letters = []#用来记录每个数字的起始位置
for x in range(im2.size[0]):
for y in range(im2.size[1]):
pix = im2.getpixel((x, y))
if pix != 255:
inletter = True#如果不是白色,这说明已经开始接触到数字了
if foundletter == False and inletter == True:
foundletter = True
start = x#数字的起始坐标
if foundletter == True and inletter == False:
foundletter = False
end = x-1#数字的结束位置
letters.append((start, end))
inletter = False
letters的值为[(7,
14), (20, 27), (33, 40), (46, 54)],就是每个数字的起始X坐标,同样道理获得每个数字的起始Y坐标,然后切割开来。

region = (起始X值,起始Y值,结束X值,结束Y值) #裁切图片
im3 = im2.crop(region)#im3就是这个区域内的图形,也就是提取的数字
#im3.show()
于是得出了四个切割好的数字
这个时候怎么做呢,我们把第一个数字9用0和1来打印看看。

[1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1,
1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1,
1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0, 1]总大小7*14,总共98个点到这里差不多就出来了,把每个点看成一个属性,问题就转化成了:已知一个数有98个属性,也知道他的种类是9,同样,还有很多很多这样的数,知道属性+种类。

然后要做的,就是拿N 个样本作为标准集合,有新的数要识别的时候,选出最接近
的K个,这K个里面,数量最多的就是这个数的值。

相关文档
最新文档