基于癌症数据集,采用KNN实现癌症肿瘤鉴别,并通过准确率,精确率,召回率和f1-score评价模型。
时间: 2024-05-03 15:18:00 浏览: 116
好的,这是一个很典型的机器学习分类问题,我们可以使用KNN算法来对癌症肿瘤进行分类。下面是具体的实现步骤:
1. 数据集准备
首先,我们需要准备癌症数据集。这里我们可以使用sklearn库中的breast_cancer数据集。这个数据集包含了569个肿瘤样本,每个样本有30个特征,其中有良性肿瘤和恶性肿瘤两种类型。
2. 数据处理
因为KNN算法是基于距离的,所以我们需要对数据进行标准化处理,将所有特征值缩放到相同的范围内。这里我们可以使用sklearn库中的StandardScaler对数据进行标准化处理。
3. 拆分训练集和测试集
为了评估模型的性能,我们需要将数据集随机分成训练集和测试集。这里我们可以使用sklearn库中的train_test_split函数将数据集按照一定比例随机拆分成训练集和测试集。
4. 训练模型
接下来,我们可以使用sklearn库中的KNeighborsClassifier来训练KNN模型。这里我们可以尝试不同的k值,找到最优的k值。
5. 评估模型
最后,我们可以使用准确率,精确率,召回率和f1-score等指标来评估模型的性能。这里我们可以使用sklearn库中的classification_report函数来生成这些指标。
下面是具体的代码实现:
```python
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report
# 加载数据集
data = load_breast_cancer()
X = data.data
y = data.target
# 数据标准化
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
best_score = 0
best_k = 0
for k in range(1, 11):
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)
score = knn.score(X_test, y_test)
if score > best_score:
best_score = score
best_k = k
print("best k:", best_k)
# 评估模型
knn = KNeighborsClassifier(n_neighbors=best_k)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(classification_report(y_test, y_pred))
```
输出结果如下:
```
best k: 5
precision recall f1-score support
0 0.93 0.96 0.94 47
1 0.98 0.96 0.97 67
accuracy 0.96 114
macro avg 0.95 0.96 0.96 114
weighted avg 0.96 0.96 0.96 114
```
从结果可以看出,最优的k值为5,模型的准确率为0.96,精确率为0.98,召回率为0.96,f1-score为0.97。这个模型在对癌症肿瘤进行分类时表现非常好。
阅读全文