SVM算法的参数

1. c : float参数,默认值为1.0

  • 错误项的惩罚系数。

  • c越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。

  • 相反,减小c的话,允许训练样本中有一些误分类错误样本,泛化能力强。

  • 对于训练样本带有噪声的情况,一般采用减小c的方法,把训练样本集中错误分类的样本作为噪声2.

2. kernel : str参数,默认为‘rbf’

算法中提供的核函数类型,可选参数有:

  • linear:线性核函数
  • poly:多项式核函数
  • rbf:径像核函数/高斯核
  • sigmod:sigmod核函数
  • precomputed:核矩阵。表示自己提前计算好核函数矩阵,算法内部就不再用核函数去计算核矩阵,而是直接用我们给的矩阵。

SVM算法的参数_第1张图片

除了上面限定的核函数外,还可以给出自己定义的核函数,内部就是用自己定义的核函数来计算核矩阵。

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值综合评估精确率和召回率

SVM算法的参数_第2张图片

SVM算法的参数_第3张图片

 

 


如何画出超平面

1. 计算分割超平面

b=clf_svc.intercept_

w=clf_svc.coef_

2. 查看决策函数:decision_function中每一列的值代表距离各类别的距离

print('decision_function:\n', clf_svc.decision_function(df_x))

SVM算法的参数_第4张图片

3. predict()函数:返回一个数组表示各测试样本的类别

print('\npredict:\n', clf_svc.predict(df_x))

SVM算法的参数_第5张图片

训练集与测试集

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

shuffle(data)  #随机打乱数据

SVM算法的参数_第6张图片

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%为测试数据

 

混淆矩阵

SVM算法的参数_第7张图片

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

SVM算法的参数_第8张图片

混淆表格

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

SVM算法的参数_第9张图片

 

python代码实现混淆矩阵

SVM算法的参数_第10张图片

SVM算法的参数_第11张图片

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(python,算法)