软支持向量机实现白葡萄酒质量数据分析并产生图像Python代码
时间: 2024-04-07 16:08:04 浏览: 120
支持向量机及Python代码实现.docx
以下是使用Python中的scikit-learn库实现软支持向量机(SVM)对白葡萄酒质量数据进行分析并生成图像的示例代码:
```python
# 导入所需的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report, confusion_matrix
# 读取数据集
data = pd.read_csv('winequality-white.csv', sep=';')
# 数据预处理
X = data.drop('quality', axis=1)
y = data['quality']
y = np.where(y<=5, 0, 1) # 将质量等级<=5的设为0,>5的设为1
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 训练SVM模型
svm = SVC(kernel='linear', C=0.1)
svm.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = svm.predict(X_test)
# 评估模型性能
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
# 绘制决策边界(只绘制前两个特征)
fig, ax = plt.subplots()
ax.scatter(X.iloc[:, 0], X.iloc[:, 1], c=y)
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
XX, YY = np.meshgrid(xx, yy)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = svm.decision_function(xy).reshape(XX.shape)
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,
linestyles=['--', '-', '--'])
ax.scatter(svm.support_vectors_[:, 0], svm.support_vectors_[:, 1], s=100,
linewidth=1, facecolors='none', edgecolors='k')
plt.show()
```
代码中使用线性核函数(kernel='linear')的SVM模型进行训练,C参数设为0.1。在测试集上进行预测,并使用混淆矩阵和分类报告来评估模型性能。最后,使用matplotlib库绘制决策边界图。
注意:为了简化代码,只绘制了前两个特征的决策边界。如果想要绘制所有特征的决策边界,可以在模型训练时将X_train和X_test的维度降至2维,如使用主成分分析(PCA)进行降维。
阅读全文