摘要:SVM支持向量机:基础使用、处理非线性问题,低维映射到高维、核函数、推导
SVM
- 用于图像识别、人脸识别等复杂的分类情况
- 但是效果没有深度学习好,所以现在SVM的很多领域被深度学习取代了
1 | """ |
1 | 支持向量: |
svm处理非线性问题,低维映射到高维
- 如2维转3维,找到切平面,在投影到2维平面,可能是个圆或者椭圆的分界线
1 | """ |
投影到二维平面
核函数
svm推导过程
- 推导过程理解起来较为复杂,见其他机器学习教材或者相关资料
svm处理多分类问题
- 一般svm是处理二值分类问题的,如果处理多个类别的,使用下面三种方法
1 | model = svm.SVC(decision_function_shape='ovo') |
以下是先用pca降维后,再用svm进行分类的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38"""
# @Time : 2020/8/30
# @Author : Jimou Chen
"""
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import svm
from sklearn.metrics import classification_report
data = pd.read_csv('data/wine.csv')
y_data = data.iloc[:, 0]
x_data = data.iloc[:, 1:]
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data)
pca = PCA(n_components=2)
new_data = pca.fit_transform(x_data)
# 画出来看一下
plt.scatter(new_data[:, 0], new_data[:, 1], c=y_data)
plt.show()
# 建模预测,多分类的三种方法,有时候会警告,不影响
# model = svm.SVC(decision_function_shape='ovo')
model = svm.SVC(decision_function_shape='ovr')
# model = svm.SVC(probability=True)
model.fit(x_train, y_train)
prediction = model.predict(x_data)
print(model.score(x_test, y_test))
print(classification_report(y_data, prediction))
# 画出预测的
plt.scatter(new_data[:, 0], new_data[0:, 1], c=prediction)
plt.show()结果:
1
2
3
4
5
6
7
8
9
10
11
12
130.6888888888888889
precision recall f1-score support
1 0.89 0.85 0.87 59
2 0.70 0.72 0.71 71
3 0.49 0.50 0.49 48
accuracy 0.70 178
macro avg 0.69 0.69 0.69 178
weighted avg 0.71 0.70 0.70 178
Process finished with exit code 0原始的
预测的
改进
上面这个题用随机森林的效果会更好,无论降到2/3/5维,预测效果几乎完美model = RandomForestClassifier(n_estimators=100)