在上述代码中添加预测集并和训练集,测试集的比例调为1比8比2
时间: 2024-03-27 18:35:28 浏览: 11
好的,下面是更新后的代码:
```python
# 导入 pandas 库,用于读取数据集
import pandas as pd
# 读取数据集,这里假设数据集文件名为 iris.csv
data = pd.read_csv("iris.csv")
# 分割特征和标签
X = data.iloc[:, :-1] # 前三列是特征
y = data.iloc[:, -1] # 最后一列是标签
# 引入 train_test_split 函数,将数据集分为训练集、验证集和测试集
from sklearn.model_selection import train_test_split
X_train, X_val_test, y_train, y_val_test = train_test_split(X, y, test_size=0.2, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_val_test, y_val_test, test_size=0.25, random_state=42)
# 引入 KNeighborsClassifier 类,创建 KNN 分类器
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
# 训练 KNN 分类器
knn.fit(X_train, y_train)
# 预测验证集
y_val_pred = knn.predict(X_val)
# 计算验证集的准确率
from sklearn.metrics import accuracy_score
val_accuracy = accuracy_score(y_val, y_val_pred)
print("Validation Accuracy:", val_accuracy)
# 预测测试集
y_test_pred = knn.predict(X_test)
# 计算测试集的准确率
test_accuracy = accuracy_score(y_test, y_test_pred)
print("Test Accuracy:", test_accuracy)
# 预测新样本
new_sample = [[5.1, 3.5, 1.4]]
y_new_pred = knn.predict(new_sample)
print("New Sample Prediction:", y_new_pred)
```
这里,我们使用了 `train_test_split` 函数,将数据集分为训练集、验证集和测试集。首先,我们将数据集分为 80% 的训练集和 20% 的验证集和测试集。然后,我们将验证集和测试集按照 3:1 的比例分割,得到 60% 的验证集和 40% 的测试集。最后,我们使用训练好的 KNN 分类器分别对验证集和测试集进行预测,并计算它们的准确率。同时,我们还预测了一个新的样本,并输出了它的预测结果。
需要注意的是,我们在这里使用了 60% 的数据作为验证集,这可能会导致验证集的样本数量较少,从而影响到模型的准确性。在实际应用中,我们需要根据数据集的大小和分布情况,合理选择训练集、验证集和测试集的比例。