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提供了以一些方法供我们使用,如图下图所示。
下面是常用的方法
-
Fit the model using X as training data and y as target values
Parameters: X : {array-like, sparse matrix, BallTree, KDTree}
Training data. If array or matrix, shape [n_samples, n_features],or [n_samples, n_samples] if metric=’precomputed’.
y : {array-like, sparse matrix}
Target values of shape = [n_samples] or [n_samples, n_outputs]
fit
(
X,
y
)
¶
(1) fit(X,y)¶
使用X作为训练数据并将y作为目标值来拟合模型
参数:
X:{阵列式,稀疏矩阵,BallTree,KDTree}
训练数据。 如果数组或矩阵,如果metric ='precomputed',则形成[n_samples,n_features]或[n_samples,n_samples]。
y:{数组式,稀疏矩阵}
shape的目标值= [n_samples]或[n_samples,n_outputs]
-
Predict the class labels for the provided data
Parameters: X : array-like, shape (n_query, n_features), or (n_query, n_indexed) if metric == ‘precomputed’
Test samples.
Returns: y : array of shape [n_samples] or [n_samples, n_outputs]
Class labels for each data sample.
(2)predict
(X)
¶
参数:
X:类似数组,形状(n_query,n_features)或(n_query,n_indexed)如果metric =='precomputed'
测试样本。
返回:
y:形状数组[n_samples]或[n_samples,n_outputs]
每个数据样本的类标签
下面是sklearn自带的例子 digits classification exercise 例子链接
from sklearn import datasets, neighbors, linear_model
digits = datasets.load_digits()
X_digits = digits.data
y_digits = digits.target
n_samples = len(X_digits)
X_train = X_digits[:int(.9 * n_samples)]
y_train = y_digits[:int(.9 * n_samples)]
X_test = X_digits[int(.9 * n_samples):]
y_test = y_digits[int(.9 * n_samples):]
knn = neighbors.KNeighborsClassifier()
logistic = linear_model.LogisticRegression()
print('KNN score: %f' % knn.fit(X_train, y_train).score(X_test, y_test))
print('LogisticRegression score: %f' % logistic.fit(X_train, y_train).score(X_test, y_test))