分类算法之k-近邻

k-近邻算法采用测量不同特征值之间的距离来进行分类

优点:精度高、对异常值不敏感、无数据输入假定

缺点:计算复杂度高、空间复杂度高

使用数据范围:数值型和标称型

一个例子弄懂k-近邻

电影可以按照题材分类,每个题材又是如何定义的呢?那么假如两种类型的电影,动作片和爱情片。动作片有哪些公共的特征?那么爱情片又存在哪些明显的差别呢?我们发现动作片中打斗镜头的次数较多,而爱情片中接吻镜头相对更多。当然动作片中也有一些接吻镜头,爱情片中也会有一些打斗镜头。所以不能单纯通过是否存在打斗镜头或者接吻镜头来判断影片的类别。那么现在我们有6部影片已经明确了类别,也有打斗镜头和接吻镜头的次数,还有一部电影类型未知。

电影名称 打斗镜头 接吻镜头 电影类型
California Man 3 104 爱情片
He's not Really into dues 2 100 爱情片
Beautiful Woman 1 81 爱情片
Kevin Longblade 101 10 动作片
Robo Slayer 3000 99 5 动作片
Amped II 98 2 动作片
? 18 90 未知

那么我们使用K-近邻算法来分类爱情片和动作片:存在一个样本数据集合,也叫训练样本集,样本个数M个,知道每一个数据特征与类别对应关系,然后存在未知类型数据集合1个,那么我们要选择一个测试样本数据中与训练样本中M个的距离,排序过后选出最近的K个,这个取值一般不大于20个。选择K个最相近数据中次数最多的分类。那么我们根据这个原则去判断未知电影的分类

电影名称 与未知电影的距离
California Man 20.5
He's not Really into dues 18.7
Beautiful Woman 19.2
Kevin Longblade 115.3
Robo Slayer 3000 117.4
Amped II 118.9

我们假设K为3,那么排名前三个电影的类型都是爱情片,所以我们判定这个未知电影也是一个爱情片。那么计算距离是怎样计算的呢?

欧氏距离 那么对于两个向量点a1和a2之间的距离,可以通过该公式表示:

如果说输入变量有四个特征,例如(1,3,5,2)和(7,6,9,4)之间的距离计算为:

sklearn.neighbors

sklearn.neighbors提供监督的基于邻居的学习方法的功能,sklearn.neighbors.KNeighborsClassifier是一个最近邻居分类器。那么KNeighborsClassifier是一个类,我们看一下实例化时候的参数

class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=1, **kwargs)**
"""
:param n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数 :param algorithm:{'auto','ball_tree','kd_tree','brute'},可选用于计算最近邻居的算法:'ball_tree'将会使用 BallTree,'kd_tree'将使用 KDTree,“野兽”将使用强力搜索。'auto'将尝试根据传递给fit方法的值来决定最合适的算法。 :param n_jobs:int,可选(默认= 1),用于邻居搜索的并行作业数。如果-1,则将作业数设置为CPU内核数。不影响fit方法。 """
import numpy as np
from sklearn.neighbors import KNeighborsClassifier neigh = KNeighborsClassifier(n_neighbors=3)

Method

fit(X, y)

使用X作为训练数据拟合模型,y作为X的类别值。X,y为数组或者矩阵

X = np.array([[1,1],[1,1.1],[0,0],[0,0.1]])
y = np.array([1,1,0,0])
neigh.fit(X,y)

kneighbors(X=None, n_neighbors=None, return_distance=True)

找到指定点集X的n_neighbors个邻居,return_distance为False的话,不返回距离

neigh.kneighbors(np.array([[1.1,1.1]]),return_distance= False)

neigh.kneighbors(np.array([[1.1,1.1]]),return_distance= False,an_neighbors=2)

predict(X)

预测提供的数据的类标签

neigh.predict(np.array([[0.1,0.1],[1.1,1.1]]))

predict_proba(X)

返回测试数据X属于某一类别的概率估计

neigh.predict_proba(np.array([[1.1,1.1]]))

K-邻近算法鸢尾花数据集案例

In [ ]:

from sklearn.datasets import load_iris  # 导入鸢尾花数据集
from sklearn.preprocessing import StandardScaler # 导入特征工程标准化
from sklearn.neighbors import KNeighborsClassifier # 导入K邻近模型
from sklearn.model_selection import train_test_split# 导入划分训练集测试集方法
import pandas as pd

In [ ]:

iris = load_iris()  # 实例化鸢尾花数据集
df = pd.concat([pd.DataFrame(iris.data), pd.DataFrame(iris.target)],axis=1)
df

Out[ ]:

0 1 2 3 0
0 5.1 3.5 1.4 0.2 0
1 4.9 3.0 1.4 0.2 0
2 4.7 3.2 1.3 0.2 0
3 4.6 3.1 1.5 0.2 0
4 5.0 3.6 1.4 0.2 0
... ... ... ... ... ...
145 6.7 3.0 5.2 2.3 2
146 6.3 2.5 5.0 1.9 2
147 6.5 3.0 5.2 2.0 2
148 6.2 3.4 5.4 2.3 2
149 5.9 3.0 5.1 1.8 2

