利用SVM对乳腺癌数据breast-cancer-wisconsin.csv进行分类,先对数据清洗,把数据标签值为2、4替换为-1,1,并分割数据集为训练集和测试集,建立SVM模型并训练,再对模型进行评估,可视化
时间: 2024-11-11 10:38:56 浏览: 16
breast-cancer-wisconsin-data_cancer_breastcancer_machinelearning
5星 · 资源好评率100%
在利用支持向量机(SVM)对乳腺癌数据(如breast-cancer-wisconsin.csv)进行分类的过程中,需要经过以下几个步骤:
1. **数据预处理**:
- 加载数据:首先从CSV文件中加载数据,可以使用pandas库读取数据。
- 数据清洗:检查并处理缺失值,异常值或不符合分析需求的数据。将标签值(通常表示恶性或良性)为2和4的替换为-1和1,以便与二分类问题相符。
```python
import pandas as pd
data = pd.read_csv('breast-cancer-wisconsin.csv')
data['diagnosis'] = data['diagnosis'].map({'M': 1, 'B': -1})
```
2. **数据划分**:
- 将数据分为特征(X)和目标变量(y),通常是最后一列。
- 划分训练集和测试集,比如80%的数据用于训练,剩下的20%用于测试。可以使用sklearn的train_test_split函数来完成。
```python
from sklearn.model_selection import train_test_split
X = data.drop('diagnosis', axis=1)
y = data['diagnosis']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
3. **创建和训练SVM模型**:
- 导入所需的SVM模块,如`svm.SVC`。
- 定义模型,选择合适的核函数(如线性、多项式、径向基函数(RBF)等)。
- 训练模型。
```python
from sklearn import svm
model = svm.SVC(kernel='rbf') # 或者其他核函数
model.fit(X_train, y_train)
```
4. **模型评估**:
- 使用训练好的模型对测试集进行预测,并计算性能指标,如准确率、精确率、召回率和F1分数。
- 可以使用sklearn.metrics模块中的函数来进行这些评估。
```python
from sklearn.metrics import accuracy_score, classification_report
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))
```
5. **模型可视化**:
- 如果有决策边界或特征重要性的可视化需求,可以使用matplotlib或其他绘图库。例如,对于RBF SVM,可以通过绘制决策函数的等高线来展示分类区域。
```python
if hasattr(model, 'decision_function'):
from matplotlib.colors import ListedColormap
from sklearn.preprocessing import label_binarize
X_train_bin = label_binarize(X_train, classes=[-1, 1])
X_test_bin = label_binarize(X_test, classes=[-1, 1])
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00'])
plt.figure()
ax = plt.subplot(111)
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
np.arange(y_min, y_max, 0.02))
Z = model.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
ax.contourf(xx, yy, Z, alpha=0.8, cmap=cmap_light)
ax.scatter(X_train_bin[:, 0], X_train_bin[:, 1], c=y_train, cmap=cmap_bold, edgecolor='k')
ax.scatter(X_test_bin[:, 0], X_test_bin[:, 1], c=y_test, cmap=cmap_bold, alpha=0.6, edgecolor='k')
plt.show()
```
阅读全文