机器学习实践——KNN算法
1、基本准备
1.1 sklearn.neighbors.KNeighborsClassifier类
1.1.1 基本参数说明
- n_neighbors: K近邻算法中的k值,默认值为5.
- weight:基于权重的KNN算法的权重计算方式,参数值包括1、‘uniform’,所有的节点的权重相同。2、‘distance’:按照距离来取权重值。3、[callable],用户自定义的权重计算方式。默认值为‘uniform’。
- ‘algorithm’:距离计算的算法方式,参数值包括:1、‘auto’:根据fit方法来自动选择合适的距离计算方式。2、‘ball_tree’:基于BallTree的距离计算方式。3、‘kd_tree’:基于KD树的距离计算方式。4、‘brute’:暴力搜索。默认值为‘auto’。
- ‘leaf_size’:在采用KD树和Ball树时指定叶子节点的大小。默认值30。
1.1.2 基本属性说明
- classes_:分类器已知的分类标签。
- effective_metric_ :使用的距离度量方式
1.1.3 基本方法说明
- fit(self,X,Y):参数X和Y表示输入的训练集和训练集对应的标签。
- get_params(self):获取分类器模型的参数。
- kneighbors() : 获取某一个点的相邻的K个节点。
- predict(self,X):对数据进行分类预测,X表示进行测试的数据。
- predict_proba(self,X):对数据属于某一个类的概率,X表示的进行预测的数据。
- score(self,X,Y):对于给定的两个数据集,返回数据的平均准确率。
- set_params(self,**params):设置分类器模型的参数。
1.1.4 基本使用
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
X = np.array([[0], [1], [2], [3]])
Y = np.array([0,0,1,1])
neigh = KNeighborsClassifier(n_neighbors=3,weights='distance')
neigh.fit(X,Y)
print("the predict is {}".format(neigh.predict([[1.1]])))
print("the predict proa is {}".format(neigh.predict_proba([[0.9]])))
print("the predict kneightbors is :",neigh.kneighbors([[1.2]]))
输出为:
the predict is [0]
the predict proa is [[0.92436975 0.07563025]]
the predict kneightbors is : (array([[0.2, 0.8, 1.2]]), array([[1, 2, 0]], dtype=int64))
1.2 无监督的KNN算法 NearrestNeightbors类
1.2.1 基本参数说明
- n_neighbors: K近邻算法中的k值,默认值为5.
- radius:分类器半径,分类器在半径内的进行投票决定
2、‘distance’:按照距离来取权重值。3、[callable],用户自定义的权重计算方式。默认值为‘uniform’。 - ‘algorithm’:距离计算的算法方式,参数值包括:1、‘auto’:根据fit方法来自动选择合适的距离计算方式。2、‘ball_tree’:基于BallTree的距离计算方式。3、‘kd_tree’:基于KD树的距离计算方式。4、‘brute’:暴力搜索的方式。默认值为‘auto’。
- ‘leaf_size’:在采用KD树和Ball树时指定叶子节点的大小。默认值30。
1.2.2 基本属性说明
- effective_metric_ :使用的距离度量方式
- effective_metric_params_:计算邻接的距离的度量的参数
1.2.3 基本方法说明
- fit(self,X,Y):参数X和Y表示输入的训练集和训练集对应的标签。
- get_params(self):获取分类器模型的参数。
- kneighbors(X) : 获取某一个点的相邻的K个节点。
- kneighbors_graph(X):获取某个节点的K邻居的加权图。
- radius_neightbors(X):给定半径内的邻居。
- radius_neightbors_graph(X):给定半径内邻居的加权图。
1.2.4 基本使用
import numpy
from sklearn.neighbors import NearestNeighbors
samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
neigh = NearestNeighbors(n_neighbors=2)
neigh.fit(samples)
print("the kneighbors is :")
print(neigh.kneighbors([[1.,1.,1.]]))
print("the kneighbors graph is :")
print(neigh.kneighbors_graph(([[1.,1.,1.]])))
print("the radius neighbors is :")
print(neigh.radius_neighbors([[1,1,1]]))
print("the radius neighbors graph is :")
print(neigh.radius_neighbors_graph([[1,1,1]]))
输出为:
the kneighbors is :
(array([[0.5, 1.5]]), array([[2, 1]], dtype=int64))
the kneighbors graph is :
(0, 2) 1.0
(0, 1) 1.0
the radius neighbors is :
(array([array([0.5])], dtype=object), array([array([2], dtype=int64)], dtype=object))
the radius neighbors graph is :
(0, 2) 1.0
1.3 KNN回归KNeighborsRegressor类
1.3.1 基本参数说明
- n_neighbors: K近邻算法中的k值,默认值为5.
- weight:基于权重的KNN算法的权重计算方式,参数值包括1、‘uniform’,所有的节点的权重相同。2、‘distance’:按照距离来取权重值。3、[callable],用户自定义的权重计算方式。默认值为‘uniform’。
- ‘algorithm’:距离计算的算法方式,参数值包括:1、‘auto’:根据fit方法来自动选择合适的距离计算方式。2、‘ball_tree’:基于BallTree的距离计算方式。3、‘kd_tree’:基于KD树的距离计算方式。4、‘brute’:暴力搜索。默认值为‘auto’。
- ‘leaf_size’:在采用KD树和Ball树时指定叶子节点的大小。默认值30。
1.3.2 基本属性说明
- classes_:分类器已知的分类标签。
- effective_metric_ :使用的距离度量方式
1.3.3 基本方法说明
- fit(self,X,Y):参数X和Y表示输入的训练集和训练集对应的标签。
- get_params(self):获取分类器模型的参数。
- kneighbors() : 获取某一个点的相邻的K个节点。
- predict(self,X):对数据进行分类预测,X表示进行测试的数据。
- score(self,X,Y):对于给定的两个数据集,返回数据的平均准确率。
- set_params(self,**params):设置分类器模型的参数。
2、基于KNN的癌症分类任务
该任务采用了sklearn中自带的数据集,具体的代码如下:
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
cancer = load_breast_cancer()
X = cancer.data
Y = cancer.target
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.2)
clf = KNeighborsClassifier(n_neighbors=6,weights='distance')
clf.fit(X_train,Y_train)
train_score = clf.score(X_train,Y_train)
test_score = clf.score(X_test,Y_test)
print("the train accuracy {0}; the test accuracy {1} ".format(train_score,test_score))
输出为:
the train accuracy 1.0; the test accuracy 0.9473684210526315
3、波士顿房价预测
import numpy as np
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
boston = load_boston()
X = boston.data
Y = boston.target
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.2)
clf = KNeighborsRegressor(n_neighbors=6,weights='distance')
clf.fit(X_train,Y_train)
Y_pre = clf.predict([X_test[0]])
train_score = clf.score(X_train,Y_train)
test_score = clf.score(X_test,Y_test)
print("the Y_pre is : ",Y_pre)
print("the train score :{0}; the test score :{1}".format(train_score,test_score))
输出:
the Y_pre is : [11.0323127]
the train score :1.0; the test score :0.567833384377563