150 rows × 5 columns

In [ ]:

# 划分测试集和训练集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.25)

In [ ]:

# 数据标准化
# 实例化标准化类,传入训练集数据计方差标准
std = StandardScaler().fit(x_train)
#实例化训练集特征值
x_train = std.transform(x_train)
#实例化测试集特征值
x_test = std.transform(x_test)

In [ ]:

# K邻近预测,K值为10
knn = KNeighborsClassifier(n_neighbors=10)
# 拟合k-nearest neighbors分类器
knn.fit(x_train,y_train)
# 查看预测样本的目标值
y_predict = knn.predict(x_test)
y_predict

Out[ ]:

array([0, 1, 0, 0, 1, 0, 2, 1, 2, 0, 1, 1, 0, 0, 0, 2, 0, 2, 1, 0, 2, 2,
0, 2, 2, 2, 1, 2, 1, 0, 1, 0, 0, 0, 1, 2, 1, 1])

In [ ]:

#查看预测准确度
score = knn.score(x_test,y_test)
score

Out[ ]:

0.9473684210526315

机器学习基础05DAY的更多相关文章

  1. Coursera 机器学习课程 机器学习基础:案例研究 证书

    完成了课程1  机器学习基础:案例研究 贴个证书,继续努力完成后续的课程:

  2. Coursera台大机器学习基础课程1

    Coursera台大机器学习基础课程学习笔记 -- 1 最近在跟台大的这个课程,觉得不错,想把学习笔记发出来跟大家分享下,有错误希望大家指正. 一 机器学习是什么? 感觉和 Tom M. Mitche ...

  3. 机器学习 —— 基础整理(六)线性判别函数:感知器、松弛算法、Ho-Kashyap算法

    这篇总结继续复习分类问题.本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 闲话:本篇是本系列[机器学习基础整理]在time ...

  4. 算法工程师<机器学习基础>

    <机器学习基础> 逻辑回归,SVM,决策树 1.逻辑回归和SVM的区别是什么?各适用于解决什么问题? https://www.zhihu.com/question/24904422 2.L ...

  5. 数据分析之Matplotlib和机器学习基础

    一.Matplotlib基础知识 Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形. 通过 Matplotlib,开发者可以仅需 ...

  6. 【dlbook】机器学习基础

    [机器学习基础] 模型的 vc dimension 如何衡量? 如何根据网络结构衡量模型容量?有效容量和模型容量之间的关系? 统计学习理论中边界不用于深度学习之中,原因? 1.边界通常比较松, 2.深 ...

  7. Python机器学习基础教程-第2章-监督学习之决策树集成

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  8. Python机器学习基础教程-第2章-监督学习之决策树

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  9. Python机器学习基础教程-第2章-监督学习之线性模型

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  10. Python机器学习基础教程-第2章-监督学习之K近邻

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

随机推荐

  1. Notepad++中文设置

    找到问题所在了,作者改了个小代码,在安装目录下打开localization找到chineseSimplified,打开后,在852行那里找到下面这段代码 <MarginsBorderEdge t ...

  2. Treewidget节点的删除

    父节点的删除 // 第一种 // 树状列表父节点的删除 // 有点莽 不支持这种操作 delete ui->treeWidget->topLevelItem(0); //  第二种 QTr ...

  3. python 函数默认值误区

    当创建python函数时,默认值参数实在执行def语句的时候创建的也即是在创建该函数的时候,而不是在调用该函数的时候创建的. def append(x, lst = []): lst.append(x ...

  4. seleniumUI自动化学习记录

    2019.2.9 尝试了一个启动浏览器并打开指定网址的程序: 这里首先要注意的就是浏览器的版本和selenium jar包的版本必须符合才行,不然会报错 2019.9.16 必须要下载相应的chrom ...

  5. dotnet Core 在linux 下设置成Service

    1.新建.service文件 cd /etc/systemd/system //进入改目录 touch Core.service // 新建Core服务文件 vi Core.service // 编辑 ...

  6. PageHeplper使用

    1.引入POM 1 <dependency> 2 <groupId>com.github.pagehelper</groupId> 3 <artifactId ...

  7. 2html5

    多媒体标签 <audio> <audio src='../audio/bxb.mp3' controls="controls" autoplay="au ...

  8. c# iis网站发布

    c# iis网站发布 问题一: 有很多人在用服务器发布网站的时候,一直出现 "HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容",那么 ...

  9. Ubuntu与centos之间的文件传输

          Ubuntu与centos之间的文件传输 默认端口:22 传输前确认端口是否开启 1.在Ubuntu上安装scp命令 apt-get install openssh-server 2.将U ...

  10. CatDCGAN项目复现与对抗网络初识

    CatDCGAN项目复现与对抗网络初识 作者 CarpVexing 日期 100521 禁止转载 目录 CatDCGAN项目复现与对抗网络初识 引言 CatDCGAN项目基本信息 复现项目的准备工作 ...