关于SVM的一点思考
-
抛出问题
由于对单个传感器采集到的数据进行特征提取并进行分类时候,通常分类结果是不太好的;或者对某一旋转机械加载多个传感器(在多个维度上)进行数据采集。那么这个时候就引用了DS证据理论。而在使用DS证据理论过程中,需要构建识别框架中N个独立的基本概率分配。这里详细的看下图的解释吧
-
相关知识
由公式(4-4)可知,基本概率分配BPA之和为1,那么这个在监督学习中是怎么实现了呢,我们先来看一下SVM的相关参数。
from sklearn import svm
sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None,random_state=None)
我们接下来看主要的几个参数(这也是我们需要掌握的)
- C: 惩罚参数,默认值为1.0 (C值越小,对误分类的惩罚减少,允许容错,将他们变成噪声点,泛化能力较强)
- probability: 是否采用概率估计,默认为False 。 如果决定是否启用概率估计,需要在训练fit()模型时加上这个参数,之后才能用相关的参数:predict_proba和predict_log_proba
- decision_function_shape:‘ovo’, ‘ovr’ or None, default=None3
- 示例展示
这里使用的是Scikits-learn内部集成的手写体数字图片数据集
## 支持向量机SVM
# Scikit-learn内部集成的手写体数字图片数据集
from sklearn.datasets import load_digits
digits = load_digits()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size = 0.25, random_state = 33)
#数据标准化
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)
# 使用SVM进行训练
from sklearn import svm
clf_svm = svm.SVC(C=0.8, #惩罚参数
decision_function_shape='ovo', #
probability = True) #是否采用概率估计,默认是None
clf_svm.fit(X_train, y_train)
probability_svm = clf_svm.predict_proba(X_test)
print(probability_svm)
看到上面的结果,每行的总和为1