2.运行K近邻算法,尝试用不同的距离曼哈顿距离、欧氏距离、闵式距离度量、不同的K值,对一个数据集多次分类,对多个数据集进行分类代码
时间: 2024-10-03 13:02:53 浏览: 24
运行K近邻(KNN)算法涉及以下几个关键步骤,这里将以Python的scikit-learn库为例,展示如何使用不同距离度量(曼哈顿距离、欧氏距离和闵式距离)和不同的K值对数据集进行分类:
1. 导入所需库和模块:
```python
import numpy as np
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
```
2. 加载数据集并预处理:
```python
data = load_iris()
X = data.data
y = data.target
# 分割数据为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
3. 定义一个函数,用于计算不同距离度量:
```python
def calculate_distance(x1, x2, metric='euclidean'):
if metric == 'euclidean':
return np.linalg.norm(x1 - x2)
elif metric == 'manhattan':
return np.sum(np.abs(x1 - x2))
elif metric == 'minkowski': # Minkowski距离,默认p=2即为欧氏距离,此处仅示例
return np.power(np.linalg.norm(x1 - x2, ord=2), 2)
else:
raise ValueError("Invalid distance metric")
```
4. 对于每个K值,循环执行KNN分类:
```python
k_values = [1, 3, 5] # 可以调整这个列表以包含更多或更少的K值
for k in k_values:
knn = KNeighborsClassifier(n_neighbors=k, metric=calculate_distance)
# 训练模型
knn.fit(X_train, y_train)
# 预测测试集
y_pred = knn.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"K={k}, Metric={metric}: Accuracy: {accuracy}")
阅读全文