利用sklearn.neighbors实现基于KNN的数据聚类方法
Sklearn.neighbors是scikit-learn库中的一个模块,提供了一系列用于近邻算法的工具。
KNN(K-Nearest Neighbors)是一种常用的机器学习算法,用于分类和回归问题。KNN算法基于实例之间的相似度进行预测,即将新的样本与已知样本进行比较,找到最相似的K个样本,然后根据这K个样本的标签进行预测。
Sklearn.neighbors中提供了KNeighborsClassifier和KNeighborsRegressor两个类,分别用于分类和回归问题。这两个类采用了最近邻算法,可以根据输入的训练数据建立模型并对新样本进行预测。
KNeighborsClassifier的使用方法如下:
from sklearn.neighbors import KNeighborsClassifier # 创建分类器对象 clf = KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2) # 使用训练数据训练模型 clf.fit(X_train, y_train) # 对新样本进行预测 y_pred = clf.predict(X_test)
在上述代码中,我们首先导入KNeighborsClassifier类。然后创建一个分类器对象clf,并指定了一些参数,例如n_neighbors表示选择最近的K个样本,默认值为5;weights表示样本权重的计算方式,可以是uniform(所有样本的权重一样)、distance(样本距离的倒数)、自定义函数等,默认为uniform;algorithm表示选择最近邻算法,默认为auto;leaf_size表示叶子节点的大小,默认为30;p表示距离度量的指数,默认为2,即欧氏距离。
接下来,我们使用训练数据(包括特征向量X_train和标签y_train)训练模型。fit()函数将模型与训练数据拟合,生成一个可用于预测的模型。
最后,使用predict()函数对新样本(特征向量X_test)进行预测,生成一个预测的结果y_pred。
以下是一个使用KNeighborsClassifier进行分类的例子:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建分类器对象
clf = KNeighborsClassifier(n_neighbors=3)
# 使用训练数据训练模型
clf.fit(X_train, y_train)
# 对测试集进行预测
y_pred = clf.predict(X_test)
# 计算预测准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
在上述代码中,我们首先导入了load_iris函数加载鸢尾花数据集,然后使用train_test_split函数将数据集划分为训练集和测试集,其中测试集占比为0.2。
接下来,创建了一个KNeighborsClassifier分类器对象clf,选择了n_neighbors=3作为参数。
然后使用fit()函数训练模型,并使用predict()函数对测试集进行预测。最后,使用accuracy_score()函数计算预测的准确率,并打印出结果。
总之,sklearn.neighbors提供了方便的接口和实现,可以通过KNN算法进行数据聚类任务,对于需要进行分类和回归的问题,可以使用sklearn.neighbors的KNeighborsClassifier和KNeighborsRegressor类。以上是一个基于KNN的数据聚类方法使用的例子。
