Python版本:python3.x
sklearn简介
Scikit learn 也简称sklearn,是机器学习领域当中最知名的python模块之一。使用sklearn可以很方便地让我们实现一个机器学习算法。一个复杂度算法的实现,使用sklearn可能只需要调用几行API即可。所以学习sklearn,可以有效减少我们特定任务的实现周期。
实例:鸢尾属植物
1 数据集介绍:
虹膜
数据量:150个
四个特征:
萼片长度,萼片宽度,花瓣长度,花瓣宽度
(sepal length, sepal width, petal length, petal width)
三种分类:
山鸢尾, 杂色鸢尾,维吉尼亚鸢尾
(iris setosa, iris versicolour, iris virginica)
数据展示:
代码展示
由于该数据集在sklearn库中就有,所以我们直接调用即可,不需要对数据进行处理。
#导入kNN算法分类器和数据集
from sklearn.neighbors import KNeighborsClassifier as KNN
from sklearn import datasets
#读取虹膜数据集
iris = datasets.load_iris()
#打印数据
print(iris)
#n_neighbors=3就是k=3,algorithm='auto'表示算法自己决定合适的搜索算法
neigh = KNN(n_neighbors=3,algorithm='auto')
#建立模型
neigh.fit(iris.data,iris.target)
#预测新数据为什么种类的虹膜
predictedLabel = neigh.predict([[0.1,0.2,0.3,0.4]])
#打印预测值
print(predictedLabel)
KNneighborsClassifier参数说明:
- n_neighbors:默认为5,就是k-NN的k的值,选取最近的k个点。
- weights:默认是uniform,参数可以是uniform、distance,也可以是用户自己定义的函数。uniform是均等的权重,就说所有的邻近点的权重都是相等的。distance是不均等的权重,距离近的点比距离远的点的影响大。用户自定义的函数,接收距离的数组,返回一组维数相同的权重。
- algorithm:快速k近邻搜索算法,默认参数为auto,可以理解为算法自己决定合适的搜索算法。除此之外,用户也可以自己指定搜索算法ball_tree、kd_tree、brute方法进行搜索,brute是蛮力搜索,也就是线性扫描,当训练集很大时,计算非常耗时。kd_tree,构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。ball tree是为了克服kd树高纬失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。
- leaf_size:默认是30,这个是构造的kd树和ball树的大小。这个值的设置会影响树构建的速度和搜索速度,同样也影响着存储树所需的内存大小。需要根据问题的性质选择最优的大小。
- metric:用于距离度量,默认度量是minkowski,也就是p=2的欧氏距离(欧几里德度量)。
- p:距离度量公式。在上小结,我们使用欧氏距离公式进行距离度量。除此之外,还有其他的度量方法,例如曼哈顿距离。这个参数默认为2,也就是默认使用欧式距离公式进行距离度量。也可以设置为1,使用曼哈顿距离公式进行距离度量。
- metric_params:距离公式的其他关键参数,这个可以不管,使用默认的None即可。
- n_jobs:并行处理设置。默认为1,临近点搜索并行工作数。如果为-1,那么CPU的所有cores都用于并行工作。
KNeighborsClassifier提供了以一些方法供我们使用:
大概意思为: