小强学AI之 - 3支持向量机(support vector machines SVMs)

前记

上一篇中,我们了解了朴素贝叶斯。现在知道了,朴素贝叶斯是监督学习的一种算法。
朴素贝叶斯特殊的一点在于,这种算法非常适合文本分类。在处理文本时,常见的做法是将每个单词看作一个特征,这样就会有大量的特征。朴素贝叶斯假设各个特征之间独立的,并且算法又相对简单,使得它在文本分类应用中发挥作用。

支持向量机SVMs(support vector machines)

另一种监督分类算法支持向量机SVMs(support vector machines)。

SVMs出现的时间不久,由Vadimir Vaplik(俄罗斯人)提出。
假设我们有一些两种不同类型的数据。支持向量机就是在两类数据之间寻找分隔线(通常称之为超平面)的一种算法。

概念
margin - maximizes distance to nearest point
区分两个类的分隔线与两个类的最近点的距离。最大化这个距离,就可以提高分类的稳健性。

SVM的内部原理也是最大限度的提升结果的稳健性。
SVM总是首先考虑分类正确性,然后才考虑对间隔最大化。

异常值响应
对于异常值,SVM原则是尽量找到决策面,并允许单个异常值在决策面的另一侧。
实际上 SVM对于异常值非常健壮。在某种程度上在找出最大间隔和忽略异常值之间做了均衡 。
我们也可以通过修改SVM的参数,决定了它如何检测新的异常值。

用法
同贝叶斯差不多.

  1. 导入
    from sklearn import SVM
  2. 创建分类器
    svm.SVC()
  3. 训练(拟合)
    fit
  4. 分类
    predict

函数原型:

class 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)[source]

各参数解释如下:

1. 核函数

SVM可以生成非常复杂的决策边界。
SVM是基于线性分隔的分类器,但由于SVM会创建新特征,使得SVM可以学习非线性决策面。
这些新特性就是借助创建SVM时传入的参数kernel来决定的。

定义

可以将低维度的输出空间(特征空间)映射到高维度空间的函数。我们称之为核函数。
通过使用这种映射,使得原来不可线性分离的内容变为可分离。
SVM将这些分类分离后,获取解并返回到原始空间。这样就得到了一个非线性分隔。
这是SVM非常重要的优点。通过在更高维度的空间使用SVM,可以很容易的找出最佳的线性分类器。或决策面。
在所有机器学习中,SVM是最主要的技巧之一。

参数kernel可选择如下几种:



当然,也可以自己定义。

C

C值越大,可以获得更多的训练点。也可以说,C越大,可以获得更复杂的决策边界。
到底是想要一条直线的决策边界,还是想要一条弯曲的边界以提高分类准确度,这就是机器学习中的艺术性所在(人们口中常说的调参狗?)。

咖玛

咖玛值有什么作用?我在linear方法下,测试了一些值(1.0, 100.0, 1000,0)没有发现明显区别。问题先保留。如果有消息再回来补充。

过拟合fitting

如果参数不合适,会导致本应很简单的决策面变得复杂。所以要避免过度拟合。
避免的方法就是指定SVM的参数,也就是调参(这就是很多人说的,机器学习的初级阶段就是调参)以防止过度拟合。

当然,也有自动检测的方法,后面会学到。

优缺点

SVM在复杂的但具有明显分隔边界的情况下,表现十分出色。
但在海量数据集中表现不太好。
因为当训练集变大时,训练时间是通常会成倍增长。
另外,噪音过多的情况下此方法效果也不好。所以如果要分类的类别之间重叠较为严重,那就需要找一些独立的特征,这时使用贝叶斯分类器会更有效。

总结

朴素贝叶斯速度通常比SVM速度快。适合文本等海量数据集。
但SVM在很多方面也很优秀,通常准确率也比贝叶斯高。
所以,选择合适的算法很重要。另外,根据选择的算法不同,还需要考虑相应的参数调整以及过拟合的可能性(特别是在你没有大量训练数据的情况下)。

调整参数的工作量很大,后面会介绍 GridCV(一种几乎能自动查找最优参数调整的优秀 sklearn 工具)。

调参!调参!调参!
我的电脑i5-4460 CPU @ 3.20GHz,训练安然邮件数据集7000多,要100秒,如果要手工调参的话,有点太耗时了。有没有更好的办法???换电脑?
望有经验的同学指点一下。谢谢了。

代码片段

### features_train and features_test are the features for the training
### and testing datasets, respectively
### labels_train and labels_test are the corresponding item labels
features_train, features_test, labels_train, labels_test = preprocess()


#########################################################
### your code goes here ###
#features_train = features_train[:len(features_train)/100] 
#labels_train = labels_train[:len(labels_train)/100] 

print("features lenghth:",len(features_test))

from sklearn.svm import SVC

clf=SVC(kernel="rbf", C=10000.0)

t0 = time()
clf.fit(features_train, labels_train)
print "training time:", round(time()-t0, 3), "s"

t0 = time()
pred=clf.predict(features_test)
print "predict time:", round(time()-t0, 3), "s"

from sklearn.metrics import accuracy_score
print(accuracy_score(pred, labels_test))
i=0
for label in pred:
    if label == 1:
        i = i+1
print("total chris:", i)

#########################################################

参考:
Support Vector Machines-kernel functions
sklearn.svm.SVC
机器学习入门 - Udacity

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容