sklearn学习 第一篇:knn分类

K临近分类是一种监督式的分类方法,首先根据已标记的数据对模型进行训练,根据模型对新的数据点进行预测,预测新数据的标签(label),也就是该数据所属的分类。

一,KNeighborsClassifier函数

使用KNeighborsClassifier创建K临近分类器:

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30,              p=2, metric=’minkowski’, metric_params=None, n_jobs=None, **kwargs)

参数注释:

1,n_neighbors

临近的节点数量,默认值是5

2,weights

权重,默认值是uniform,

  • uniform:表示每个数据点的权重是相同的;
  • distance:离一个簇中心越近的点,权重越高;
  • callable:用户定义的函数,用于表示每个数据点的权重

3,algorithm

  • auto:根据值选择最合适的算法
  • ball_tree:使用BallTree
  • kd_tree:KDTree
  • brute:使用Brute-Force查找

4,leaf_size

leaf_size传递给BallTree或者KDTree,表示构造树的大小,用于影响模型构建的速度和树需要的内存数量,最佳值是根据数据来确定的,默认值是30。

5,p,metric,metric_paras

  • p参数用于设置Minkowski 距离的Power参数,当p=1时,等价于manhattan距离;当p=2等价于euclidean距离,当p>2时,就是Minkowski 距离。
  • metric参数:设置计算距离的方法
  • metric_paras:传递给计算距离方法的参数

6,n_jobs

并发执行的job数量,用于查找邻近的数据点。默认值1,选取-1占据CPU比重会减小,但运行速度也会变慢,所有的core都会运行。

7,举个例子

下面的代码是最简单的knn分类器,可以看出,knn分类模型是由两部分构成的:第一部分是训练数据(fit),第二部分是预测数据(predict)

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)

x_train = [[0], [1], [2], [3]]
y_train = [0, 0, 1, 1]
knn.fit(x_train,y_train)

x_new=[[1.1]]
pred=knn.predict(x_new)
print(‘pred:{0}‘.format(pred))

二,观察数据

由于knn分类是监督式的分类方法之前,在构建一个复杂的分类模型之前,首先需要已标记的数据集。我们可以从sklearn的数据集中加载已有的数据进行学习:

from sklearn.datasets import load_iris
iris_dataset=load_iris()

查看iris_dataset的数据,该对象的结构和字典非常类型:

>>> iris_dataset.keys()
dict_keys([‘data‘, ‘target‘, ‘target_names‘, ‘DESCR‘, ‘feature_names‘, ‘filename‘])

1,样本数据

data 是样本数据,共4列150行,列名是由feature_names来确定的,每一列都叫做矩阵的一个特征(属性),前4行的数据是:

>>> iris_dataset.data[0:4]
array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [4.6, 3.1, 1.5, 0.2]])

2,标签

target是标签,用数字表示,target_names是标签的文本表示

>>> iris_dataset.target[0:4]
array([0, 0, 0, 0])

>>> iris_dataset.target_names
array([‘setosa‘, ‘versicolor‘, ‘virginica‘], dtype=‘<U10‘)

3,查看数据的散点图

查看数据的散点图矩阵,按照数据的类别进行着色,观察数据的分布:

import pandas as pd
import mglearn

iris_df=pd.DataFrame(x_train,columns=iris_dataset.feature_names)
pd.plotting.scatter_matrix(iris_df,c=y_train,figsize=(15,15),marker=‘o‘,hist_kwds={‘bins‘:20}
                    ,s=60,alpha=.8,cmap=mglearn.cm3)

三,创建模型

我们使用sklearn数据集中的鸢尾花测量数据来构建一个复杂的分类模型,并根据输入的数据点来预测鸢尾花的类别。

1,拆分数据

把鸢尾花数据拆分为训练集和测试集:

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)

2,创建分类器

使用KNeighborsClassifier创建分类器,设置参数n_neighbors为1:

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)

3,使用训练集来构建模型

对于监督学习,训练数据集包括两部分:输入和结果(Lable),每一行输入都对应一行结果,结果是输入的正确分类(标签)。

通常,记X_train是训练的输入数据集,X_train对应的结果是y_train,是训练数据集的输出,通过fit()函数来训练模型,构建模型:

knn.fit(x_train, y_train)

4,预测新数据

对于训练之后的模型,使用predict()函数来预测数据的结果。

x_new=np.array([[5, 2.9, 1, 0.2]])

prediction= knn.predict(x_new)
print("prediction :{0}  ,classifier:{1}".format(prediction,iris_dataset["target_names"][prediction]))

5,评估模型

使用训练集和测试集来评估模型:

y_pred=knn.predict(x_test)
assess_model_socre=knn.score(x_test,y_test)
print(‘Test set score:{:2f}‘.format(assess_model_socre))

参考文档:

sklearn.neighbors.KNeighborsClassifier

原文地址:https://www.cnblogs.com/ljhdo/p/10600613.html

时间: 2024-10-10 04:09:57

sklearn学习 第一篇:knn分类的相关文章

