上机任务:KNN算法应用于红酒数据集 (数据集可直接从sklearn.datasets库中导入) 1. 数据获取 2. 特征提取 3. 数据分割 4. 计算模型准确率 5. 预测判断 6. 找到最优n_neighbors
时间: 2024-10-01 10:03:27 浏览: 39
上机任务:K近邻(KNN)算法用于红酒数据集是一个典型的监督学习案例,步骤如下:
1. **数据获取**:
使用Python的scikit-learn库中的`load_wine()`函数加载红酒数据集。首先导入所需的模块:
```python
from sklearn import datasets
wine = datasets.load_wine()
X = wine.data
y = wine.target
```
这里 `X` 代表特征数据,`y` 代表类别标签。
2. **特征提取**:
红酒数据集已经包含预处理过的特征,无需额外提取。如果原始数据需要标准化或降维,可以使用`StandardScaler`或PCA等工具。
3. **数据分割**:
划分训练集和测试集,通常采用交叉验证,如`train_test_split`:
```python
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
4. **计算模型准确率**:
使用`KNeighborsClassifier`构建模型并进行预测,然后评估模型性能:
```python
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5) # 初始化模型
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = knn.score(X_test, y_test)
print("Accuracy:", accuracy)
```
5. **预测判断**:
对新的未知样本进行分类预测:
```python
new_sample = ... # 新输入的样本特征向量
prediction = knn.predict(new_sample)
print("Prediction for new sample:", prediction)
```
6. **找到最优n_neighbors**:
调整`n_neighbors` 参数寻找最佳值,一般通过交叉验证完成:
```python
import numpy as np
best_accuracy = 0
best_n_neighbors = None
for n in range(1, 21): # 可视化尝试范围
knn.n_neighbors = n
scores = cross_val_score(knn, X, y, cv=5)
avg_score = scores.mean()
if avg_score > best_accuracy:
best_accuracy = avg_score
best_n_neighbors = n
print(f"Best 'n_neighbors': {best_n_neighbors}, Best Accuracy: {best_accuracy}")
```
记得运行完所有步骤后,别忘了清理内存以释放资源。
阅读全文