knn

在OpenCV里使用机器学习库sklearn 实现手写数字识别1

旧城冷巷雨未停 提交于 2020-03-03 18:05:26
前面学习过KNN的方式来实现手写数字识别,不过效果一般,那么有没有别的方法来试一试,或许可以改进一点呢。在本文里将要介绍使用SVM和HOG的方式来实现手写数字识别,比如最终结果如下图: 在这个例子里与前面《在OpenCV里用kNN实现手写数字识别》大体流程是一样的,主要区别在于这里采用skimage、sklearn库的功能,使用LinearSVC来进行训练和识别分类。因此在学习本文之前,先要安装这两个库,可以参考下面的安装说明: https://blog.csdn.net/qq_38196982/article/details/93098396 https://blog.csdn.net/XiaoYi_Eric/article/details/79952325 如果安装好这两个库之后,就可以继续来学习本文。首先,我们要导入这两个库,使用下面的代码: 来源: CSDN 作者: caimouse 链接: https://blog.csdn.net/caimouse/article/details/104634602

KNN算法中的超参数--scikit-learn,python

若如初见. 提交于 2020-03-01 09:55:30
1.超参数:在机器学习中,超参数是指在机器学习之前,提前设置好的参数。而不是由数据训练出来的。 2.KNN算法通过测量观测点与相邻最近点之间的距离,判断观测点所属的类别,而测量距离的方法有很多种。有曼哈顿距离(又称“L1范数”),欧拉距离(又称“L2范数”)以及明科夫斯基距离等。 3.从上述的距离公式中,我们可以得到他们公式的共同点,有一个参数p,曼哈顿距离公式的参数p=1,欧拉距离公式的参数p=2。而在scikit-learn提供的KNN算法中提供了参数p。 4.scikit-learn在KNN算法中还提供了另一个权重的参数(weights),它有两个取值,一个是“uniform”,每个相邻点与观测点的距离的权重都是相同的。另一个取值为“distance”,权重点按其距离的倒数表示。在这种情况下,查询点的近邻比远处的近邻具有更大的影响力。 5.KNN算法中另一个重要的参数就是k,就是看观测点与近邻k个点的距离。 import numpy as np from sklearn import datasets digits = datasets . load_digits ( ) X = digits . data y = digits . target from sklearn . model_selection import train_test_split X_train ,

多分类器:KNN,SVM,Softmax,2-Layer-Affine-Net(以图像分类为例子)

时光怂恿深爱的人放手 提交于 2020-03-01 09:21:59
多分类器:KNN,SVM,Softmax,2-Layer-Affine-Net(以图像分类为例子) 记录一下 CS 231N 计算机视觉这门课所提到的一些基础分类器,结合机器学习中学到的二元分类器算法,并以 CIFAR 10 作为训练集测试多分类器性能。 KNN K近邻分类 主要思路:寻找训练集到测试集中最相似的 k k k 个图像(距离由矩阵二范数、或是 F r o b i n u s Frobinus F r o b i n u s 范数表示),并由 k k k 个最优结果投票决定其标签。 算法流程: 训练集导入 X X X 与标签 y y y 测试集输入 x ^ \hat x x ^ ,找到 X X X 中与 x ^ \hat x x ^ 距离最近的 k k k 个图像: χ = { X ~ 1 , ⋯   , X ~ k } \chi = \{\tilde X_1,\cdots, \tilde X_k\} χ = { X ~ 1 ​ , ⋯ , X ~ k ​ } (一般用二范数距离) 对标签进行计数: η = { ( X ~ 1 , y ~ ( 1 ) ) , ⋯   , ( X ~ k , y ~ ( p ) ) } \eta = \{(\tilde X_1, \tilde y^{(1)}),\cdots, (\tilde X_k, \tilde y^{(p)})\}

鸢尾花数据集KNN分类模型

假装没事ソ 提交于 2020-03-01 06:01:56
1. 数据读入 from sklearn import datasets iris_dataset = datasets . load_iris ( ) print ( "Keys of iris_dataset:\n{}" . format ( iris_dataset . keys ( ) ) ) 2. 数据分析 from sklearn . model_selection import train_test_split X_train , X_test , y_train , y_test = train_test_split ( iris_dataset [ 'data' ] , iris_dataset [ 'target' ] , random_state = 0 ) iris_dataframe = pd . DataFrame ( X_train , columns = iris_dataset . feature_names ) grr = pd . plotting . scatter_matrix ( iris_dataframe , c = y_train , figsize = ( 15 , 15 ) , marker = 'o' , hist_kwds = { 'bins' : 20 } , s = 60 , alpha = .8 ) 3.

KNN算法--python实现

江枫思渺然 提交于 2020-02-28 05:37:40
1.KNN算法作为分类的算法,也被成为k近邻算法。 2.KNN算法的核心思想是新增一个样本在特征空间中,k个最近的样本大多数是 一类的,那么这个样本也属于这一类。 这里我们利用欧拉公式计算样本间的距离。 import math import numpy as np from sklearn import datasets import matplotlib . pyplot as plt raw_data_X = [ [ 3.393533211 , 2.331273381 ] , [ 3.110073483 , 1.781539638 ] , [ 1.343808831 , 3.368360954 ] , [ 3.582294042 , 4.679179110 ] , [ 2.280362439 , 2.866990263 ] , [ 7.423436942 , 4.696522875 ] , [ 5.745051997 , 3.533989803 ] , [ 9.172168622 , 2.511101045 ] , [ 7.792783481 , 3.424088941 ] , [ 7.939820817 , 0.791637231 ] ] raw_data_y = [ 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 ] X_train = np .

