SVM算法的参数

it2026-02-09  0

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):预测为正样本,实际也为正样本的特征数;将正类预测为正类数,真实为0,预测也为0。FN(false negatives):预测为负样本,实际为正样本的特征数;将正类预测为负类数,真实为0,预测为1。FP(Flase positives):预测为正样本,实际为负样本的特征数;将负类预测为正类数, 真实为1,预测为0。TN(true negatives):预测为负样本,实际也为负样本的特征数;将负类预测为负类数,真实为1,预测也为1。

2. 精确率(precision)

P = TP/(TP+FP)

3. 召回率(recall)

R = TP/(TP+FN)

4. 准确率

accuracy = (TP+TN)/(TP+FN+FP+TN)

5.  特异性(specificity)

S = TN/(FP+TN)

6. 用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))

训练集与测试集

1. from random import shuffle   #引入随机函数

shuffle(data)  #随机打乱数据

2. data = data.as_matrix()

读取excel数据训练模型时,需要将表格转换成数组,as_matrix()可将dataframe数据转换成数组。

替代函数:dataframe.values获取的是dataframe中的数据,形式为数组array。

data_train = data[:int(0.8*len(data)),:]   #选取前80%为训练数据

data_test  = data[int(0.8*len(data)):,:]   #选取后20%为测试数据

 

混淆矩阵

又称为可能性表格或者错误矩阵。一种特定矩阵用来呈现算法性能的可视化效果,通常是监督学习,非监督学习通常用匹配矩阵(matching matrix)。每一列代表预测值,每一行代表的是实际的类别。可以非常容易的表明多个类别是否有混淆(也就是一个class被预测成另一个class)。所有正确的预测结果都在对角线上。如上图所示,class 0类共有59个实例,其中3个错分为class 3,1个错分为class 7,5个错分为class 9。所以说 class 0 和class 9可能存在混淆。

混淆表格

是由FP,FN,TP,TN组成的两行两列的表格。它允许我们做出更多的分析,而不仅仅是局限在正确率。准确率对于分类器的性能来说,并不是一个好的衡量指标,因为如果数据集不平衡(每一类的数据样本数量相差太大),很可能出现误导性的结果。

 

python代码实现混淆矩阵

 

 

 

 

 

 

 

 

 

最新回复(0)