svm多分类代码_监督学习——分类算法I
生活随笔
收集整理的這篇文章主要介紹了
svm多分类代码_监督学习——分类算法I
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文是監(jiān)督學習分類算法的第一部分,簡單介紹對樣本進行分類的算法,包括
clf2?=?LinearDiscriminantAnalysis(solver='lsqr',?shrinkage=None).fit(X,?y)
從代碼中可以看出也要確定判別分析的算法器solver,也可以通過shrinkage進行正則化。
linear_svc?=?svm.SVC(kernel='linear')
linear_svc?=?svm.SVC(kernel='rbf')
clf?=?SGDClassifier(loss="hinge",?penalty="l2",?max_iter=5).fit(X,?y)
可以通過參數(shù)設置具體的損失函數(shù)。SGDClassifier支持以下?lián)p失功能:
knn?=?KNeighborsClassifier(n_neighbors=1).fit(X_train,y_train)
效果如下:scikit-learn 中實現(xiàn)了三種樸素貝葉斯分類器:GaussianNB、BernoulliNB 和MultinomialNB。 GaussianNB 可應用于任意連續(xù)數(shù)據(jù); BernoulliNB 假定輸入數(shù)據(jù)為二分類數(shù)據(jù); MultinomialNB 假定輸入數(shù)據(jù)為計數(shù)數(shù)據(jù)(即每個特征代表某個對象的整數(shù)計數(shù),比如一個單詞在句子里出現(xiàn)的次數(shù))。 BernoulliNB 和MultinomialNB 主要用于文本數(shù)據(jù)分類。
from?sklearn.model_selection?import?train_test_split
from?sklearn.naive_bayes?import?GaussianNB
X,?y?=?load_iris(return_X_y=True)
X_train,?X_test,?y_train,?y_test?=?train_test_split(X,?y,?test_size=0.5,?random_state=0)
gnb?=?GaussianNB()
y_pred?=?gnb.fit(X_train,?y_train).predict(X_test)
- 判別分析(DA)
- 支持向量機(SVM)
- 隨機梯度下降分類(SGD)
- K近鄰分類(KNN)
- 樸素貝葉斯分類(NaiveBayes)
判別分析(Discriminant Analysis)
判別分析是基于條件概率的分類方法,可以分為線性判別分析(LDA)和二次型判別分析(QDA)。不同數(shù)據(jù)下的線性和二次型判別分析算法介紹
判別分析的基礎是貝葉斯公式,它根據(jù)已有數(shù)據(jù)中的先驗概率(可以通過樣本得到)推斷后驗概率: 對于訓練集,我們選擇令值較大的那個k作為預測結(jié)果。
算法求解
假設條件隨機變量服從多元正態(tài)分布,那么先驗概率應為其中,為標記為k的樣本數(shù)據(jù)均值,為標記為k的樣本協(xié)方差矩陣。
代入貝葉斯公式得到對數(shù)后驗概率:其中,是分子的對數(shù)常數(shù),是已知樣本中各分類的比例。
QDA算法就是得到能夠使對數(shù)后驗概率最大的k值。如果在QDA模型中假設特征之間相互獨立,即只包含對角線元素,那么QDA分類器等效于高斯樸素貝葉斯分類器naive_bayes.GaussianNB。LDA算法是QDA算法的特例,即假設所有類別的y都具有相同的協(xié)方差矩陣,那么對數(shù)后驗概率可以寫作其中為樣本與均值之間的馬氏距離。因此,LDA也可以認為是在先驗概率條件下采用馬氏距離進行分類的方法。上式也被稱為判別函數(shù)。算法實例
假設,,即只分兩類且概率相等時,判別函數(shù)得到對比兩式
- 當上式大于0時說明的概率大于,則應該屬于第1類,否則屬于第二類。
- 當上式等于0時可以得到?jīng)Q策邊界
- 同樣可以推導3個以上類別的決策邊界。
- QDA算法由于考慮了不同的協(xié)方差矩陣,可以得到二次型的決策邊界。
代碼
判別函數(shù)可以改寫為線性形式其中的擬合數(shù)據(jù)保存在屬性中,保存在屬性中。
from?sklearn.discriminant_analysis?import?LinearDiscriminantAnalysisclf2?=?LinearDiscriminantAnalysis(solver='lsqr',?shrinkage=None).fit(X,?y)
從代碼中可以看出也要確定判別分析的算法器solver,也可以通過shrinkage進行正則化。
支持向量機(Support Vector Machines)
支持向量機SVM在高維或無限維空間中構(gòu)建一個超平面或一組超平面,該超平面與任何類別的最近訓練數(shù)據(jù)點之間的距離最大(所謂的功能邊界),所以可以實現(xiàn)良好的分離,可用于分類、回歸或其他任務。因為通常邊界越大,分類器的泛化誤差越低。下圖顯示了線性可分離問題的決策函數(shù),在邊界上有三個樣本,稱為“支持向量”:支持向量機原理圖支持向量機也是既可以用來進行分類也可以進行回歸的模型,其分類器在Scikit-learn中包括SVC,NuSVC和LinearSVC等類。
算法
給定訓練集分為兩個類,研究目標是找到滿足優(yōu)化問題的解.SVC的目標是式子第二項也可以看做是正則化項,是控制參數(shù)。上面優(yōu)化問題的對偶問題是
其中是全1向量,是半正定階矩陣,且,其中是核(Kernel)。
通過調(diào)整核函數(shù)可以對不同的數(shù)據(jù)進行分類:核SVM算法估計鳶尾花數(shù)據(jù)NuSVC、LinearSVC和其他相關的支持向量機算法都采用了近似的目標函數(shù)。
代碼
參數(shù)存儲在屬性中,支持向量機數(shù)據(jù)保存在屬性中,參數(shù)保存在屬性中。from?sklearn.svm?import?SVClinear_svc?=?svm.SVC(kernel='linear')
linear_svc?=?svm.SVC(kernel='rbf')
RBF是Radial Basis Function的縮寫,可以進行非線性劃分,效果如下:
隨機梯度下降分類(SGD)
隨機梯度下降分類器近似等效于線性SVMfrom?sklearn.linear_model?import?SGDClassifierclf?=?SGDClassifier(loss="hinge",?penalty="l2",?max_iter=5).fit(X,?y)
可以通過參數(shù)設置具體的損失函數(shù)。SGDClassifier支持以下?lián)p失功能:
- :(軟邊距)線性支持向量機;
- :平滑的鉸鏈損失;
- :邏輯回歸, 等。
- :參數(shù)的標準正則項;
- :參數(shù)的標準正則項;
- :和的凸組合。
K近鄰分類(KNN)
KNN算法已經(jīng)介紹過了,這里給出用KNN分類器的代碼from?sklearn.neighbors?import?KNeighborsClassifierknn?=?KNeighborsClassifier(n_neighbors=1).fit(X_train,y_train)
效果如下:
樸素貝葉斯分類(NaiveBayes)
本文開頭指出,QDA在特征相互獨立的情況下等價于高斯NaiveBayes,這里的“Naive(樸素)”指的就是這種特征數(shù)據(jù)相互獨立的假設。算法
給定樣本屬于的類別數(shù)據(jù),由貝葉斯公式可以得到關系:在“Naive”條件下,上式可以簡化為
由于是根據(jù)樣本計算的常數(shù),所以所以
在假設了之后就可以進行估計。
類別和特點
代碼
from?sklearn.datasets?import?load_irisfrom?sklearn.model_selection?import?train_test_split
from?sklearn.naive_bayes?import?GaussianNB
X,?y?=?load_iris(return_X_y=True)
X_train,?X_test,?y_train,?y_test?=?train_test_split(X,?y,?test_size=0.5,?random_state=0)
gnb?=?GaussianNB()
y_pred?=?gnb.fit(X_train,?y_train).predict(X_test)
總結(jié)
以上是生活随笔為你收集整理的svm多分类代码_监督学习——分类算法I的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 618来袭:性能拉满 8000元就能入手
- 下一篇: python与tensorflow的关系