机器学习鸢尾花数据集knn算法模型
时间: 2025-02-21 10:22:17 浏览: 55
### 构建KNN算法在鸢尾花数据集上的机器学习模型
#### 数据准备与加载
为了使用 KNN 算法对鸢尾花数据集进行分类,首先需要导入必要的库并加载数据集。Scikit-Learn 提供了一个方便的方法来获取这个经典的数据集。
```python
from sklearn.datasets import load_iris
import pandas as pd
# 加载鸢尾花数据集
data = load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target
```
#### 数据预处理
确保数据被适当地分割成训练集和测试集对于评估模型性能至关重要。这里采用 `train_test_split` 函数来进行划分,并标准化特征值以便更好地应用距离度量方法。
```python
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
X_train, X_test, y_train, y_test = train_test_split(
df[data.feature_names], df['target'], test_size=0.3, random_state=42)
scaler = StandardScaler().fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)
```
#### 实现自定义的KNN算法
下面展示了如何编写一个简单的 KNN 分类器函数,该函数接受已知样本作为输入,并预测新样本所属类别。
```python
import numpy as np
from collections import Counter
def My_KNN(train_data, train_labels, new_instance, k=3):
distances = []
# 计算欧氏距离
for index, instance in enumerate(train_data):
distance = np.sqrt(np.sum((instance - new_instance)**2))
distances.append([distance, index])
# 排序并选取最近邻
sorted_distances = sorted(distances)[:k]
indices_of_nearest_neighbors = [index for _, index in sorted_distances]
# 投票决定最终标签
most_common_label = Counter(train_labels.iloc[indices_of_nearest_neighbors]).most_common(1)[0][0]
return most_common_label
```
#### 应用KNN模型到测试集中
利用上述编写的 `My_KNN()` 方法可以逐条预测测试集中的每一个实例,并计算整体准确性。
```python
predictions = []
for i in range(len(X_test_scaled)):
prediction = My_KNN(pd.DataFrame(X_train_scaled), y_train, X_test_scaled[i], k=5)
predictions.append(prediction)
accuracy = sum(predictions == y_test.to_numpy()) / len(y_test)
print(f'Accuracy of the custom KNN classifier is {accuracy:.2%}')
```
以上就是完整的流程说明以及具体实现方式[^1]。值得注意的是,在实际项目开发过程中通常会直接调用 scikit-learn 中内置好的 KNeighborsClassifier 类而不是手动编码整个逻辑;这样做不仅效率更高而且更加稳定可靠[^2]。
阅读全文
相关推荐


















