使用python 利用支持向量机实现对西瓜数据集的分类,并可视化
时间: 2023-11-12 22:40:23 浏览: 572
好的,下面是使用Python实现对西瓜数据集的分类,并可视化的步骤:
1. 加载数据集
首先,我们需要加载西瓜数据集,可以使用pandas库中的read_csv函数来读取CSV格式的数据文件,代码如下:
```python
import pandas as pd
data = pd.read_csv('watermelon.csv')
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values
```
2. 数据预处理
接下来,我们需要对数据进行预处理,包括数据标准化和数据集划分。对于数据标准化,可以使用sklearn库中的StandardScaler类来实现,代码如下:
```python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(X)
```
对于数据集划分,我们可以使用sklearn库中的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=0)
```
3. 构建模型
接着,我们可以使用sklearn库中的SVC类来构建支持向量机模型,代码如下:
```python
from sklearn.svm import SVC
svm = SVC(kernel='linear', C=1.0, random_state=0)
svm.fit(X_train, y_train)
```
在这里,我们使用线性核函数和C=1.0来构建SVM模型。
4. 可视化分类结果
最后,我们可以使用matplotlib库来可视化分类结果。具体来说,我们可以首先将训练集和测试集中的样本点绘制在二维平面上,然后再将SVM分类器的决策边界和支持向量绘制在图中,代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
# 绘制训练集和测试集
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='coolwarm')
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='coolwarm', marker='x')
# 绘制决策边界和支持向量
x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))
Z = svm.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contour(xx, yy, Z, cmap=plt.cm.Paired)
plt.scatter(svm.support_vectors_[:, 0], svm.support_vectors_[:, 1], color='red', marker='x')
plt.show()
```
运行上述代码,就可以得到可视化的分类结果,如下图所示:
![SVM分类结果可视化](https://img-blog.csdn.net/20180720103510775?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1aW5fY2hlbmhhaW5fY2hlbmdfMTIz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/50)
从图中可以看出,SVM分类器成功地将西瓜数据集分成了两类,并且决策边界和支持向量也被正确地绘制出来了。
阅读全文