SVM算法的参数
1. c : float参数,默认值为1.0
-
错误项的惩罚系数。
-
c越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。
-
相反,减小c的话,允许训练样本中有一些误分类错误样本,泛化能力强。
-
对于训练样本带有噪声的情况,一般采用减小c的方法,把训练样本集中错误分类的样本作为噪声2.
2. kernel : str参数,默认为‘rbf’
算法中提供的核函数类型,可选参数有:
- linear:线性核函数
- poly:多项式核函数
- rbf:径像核函数/高斯核
- sigmod:sigmod核函数
- precomputed:核矩阵。表示自己提前计算好核函数矩阵,算法内部就不再用核函数去计算核矩阵,而是直接用我们给的矩阵。
除了上面限定的核函数外,还可以给出自己定义的核函数,内部就是用自己定义的核函数来计算核矩阵。
3. degree : int型,默认为3
- 这个参数只对多项式核函数有用,是指多项式核函数的阶数n。如果给的核函数参数是其他核函数,则会自动忽略该参数。
4. gamma :float参数,默认为auto
- 核函数系数,只对rbf,poly,sigmod有效。
- 如果gamma为auto,代表其值为样本特征数的倒数,即1/n_features
5. coef0 : float参数,默认值为0
- 核函数中的独立项,对poly和sigmod核函数有用,是指其中的参数c。
6. probability : bool参数,默认为False
- 是否启用概率估计。这必须在调用fit之前启用,会使fit()方法速度变慢。
7. shrinking : bool参数,默认为Ture
- 是否采用启发式收缩方式。
8. tol :float参数,默认为1e^-3
- SVM停止训练的误差精度
9. cache_size : float参数,默认为200
- 指定训练所需要的的内存,以MB为单位,默认为200MB。
10. class_weight : 字典类型或者是balance字符串,默认为None
- 给每个类别分别设置不同的惩罚参数c,如果没有给,所有类别都是默认值。
- 如果给定参数blance,则使用y的值自动调整与输入数据中的类的频率成反比的比重。
11. verbose : bool参数,默认为false
- 是否启用详细输出。此设置利用libsvm中的每个进程运行时设置,如果启用,可能无法在多线程上下文中使用,一般情况下设置为False。
12. max_iter : int参数,默认为-1
- 最大迭代次数,如果为-1表示不受限制。
13. random_state :int参数,默认为None
- 伪随机数发生器的种子,在混洗数据时用于概率估计。
14. fit()方法 :
- 用于训练svm,具体参数已经在定义svc对象时给出,这时候只需要给出数据集x和x对应的标签y。
15. predict()方法 :
基于以上的训练,对预测样本T进行类别预测,因此只需要接收一个测试集T,该函数返回一个数组表示各测试样本的类别。
16. 属性有哪些
- svc.n_support_:各类各有多少个支持向量
- svc.support_:各类的支持向量在训练样本中的索引
- svc.support_vectors_:各类所有的支持向量。
SVM算法中各标签对应精确率、召回率、f1score
1. TP FP TN FN
- TP(ture positives):预测为正样本,实际也为正样本的特征数;
- FP(Flase positives):预测为正样本,实际为负样本的特征数;
- TN(true negatives):预测为负样本,实际也为负样本的特征数;
- FN(false negatives):预测为负样本,实际为正样本的特征数。
2. 精确率(precision)
- P = TP/(TP+FP)
3. 召回率(recall)
- R = TP/(TP+FN)
4. 特异性(specificity)
- S = TN/(FP+TN)
5. 用F1值综合评估精确率和召回率
如何画出超平面
1. 计算分割超平面
b=clf_svc.intercept_
w=clf_svc.coef_
2. 查看决策函数:decision_function中每一列的值代表距离各类别的距离
print('decision_function:\n', clf_svc.decision_function(df_x))
3. predict()函数:返回一个数组表示各测试样本的类别
print('\npredict:\n', clf_svc.predict(df_x))