《机器学习实战》kNN学习笔记(二)

笑着哭i 提交于 2020-02-22 06:35:27
在约会网站上使用k-近邻算法 首先,把约会数据存放在文本文件datingTestSet中,样本主要包括以下三个特征 每年获得的飞行常客里程数 玩视频游戏所耗时间百分比 每周消耗的冰激凌公升数 在kNN.py中创建名为file2matrix的函数,以此来处理输入格式问题。该函数的输入为文件名字符串,输出为训练样本矩阵和类标签向量 def file2matrix(filename): # 打开文件 fr = open(filename) # 读取文件所有内容 arrayOlines = fr.readlines() # 得到文件行数 numberOfLines = len(arrayOlines) # 返回的NumPy矩阵numberOfLines行,3列 returnMat = np.zeros((numberOfLines, 3)) # 创建分类标签向量 classLabelVector = [] # 行的索引值 index = 0 # 读取每一行 for line in arrayOlines: # 去掉每一行首尾的空白符,例如'\n','\r','\t',' ' line = line.strip() # 将每一行内容根据'\t'符进行切片,本例中一共有4列 listFromLine = line.split('\t') # 将数据的前3列进行提取保存在returnMat矩阵中

knn手写识别

人走茶凉 提交于 2020-02-06 04:22:34
# coding=utf-8 import matplotlib matplotlib.use('Qt4Agg') # 手写数字分类 from sklearn.model_selection import train_test_split from sklearn import preprocessing from sklearn.metrics import accuracy_score from sklearn.datasets import load_digits from sklearn.neighbors import KNeighborsClassifier from sklearn.svm import SVC from sklearn.naive_bayes import MultinomialNB from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt # 加载数据 digits = load_digits() data = digits.data # 数据探索 print(data.shape) # 查看第一幅图像 print(digits.images[0]) # 第一幅图像代表的数字含义 print(digits.target[0]) #

KNN分类器

我怕爱的太早我们不能终老 提交于 2020-02-04 07:36:56
KNN学习(K-Nearest Neighbor algorithm,K最邻近方法 )是一种统计分类器,对数据的特征变量的筛选尤其有效。 基本原理 KNN的基本思想是:输入没有标签(标注数据的类别),即没有经过分类的新数据,首先提取新数据的特征并与測试集中的每一个数据特征进行比較;然后从測试集中提取K个最邻近(最类似)的数据特征标签,统计这K个最邻近数据中出现次数最多的分类,将其作为新的数据类别。 KNN的这样的基本思想有点类似于生活中的“物以类聚。人以群分”。 在KNN学习中,首先计算待分类数据特征与训练数据特征之间的距离并排序。取出距离近期的K个训练数据特征。然后根据这K个相近训练数据特征所属类别来判定新样本类别:假设它们都属于一类,那么新的样本也属于这个类;否则,对每一个候选类别进行评分,依照某种规则确定新的样本的类别。 笔者借用以下这个图来做更形象的解释: 如上图,图中最小的那个圆圈代表新的待分类数据。三角形和矩形分别代表已知的类型,如今须要推断圆圈属于菱形那一类还是矩形那一类。 可是我该以什么样的根据来推断呢? 看离圆形近期(K=1)的那个类型是什么,由图可知,离圆形近期的是三角形,故将新数据判定为属于三角形这个类别。 看离圆形近期的3个数据(K=3)的类型是什么,由图可知离圆形近期的三个中间有两个是矩形,一个是三角形,故将新数据判定为属于矩形这个类别。

手写数字识别 KNN

℡╲_俬逩灬. 提交于 2020-02-04 02:54:54
from numpy import * import csv import operator from sklearn . neighbors import KNeighborsClassifier def toInt ( array ) : array = mat ( array ) m , n = shape ( array ) Array = zeros ( ( m , n ) ) for i in range ( m ) : for j in range ( n ) : try : Array [ i , j ] = int ( array [ i , j ] ) except ValueError : continue return Array def nomalizing ( array ) : m , n = shape ( array ) for i in range ( m ) : for j in range ( n ) : if array [ i , j ] != 0 : array [ i , j ] = 1 return array def loadTrainData ( ) : l = [ ] with open ( "train.csv" ) as file : lines = csv . reader ( file ) for line in

KNN算法实现数字识别

落花浮王杯 提交于 2020-02-03 11:59:12
KNN算法介绍 KNN算法(K-NearestNeighor Algorithm) 是一种最简单的分类算法。 算法核心: 假设在一个二维坐标平面中已经有了 \(n\) 个点,每个点的颜色已知,现在给定查询点 \(p\) 的坐标 \((x,y)\) ,判断 \(p\) 的颜色。 对于已知的 \(n\) 个点,计算每个点和点 \(p\) 的欧几里得距离: \[dis_i=\sqrt{(x_i-x)^2+(y_i-y)^2}\] 按照 \(dis\) 从小到大排序,选择距离最近的前 \(k\) 个点,在这前k个点中统计颜色出现次数最多的点,则点 \(p\) 的颜色就被划分为该点的颜色。 数字识别的实现 已有的数据集(TraingData): 若干份txt文件,每份txt文件都是32*32的01矩阵,代表对应的数字,下图中的矩阵就是数字0: 若干份txt文件,是测试数据集,用于校验算法的正确率。 算法流程: 将32x32的矩阵转换成1x1024的向量 计算输入的数据向量和所有的训练集向量的欧几里得距离。 按照欧几里得距离排序,选前K近的,选择出现次数最多的作为数字。 计算正确率 代码: import numpy as np import os import operator #返回inputdata所属的种类 def KNN(inputdata,TrainingSet,lable,k):