C++的笔记学习第一篇,认识C++

在一个类中包含两种成员: 数据和函数,分别称为C++数据成员和成员函数. 关于类: 类是C++新增加的重要数据类型,有了类,就就可以实现面向对象程序设计方法中的封装.信息隐蔽.继承.派生.多态等功能. 关于函数的重载 在编程时,有时我们要实现的是同一类的功能,只是有些细节不同.例如希望从3个数中找出其中的最大者,而每次求最大数时数据的类型不同,可能是3个整数.3个双精度数或3个长整数. 程序设计者往往会分别设计出3个不同名的函数,其函数原型为:int max1(int a int b, int

ImageJ 学习第一篇

ImageJ是世界上最快的纯Java的图像处理程序.它可以过滤一个2048x2048的图像在0.1秒内(*).这是每秒40万像素!ImageJ的扩展通过使用内置的文本编辑器和Java编译器的ImageJ的开发插件.500多插件可用. 数据类型:8位灰度或索引色,16位无符号整数,32位浮点和RGB色彩. 文件格式:读写所有支持的数据类型为TIFF(非压缩)或原始数据.打开和保存GIF,JPEG,BMP,PNG,PGM,FITS和ASCII.打开DICOM.使用URL打开的TIFF.GIF文件.J

Java图像处理最快技术:ImageJ 学习第一篇

ImageJ是世界上最快的纯Java的图像处理程序.它可以过滤一个2048x2048的图像在0.1秒内(*).这是每秒40万像素!ImageJ的扩展通过使用内置的文本编辑器和Java编译器的ImageJ的开发插件.500多插件可用. 数据类型:8位灰度或索引色,16位无符号整数,32位浮点和RGB色彩. 文件格式:读写所有支持的数据类型为TIFF(非压缩)或原始数据.打开和保存GIF,JPEG,BMP,PNG,PGM,FITS和ASCII.打开DICOM.使用URL打开的TIFF.GIF文件.J

Golang学习-第一篇 Golang的简单介绍及Windows环境下安装、部署

序言 这是本人博客园第一篇文章,写的不到位之处,希望各位看客们谅解. 本人一直从事.NET的开发工作,最近在学习Golang,所以想着之前学习的过程中都没怎么好好的将学习过程记录下来.深感惋惜! 现在将Golang的学习点滴记录分享,废话到此,下面进入正文. 注:此文及以后所有内容中的开发平台为:Windows 开发工具为:JetBrains Gogland x64版本 官方下载地址为:https://www.jetbrains.com/go/download/#section=windows

Java学习第一篇---Java入门准备

这是我的第一篇博客,以后也会写自己学习Java的过程.一些知识点.心得体会等,以此鼓励自己坚持学习! 现在开始了我学习Java的生涯:[个人下载的Jdk版本是jdk-8u5-windows-x64] 1.安装之后的目录: ->Source Code: 安装这个选项将会安装Java所有核心类库的源代码 ->bin: 该路径下存放了JDK的各种工具命令,常用的Javac.java等命令. ->db: 该路径是安装Java DB的路径[DB(data base,数据库)是依照某种数据模型组织起

Android基础学习第一篇—Project目录结构

写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对的地方,希望大家给与指正. 2. 由于类似于读书笔记,可能格式神马的会比较随(hen)意(chou),大家看着受不了,可以使劲吐槽. *************************************我只是分割线***************************************

spring入门学习第一篇

本篇知识点有:maven依赖,applicationContext.xml配置文件,Scope作用域,初始化和销毁,延时初始化lazy-init,工厂Factory,Aware接口,动态bean.内容可能过多,建议准备好瓜子可乐,不足之处,多多指正. 1.maven依赖 因为我们使用的是maven + spring-context学习的,所以在使用spring之前,我们要先把maven依赖导入进来,导入spring-context5.2.0.RELEASE版本. 导入代码如下: <depende

android学习第一篇 开发环境搭建

android开发环境搭建 由于博主最近在学golang,所以就想着顺手把android开发给学了.最近这两天都在折腾idea,搭建开发环境.昨天晚上终于把golang和android的环境都搭好了,总结一下. 博主一开始使用android studio 做 android 开发,但使用idea做 golang 开发.这两个IDE都是功能十分庞大的,一同运行的话两个分别占用1.5G内存,所以就琢磨用idea开发安卓了.期间遇到几个坑,分享出来. 1.安装安卓SDK 下载地址 http://and

Ubuntu学习——第一篇

一. Ubuntu简介 Ubuntu(乌班图)是一个基于Debian的以桌面应用为主的Linux操作系统,据说其名称来自非洲南部祖鲁语或科萨语的“ubuntu”一词,意思是“人性”.“我的存在是因为大家的存在”,是非洲传统的一种价值观. Ubuntu的目标在于为一般用户提供一个最新同时又相当稳定,主要以自由软件建构而成的操作系统.Ubuntu目前具有庞大的社区力量支持,用户可以方便地从社区获得帮助. 二. 安装 ubuntu官方网站: http://www.ubuntu.com/    对应 中