1.簡介:
(1)無監(jiān)督異常值檢測
(2)解決非平衡樣本分類
2.函數(shù)定義
class?sklearn.svm.OneClassSVM(kernel=’rbf’,?degree=3,?gamma=’auto’,?coef0=0.0,?tol=0.001,?nu=0.5,?shrinking=True,?cache_size=200,?verbose=False,?max_iter=-1,?random_state=None)
3.參數(shù)含義:
kernel:
4.OneClass與2分類代乃,多分類的區(qū)別
? ? 典型的2類問題:識別郵件是否是垃圾郵件,一類“是”,另一類“不是”
? ? 典型的多類問題:人臉識別,每個人對應(yīng)的臉就是一個類锰瘸,然后把待識別的臉分到對應(yīng)的類中去
? ? 而OneClassClassification,它只有一個類贡耽,屬于該類就返回結(jié)果“是”鲁捏,不屬于就返回結(jié)果“不是”,乍一聽感覺與2分類沒什么區(qū)別硼端,其實他們的思想有很大差異并淋。在2分類問題中,訓(xùn)練集中就由兩個類的樣本組成珍昨,訓(xùn)練出的模型是一個2分類模型县耽;而OneClassClassification中的訓(xùn)練樣本只有一類,因此訓(xùn)練出的分類器將不屬于該類的所有其他樣本判別為“不是”即可镣典,而不是由于屬于另一類才返回的“不是”結(jié)果兔毙。
? ? 現(xiàn)實場景中的OneClassClassification例子:現(xiàn)在有一堆某商品的歷史銷售數(shù)據(jù),記錄著買該產(chǎn)品的用戶信息兄春,此外還有一些沒有購買過該產(chǎn)品的用戶信息澎剥,想通過2分類來預(yù)測他們是否會買該產(chǎn)品,也就是弄兩個類赶舆,一類是“買”哑姚,一類是“不買”祭饭。當(dāng)我們要開始訓(xùn)練2分類器的時候問題來了,一般來說沒買的用戶數(shù)會遠(yuǎn)遠(yuǎn)大于已經(jīng)買了的用戶數(shù)叙量,當(dāng)將數(shù)量不均衡的正負(fù)樣本投入訓(xùn)練時倡蝙,訓(xùn)練出的分類器會有較大的bias(偏向值)。因此宛乃,這時可以使用OneCLassClassification方法來解決悠咱,即訓(xùn)練集中只有已經(jīng)買過該產(chǎn)品的用戶數(shù)據(jù)蒸辆,在識別一個新用戶是否會買該產(chǎn)品時征炼,識別結(jié)果就是“會”或者“不會”。
5.OneClassCLassification的具體實現(xiàn)
多類Classification方法有很多躬贡,比如SVM尋找一個最優(yōu)超平面把正負(fù)樣本分開谆奥,總之都涉及到不止一個類的樣本,相當(dāng)于告訴算法“這種東西長什么樣拂玻,那種東西長什么樣”酸些。于是訓(xùn)練出一個模型能夠區(qū)分這些東西。
問題在于檐蚜,OneCLassClassification只有一個類魄懂,該怎么辦?
介紹一個方法:SVDD(support vector domain description)闯第,中文翻譯為“支持向量域描述”
其基本思想是:既然只有一個class市栗,那么我就訓(xùn)練出一個最小的超球面(超球面是指3維以上的空間中的球面,對應(yīng)的2維空間中就是曲線咳短,3維空間中就是球面)填帽,將這堆數(shù)據(jù)全部“包起來”,識別一個新的數(shù)據(jù)點時咙好,如果這個數(shù)據(jù)點落在超球面內(nèi)篡腌,就屬于這個類,否則不是勾效。
下面是在2維空間(實際情況中嘹悼,如果提取的特征多,維數(shù)就高)中的例子层宫,
更多原理公式推導(dǎo)杨伙,詳見 http://blog.sina.com.cn/s/blog_4ff49c7e0102vlbv.html