支持向量机算法实现分类预测的python完整代码
时间: 2023-07-05 12:15:45 浏览: 48
好的,以下是使用Python实现支持向量机算法进行分类预测的完整代码:
``` python
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
import xlrd
# 加载数据集并进行预处理
def load_data(filename):
data = pd.read_excel(filename)
data.dropna(inplace=True)
X = data.drop('label', axis=1)
X = (X - X.mean()) / X.std()
y = data['label']
return X, y
# 训练SVM分类器
def train_svm(X_train, y_train, kernel='rbf', C=1, gamma=0.1):
clf = SVC(kernel=kernel, C=C, gamma=gamma)
clf.fit(X_train, y_train)
return clf
# 预测新的excel文件并输出预测结果excel、精度和混淆矩阵图
def predict_svm(clf, X_test, y_test, filename):
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)
# 输出预测结果excel
data = pd.read_excel(filename)
data['predicted_label'] = pd.Series(y_pred, index=data.index)
data.to_excel('predicted_result.xlsx', index=False)
# 绘制混淆矩阵图
plt.imshow(cm, cmap=plt.cm.Blues)
plt.title('Confusion matrix')
plt.colorbar()
tick_marks = np.arange(len(set(y_test)))
plt.xticks(tick_marks, sorted(set(y_test)), rotation=45)
plt.yticks(tick_marks, sorted(set(y_test)))
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.show()
return accuracy
# 加载训练数据集
X_train, y_train = load_data('train_data.xlsx')
# 训练SVM分类器
clf = train_svm(X_train, y_train)
# 加载测试数据集
X_test, y_test = load_data('test_data.xlsx')
# 预测新的excel文件
accuracy = predict_svm(clf, X_test, y_test, 'test_data.xlsx')
# 输出精度
print('Accuracy:', accuracy)
```
需要注意的是,以上代码中需要替换的部分包括训练数据集、测试数据集和预测数据集的文件名。希望这个完整代码能帮到您!如果有任何问题,请随时联系我。