- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python机器学习之KNN分类算法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文为大家分享了python机器学习之knn分类算法,供大家参考,具体内容如下 。
1、knn分类算法 。
knn分类算法(k-nearest-neighbors classification),又叫k近邻算法,是一个概念极其简单,而分类效果又很优秀的分类算法.
他的核心思想就是,要确定测试样本属于哪一类,就寻找所有训练样本中与该测试样本“距离”最近的前k个样本,然后看这k个样本大部分属于哪一类,那么就认为这个测试样本也属于哪一类。简单的说就是让最相似的k个样本来投票决定.
这里所说的距离,一般最常用的就是多维空间的欧式距离。这里的维度指特征维度,即样本有几个特征就属于几维.
knn示意图如下所示。(图片来源:百度百科) 。
上图中要确定测试样本绿色属于蓝色还是红色.
显然,当k=3时,将以1:2的投票结果分类于红色;而k=5时,将以3:2的投票结果分类于蓝色.
knn算法简单有效,但没有优化的暴力法效率容易达到瓶颈。如样本个数为n,特征维度为d的时候,该算法时间复杂度呈o(dn)增长.
所以通常knn的实现会把训练数据构建成k-d tree(k-dimensional tree),构建过程很快,甚至不用计算d维欧氏距离,而搜索速度高达o(d*log(n)).
不过当d维度过高,会产生所谓的”维度灾难“,最终效率会降低到与暴力法一样.
因此通常d>20以后,最好使用更高效率的ball-tree,其时间复杂度为o(d*log(n)).
人们经过长期的实践发现knn算法虽然简单,但能处理大规模的数据分类,尤其适用于样本分类边界不规则的情况。最重要的是该算法是很多高级机器学习算法的基础.
当然,knn算法也存在一切问题。比如如果训练数据大部分都属于某一类,投票算法就有很大问题了。这时候就需要考虑设计每个投票者票的权重了.
2、测试数据 。
测试数据的格式仍然和前面使用的身高体重数据一致。不过数据增加了一些:
1.5 40 thin 1.5 50 fat 1.5 60 fat 1.6 40 thin 1.6 50 thin 1.6 60 fat 1.6 70 fat 1.7 50 thin 1.7 60 thin 1.7 70 fat 1.7 80 fat 1.8 60 thin 1.8 70 thin 1.8 80 fat 1.8 90 fat 1.9 80 thin 1.9 90 fat 。
3、python代码 。
scikit-learn提供了优秀的knn算法支持。使用python代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# -*- coding: utf-8 -*-
import
numpy as np
from
sklearn
import
neighbors
from
sklearn.metrics
import
precision_recall_curve
from
sklearn.metrics
import
classification_report
from
sklearn.cross_validation
import
train_test_split
import
matplotlib.pyplot as plt
''' 数据读入 '''
data
=
[]
labels
=
[]
with
open
(
"data\\1.txt"
) as ifile:
for
line
in
ifile:
tokens
=
line.strip().split(
' '
)
data.append([
float
(tk)
for
tk
in
tokens[:
-
1
]])
labels.append(tokens[
-
1
])
x
=
np.array(data)
labels
=
np.array(labels)
y
=
np.zeros(labels.shape)
''' 标签转换为0/1 '''
y[labels
=
=
'fat'
]
=
1
''' 拆分训练数据与测试数据 '''
x_train, x_test, y_train, y_test
=
train_test_split(x, y, test_size
=
0.2
)
''' 创建网格以方便绘制 '''
h
=
.
01
x_min, x_max
=
x[:,
0
].
min
()
-
0.1
, x[:,
0
].
max
()
+
0.1
y_min, y_max
=
x[:,
1
].
min
()
-
1
, x[:,
1
].
max
()
+
1
xx, yy
=
np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
''' 训练knn分类器 '''
clf
=
neighbors.kneighborsclassifier(algorithm
=
'kd_tree'
)
clf.fit(x_train, y_train)
'''测试结果的打印'''
answer
=
clf.predict(x)
print
(x)
print
(answer)
print
(y)
print
(np.mean( answer
=
=
y))
'''准确率与召回率'''
precision, recall, thresholds
=
precision_recall_curve(y_train, clf.predict(x_train))
answer
=
clf.predict_proba(x)[:,
1
]
print
(classification_report(y, answer, target_names
=
[
'thin'
,
'fat'
]))
''' 将整个测试空间的分类结果用不同颜色区分开'''
answer
=
clf.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:,
1
]
z
=
answer.reshape(xx.shape)
plt.contourf(xx, yy, z, cmap
=
plt.cm.paired, alpha
=
0.8
)
''' 绘制训练样本 '''
plt.scatter(x_train[:,
0
], x_train[:,
1
], c
=
y_train, cmap
=
plt.cm.paired)
plt.xlabel(u
'身高'
)
plt.ylabel(u
'体重'
)
plt.show()
|
4、结果分析 。
其输出结果如下:
[ 0. 0. 1. 0. 0. 1. 1. 0. 0. 1. 1. 0. 0. 1. 1. 0. 1.] [ 0. 1. 1. 0. 0. 1. 1. 0. 0. 1. 1. 0. 0. 1. 1. 0. 1.] 准确率=0.94, score=0.94 precision recall f1-score support thin 0.89 1.00 0.94 8 fat 1.00 0.89 0.94 9 avg / total 0.95 0.94 0.94 17 。
knn分类器在众多分类算法中属于最简单的之一,需要注意的地方不多。有这几点要说明:
1、kneighborsclassifier可以设置3种算法:‘brute',‘kd_tree',‘ball_tree'。如果不知道用哪个好,设置‘auto'让kneighborsclassifier自己根据输入去决定.
2、注意统计准确率时,分类器的score返回的是计算正确的比例,而不是r2。r2一般应用于回归问题.
3、本例先根据样本中身高体重的最大最小值,生成了一个密集网格(步长h=0.01),然后将网格中的每一个点都当成测试样本去测试,最后使用contourf函数,使用不同的颜色标注出了胖、廋两类.
容易看到,本例的分类边界,属于相对复杂,但却又与距离呈现明显规则的锯齿形.
这种边界线性函数是难以处理的。而knn算法处理此类边界问题具有天生的优势。我们在后续的系列中会看到,这个数据集达到准确率=0.94算是很优秀的结果了.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://www.cnblogs.com/qianyin123/p/9553795.html 。
最后此篇关于python机器学习之KNN分类算法的文章就讲到这里了,如果你想了解更多关于python机器学习之KNN分类算法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
PyCaret是一个开源、低代码Python机器学习库,能够自动化机器学习工作流程。它是一个端到端的机器学习和模型管理工具,极大地加快了实验周期,提高了工作效率。PyCaret本质上是围绕几个机器学习
在我的研究进展中,我现在已经将寄生虫从图像中分离出来。寄生虫看起来像蠕虫。我希望 MATLAB 读取所有输入图像,查找类似深紫色图像的蠕虫,如果检测到,则给出检测到的答复。我尝试使用直方图比较,但我认
目前我正在尝试了解机器学习算法的工作方式,但我没有真正了解的一件事是预测标签的计算准确度与视觉混淆矩阵之间的明显差异。我会尽量解释清楚。 这是数据集的片段(这里你可以看到 9 个样本(在真实数据集中大
第一章 绪论 机器学习 : 致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。在计算机系统中, “经验” 通常以“数据“形式存在,因此,机器学习所研究的主要内容,是关于在计算
1. 算法原理(K-Nearest Neighbor) 本质是通过距离判断两个样本是否相似,如果距离够近就认为他们足够相似属于同一类别 找到离其最近的 k 个样本,并将这些样本称
前言 K-means是一种经典的无监督学习算法,用于对数据进行聚类。K-means算法将数据集视为具有n个特征的n维空间,并尝试通过最小化簇内平方误差的总和来将数据点划分为簇。本文将介绍K-m
目录 前言 介绍LightGBM LightGBM的背景和起源 L
前言 可以说掌握了机器学习,你就具备了与机器对话,充分利用机器为人类服务的能力。在人工智能时代,这将成为一项必备技能,就好比十年前你是编程大牛,二十年前你英语超好一样。因此,无论你是什么专业的
几个贯穿始终的概念 当我们把人类学习简单事物的过程抽象为几个阶段,再将这些阶段通过不同的方法具体化为代码,依靠通过计算机的基础能力-- 计算 。我们就可以让机器能够“学会”一些简单的事物。
1、选题背景 人脸识别技术是模式识别和计算机视觉领域最富挑战性的研究课题之一,也是近年来的研究热点,人脸性别识别作为人脸识别技术
每当我们在公有云或者私有云发布训练好的大数据模型,为了方便大家辨识、理解和运用,参照huggingface所制定的标准制作一个Model Card展示页,是种非常好的模型展示和组织形式。 下面就是一
2. 支持向量机 对偶优化 拉格朗日乘数法可用于解决带条件优化问题,其基本形式为: \[\begin{gather} \min_w f(w),\\ \mathrm{s.t.} \quad
我正在尝试运行以下代码: https://github.com/opencv/opencv/blob/master/samples/dnn/classification.cpp 我在这里找到所有经过预
我是机器学习新手。当我使用 scikit-learn 模块中的波士顿数据集练习具有默认参数的决策树回归模型时。 在此链接解决方案( How to Build a Decision tree Regre
我有用于训练的数据。当我将其输入神经网络时,该数据出现 3% 的错误。 我知道这些数据有一定的过度代表性 - 例如,第 5 类的示例大约是其他类的十分之一。 我的作业指出,我可以通过偏置训练数据(即删
我在 Python 的多类分类中使用 SVM 时遇到问题。事实上,问题在于性别分类(来自图像),其中训练数据集仅包含“y=1”或“ y=-1”作为类标签(二进制)。但是,在预测中,如果是男性,我必须预
以防万一你们不知道,对抗性图像是属于某个类别的图像,但随后被扭曲,而人眼没有任何视觉感知差异,但网络错误地将其识别为完全不同的类别。 有关此内容的更多信息,请参见此处: http://karpathy
我正在进行一个 ML 语言识别项目 (Python),该项目需要具有高维特征输入的多类分类模型。 目前,我所能做的就是通过反复试验来提高准确性。无意识地结合可用的特征提取算法和可用的机器学习模型,看看
import numpy as np def sigmoid(x): return 1.0/(1+np.asmatrix(np.exp(-x))) def graD(X,y,alpha,s0,
所以我有多个列表: ['disney','england','france'] ['disney','japan'] ['england', 'london'] ['disney', 'france'
我是一名优秀的程序员,十分优秀!