knn鸢尾花分类
时间: 2025-06-22 15:09:04 浏览: 8
### 使用KNN算法对鸢尾花数据集进行分类
以下是实现KNN算法对鸢尾花数据集进行分类的一个完整Python代码示例:
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report
# 加载鸢尾花数据集
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.3, random_state=42)
# 数据标准化处理
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建KNN模型并设置超参数k
knn_model = KNeighborsClassifier(n_neighbors=3, algorithm='kd_tree') # 设置k为3,使用kd树算法[^1]
knn_model.fit(X_train_scaled, y_train)
# 预测测试集的结果
y_pred = knn_model.predict(X_test_scaled)
# 输出预测准确性
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")
# 打印详细的分类报告
report = classification_report(y_test, y_pred, target_names=data.target_names)
print(report)
```
#### 解析
- **加载数据**: `load_iris()` 函数用于加载内置的鸢尾花数据集。该数据集中有三个类别(setosa、versicolor 和 virginica),每个样本具有四个特征(萼片长度、萼片宽度、花瓣长度和花瓣宽度)。这些已知标签使得这是一个监督学习问题[^2]。
- **划分数据集**: 利用`train_test_split`函数将原始数据划分为训练集和测试集,其中80%的数据作为训练集,其余20%作为测试集。
- **标准化**: 对特征进行了标准化预处理,这是为了消除不同尺度的影响,从而提高KNN算法的效果[^4]。
- **构建模型**: 调用了`KNeighborsClassifier`类来创建KNN模型,并设置了`n_neighbors=3`表示选取最靠近目标点的3个邻居来进行投票决策。同时指定了`algorithm='kd_tree'`以优化查找过程[^1]。
- **评估性能**: 计算了模型在测试集上的准确率以及更详尽的分类表现指标。
此程序展示了如何利用sklearn库快速搭建一个基础版的KNN分类器应用于鸢尾花数据集之上[^4]。
阅读全文
相关推荐
















