scikit-learn 笔记之KNN(K近邻算法)

K近邻算法

    • 说明
    • KNeighborsClassifier分类
    • KNeighborsRegressor回归
    • 总结

说明

  在scikit-learn中提供了一个KNeighborsClassifier类来实现k近邻法分类模型,一个KNeighborsRegressor类来实k近邻法回归模型。

KNeighborsClassifier分类

KNeighborsClassifier是分类模型,其原型为

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

参数
n_neighbors:一个整数,指定k值,默认为5
weights:一字符串或者可调用对象,指定投票权重策略。即这些邻居的投票权可以为相同或者不同。

  • ‘uniform’:本结点的所有邻居结点的投票权重都相等 。
  • ‘distance’:本结点的所有邻居结点的投票权重与距离成反比。即越近的结点,其投票权重越大。
  • [callable]:一个可调用对象。它传入距离的数组,返回同样形状的权重数组。

algorithm:一字符串,指定计算最近邻的算法,默认为’auto’。

  • ‘ball_tree’:使用 BallTree算法。
  • ‘kd_tree’:使用KDTree算法。
  • ‘brute’:使用暴力搜索法。
  • ‘auto’:自动决定最合适的算法。

leaf_size:一个整数,指定BallTree或者 KDTree叶结点规模。它影响了树的构建和查询速度,默认为30。
p:一个整数,指定在’Minkowski’度量上的指数,默认为2。如果 p=1,对应于曼哈顿距离;p=2对应于欧拉距离。
metric:一个字符串,指定距离度量。默认为’minkowski’距离。
n_jobs:并行性。默认为-11表示派发任务到所有计算机的CPU上。
实例方法
fit(X,y):训练模型。
get_params(deep=True):获取模型参数信息。
kneighbors([X, n_neighbors, return_distance]):返回样本点的 k近邻点。如果return_distance=True,同时还返回到这些近邻点的距离。
kneighbors_graph([X, n_neighbors, mode]):返回样本点的 k近邻点的连接图。
predict(X):用模型进行预测,返回预测值。
score(X, y[, sample_weight]):返回模型的预测性能得分。
set_params(**params):设置模型参数。
示例

from sklearn import neighbors,datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

digits = datasets.load_digits()
train,target = digits.data,digits.target

X_train,X_test,y_train,y_test = train_test_split(train,target,test_size=0.3,random_state=0)
knnclf = KNeighborsClassifier(n_neighbors=3)
knnclf.fit(X_train,y_train)
print('Training Score:%f'%knnclf.score(X_train,y_train))
print('Testing Score:%f'%knnclf.score(X_test,y_test))

KNeighborsRegressor回归

KNeighborsRegressor是回归模型,其原型为:

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

参数
n_neighbors:一个整数,指定k值,默认为5
weights:一字符串或者可调用对象,指定投票权重策略。即这些邻居的投票权可以为相同或者不同。

  • ‘uniform’:本结点的所有邻居结点的投票权重都相等 。
  • ‘distance’:本结点的所有邻居结点的投票权重与距离成反比。即越近的结点,其投票权重越大。
  • [callable]:一个可调用对象。它传入距离的数组,返回同样形状的权重数组。

algorithm:一字符串,指定计算最近邻的算法,默认为’auto’。

  • ‘ball_tree’:使用 BallTree算法。
  • ‘kd_tree’:使用KDTree算法。
  • ‘brute’:使用暴力搜索法。
  • ‘auto’:自动决定最合适的算法。

leaf_size:一个整数,指定BallTree或者 KDTree叶结点规模。它影响了树的构建和查询速度,默认为30。
p:一个整数,指定在’Minkowski’度量上的指数,默认为2。如果 p=1,对应于曼哈顿距离;p=2对应于欧拉距离。
metric:一个字符串,指定距离度量。默认为’minkowski’距离。
n_jobs:并行性。默认为-11表示派发任务到所有计算机的CPU上。
实例方法
fit(X,y):训练模型。
get_params(deep=True):获取模型参数信息。
kneighbors([X, n_neighbors, return_distance]):返回样本点的 k近邻点。如果return_distance=True,同时还返回到这些近邻点的距离。
kneighbors_graph([X, n_neighbors, mode]):返回样本点的 k近邻点的连接图。
predict(X):用模型进行预测,返回预测值。
score(X, y[, sample_weight]):返回模型的预测性能得分,评分使用 R 2 R^{2} R2
set_params(**params):设置模型参数。
示例

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor

X, y = load_boston(return_X_y=True)

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=0)
knnrg = KNeighborsRegressor(n_neighbors=3)
knnrg.fit(X_train,y_train)
print('Training Score:%f'%knnrg.score(X_train,y_train))
print('Testing Score:%f'%knnrg.score(X_test,y_test))

总结

  k近邻的分类和回归算法其参数意义和实例方法几乎完全相同,两者的区别在于回归分析和分类决策的不同:
  ❐KNeighborsClassifier将待预测样本点最近邻的k个训练样本点中出现次数最多的那一类作为待预测样本点的分类。
  ❐KNeighborsRegressor将待预测样本点最近邻的k个训练样本点的平均值作为待预测样本点的值。

你可能感兴趣的:(#,机器学习入门阶段,机器学习,数据挖掘,KNN,sklearn,k近邻算法)