第一部分 整體思路
下面是這次算法比較進行對比的算法
1、線性回歸算法(運用了LinearRegression函數)
2普监、邏輯回歸算法(運用了logisticRegression函數)
3、決策樹算法(運用了DecisionTreeClassifier以及GradientBoostingClassifier函數)
4、神經網絡算法(運用了MLPClassifier函數)
5凯正、支持向量機算法(運用了SVC函數)
我的比較思路是對比各種算法的運行時間長短毙玻,訓練集、測試集準度廊散,ROC曲線圖像以及對比算法各自的優(yōu)缺點桑滩。
第二部分 代碼實現
一、算法步驟
第一步:從python庫sklearn中調用內置的乳腺癌數據集允睹、劃分訓練集以及測試集的工具以及實現算法的函數(sklearn中都有)运准。
第二步:將乳腺癌數據集劃分為訓練集以及測試集。
第三步:使用各算法對應的函數缭受,并且在函數后的括號內調節(jié)參數胁澳。
第四步:打印準確率的結果,由于我要進行程序運行時間的比較米者,最后還打印了出了算法運行時間韭畸。
二、ROC曲線python代碼實現
第一步:導入畫圖工具(matplotlib.pyplot)以及需要的以及計算roc和auc的函數(roc_curve, auc)蔓搞。
第二步:執(zhí)行算法實現代碼胰丁,其中y_test為測試集的結果,scores為模型預測的測試集得分(注意:通過predict(x_test)計算scores的值)喂分,用在roc_curve()函數中锦庸。
第三步:計算真正例率和假正例率以及auc值,fpr,tpr,thresholds 分別為假正率蒲祈、真正率和閾值甘萧。(應該是不同閾值下的真正率和假正率)。
第四步:畫圖的參數調節(jié)讳嘱,為保持可比性幔嗦,所有算法在繪制roc曲線時都是使用一樣的參數。
第五步:顯示繪制出的ROC曲線以及AUC值沥潭。
第三部分 算法對比
一邀泉、線性回歸算法(LinearRegression)
①?算法思想
什么是線性回歸:
線性:兩個變量之間的關系是一次函數關系的——圖象是直線,叫做線性钝鸽。
非線性:兩個變量之間的關系不是一次函數關系的——圖象不是直線汇恤,叫做非線性。
回歸:人們在測量事物的時候因為客觀條件所限拔恰,求得的都是測量值因谎,而不是事物真實的值,為了能夠得到真實值颜懊,無限次的進行測量财岔,最后通過這些測量數據計算回歸到真實值风皿。
②?算法展示
參數介紹:
fit_intercept:是否有截據,如果沒有則直線過原點匠璧。
normalize:是否將數據歸一化桐款。
copy_X:默認為True,當為True時夷恍,X會被copied,否則X將會被覆寫魔眨。
n_jobs:默認值為1。計算時使用的核數酿雪。
(由于調參與不調參的結果是一致的遏暴,所以這里的LinearRegression函數沒有進行調參)
下面是代碼以及代碼運行的輸出結果,細節(jié)與前面所述的大體算法步奏基本一致:
從運行結果來看訓練集的準度為0.783指黎,而測試集準度只有0.725朋凉,總體的準度是偏低的,也并沒有達到0.9以上袋励。
運行時間是0.005秒左右侥啤,時間是非常短的。
下面是利用繪制roc曲線的代碼繪制出的roc曲線:
另外下面是其AUC值:
③?算法優(yōu)缺點
優(yōu)點:
(1)思想簡單茬故,實現容易盖灸。建模迅速,對于小數據量磺芭、簡單的關系很有效赁炎;
(2)是許多強大的非線性模型的基礎。
(3)線性回歸模型十分容易理解钾腺,結果具有很好的可解釋性徙垫,有利于決策分析。
(4)蘊含機器學習中的很多重要思想放棒。
(5)能解決回歸問題姻报。
缺點:
(1)對于非線性數據或者數據特征間具有相關性多項式回歸難以建模.
(2)難以很好地表達高度復雜的數據。
二间螟、邏輯回歸算法(LogisticRegression)
①?算法思想
邏輯回歸算法:雖然名字中帶有回歸兩個字吴旋,但它卻不是回歸算法,它是一個經典的二分類算法厢破。
回歸與分類的區(qū)別:
回歸:可以得到一個準確值或一個區(qū)間值荣瑟,比如房屋價格預測,NBA比賽得分等摩泪。
分類:預測結果是一個分類值笆焰,yes or no,0或1见坑,好或壞嚷掠,輸或贏等等捏检,比如預測猛龍隊能否獲得2019NBA總冠軍,預測小明同學今年能否考上大學等等不皆,結果都只有兩個未檩。
邏輯回歸算法是所有機器學習算法中最簡單的算法,但簡單不一定代表效果不好粟焊。我們在處理機器學習問題時,優(yōu)先采用簡單算法孙蒙,并對其參數進行優(yōu)化项棠。如果不能達到你的目的,我們再選擇更加復雜的算法挎峦,比如支持向量機香追,神經網絡等等。
邏輯回歸是用來處理分類問題的坦胶,其分類邊界不一定都是線性的透典,也可以是非線性的。如下圖顿苇,一條非線性的決策邊界將已有的數據點分成了兩類峭咒。
②?算法展示
下面是代碼,細節(jié)與前面所述的大體算法步奏基本一致:
參數介紹:
下面的算法代碼中纪岁,主要只調了參數"C=100"以及"solver='liblinear'"凑队,因為處理的乳腺癌數據集是二分類問題,因此使用了"solver='liblinear'"幔翰;
另外參數"C"共進行了三次調節(jié)漩氨,第一次"C=1.0",代碼運行的輸出結果如下圖:
第二次"C=100"遗增,結果如下圖:
第三次"C=0.01"叫惊,結果如下圖:
第一個訓練集是0.955,測試集是0.958好像很接近做修,但由于訓練集和測試集的性能非常接近霍狰,所以模型很可能是欠擬合的。接下來第二個我們嘗試增大?C?來擬合一個更靈活的模型缓待,而第三個則是降低 C 蚓耽,發(fā)現調第二次和第三次的時候,第二次提高了旋炒,第三次開始降低了步悠。特別是第三次,測試集開始比第二次降低了瘫镇《κ蓿可見第二個是三個數值之中最佳的參數設置答姥。
參數設置為"C=100"時的輸出結果是:訓練集: 0.971831,測試集: 0.965035谚咬,運行時間:0.005984秒鹦付,總體上相比于線性回歸算法有顯著的提高,盡管運行時間稍微必線性回歸長择卦,但是差別甚微敲长。
下面是利用繪制roc曲線的代碼繪制出的roc曲線:
另外下面是其AUC值:
可見其AUC值比線性回歸的小。
③?算法優(yōu)缺點
優(yōu)點:
(1)便于理解和實現秉继,可以觀測樣本的概率分數
(2)訓練速度快
(3)由于經過了sigmoid函數的映射祈噪,對數據中小噪聲的魯棒性較好
(4)不受多重共線性的影響(可通過正則化進行消除)
缺點:
(1)容易欠擬合
(2)特征空間很大時效果不好
(3)由于sigmoid函數的特性,接近0/1的兩側概率變化較平緩尚辑,中間概率敏感辑鲤,波動較大;導致很多區(qū)間特征變量的變化對目標概率的影響沒有區(qū)分度杠茬,無法確定臨界值月褥。
第三部分 決策樹算法(DecisionTreeClassifier以及 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? GradientBoostingClassifier函數)
①?算法思想
決策樹(decision tree)是一個樹結構(可以是二叉樹或非二叉樹)。
其每個非葉節(jié)點表示一個特征屬性上的測試瓢喉,每個分支代表這個特征屬性在某個值域上的輸出宁赤,而每個葉節(jié)點存放一個類別。
使用決策樹進行決策的過程就是從根節(jié)點開始灯荧,測試待分類項中相應的特征屬性啊犬,并按照其值選擇輸出分支载庭,直到到達葉子節(jié)點挣惰,將葉子節(jié)點存放的類別作為決策結果农曲。
②?算法展示
下面是使用DecisionTreeClassifier函數的代碼,細節(jié)與前面所述的大體算法步奏基本一致:
如果我們不限制決策樹的深度厉斟,它的深度和復雜度都可以變得特別大挚躯。因此,未剪枝的樹容易過擬合擦秽,對新數據的泛化性能不佳÷肜螅現在我們將預剪枝應用在決策樹上,這可以在完美擬合訓練數據之前阻止樹的展開感挥。一種選擇是在到達一定深度后停止樹的展開缩搅。這里我們設置?max_depth=4,這意味著只可以連續(xù)問 4 個問題触幼。結論:限制樹的深度可以減少過擬合硼瓣。這會降低訓練集的精度,但可以提高測試集的精度。(此處參考了老師題目為”過擬合和欠擬合的文章)
下面是使用GradientBoostingClassifier函數的代碼:
使用GradientBoostingClassifier函數的模型簡稱為GBDT
GBDT堂鲤,通過合并多個決策樹來構建一個更為強大的模型亿傅。雖然名字中含有“回歸”,但這個模型既可以用于回歸也可以用于分類瘟栖。梯度提升采用連續(xù)的方式構造樹葵擎,每棵樹都試圖糾正前一棵樹的錯誤。默認情況下半哟,梯度提升回歸樹中沒有隨機化酬滤,而是用到了強預剪枝。梯度提升樹通常使用深度很性⒄恰(1 到 5 之間)的樹敏晤,這樣模型占用的內存更少,預測速度也更快缅茉。
上面GBDT的例子中默認使用 100 棵樹,最大深度是 3男摧,學習率為 0.1:由于訓練集精度達到 100%蔬墩,所以很可能存在過擬合。為了降低過擬合耗拓,我們可以限制最大深度來加強預剪枝max_depth拇颅,也可以降低學習率learning_rate。降低模型復雜度的兩種方法都降低了訓練集精度乔询,這和預期相同樟插。在這個例子中,參數設置"max_depth=1"顯著提升了模型性能竿刁,"learning_rate=0.1"僅稍稍提高了泛化性能黄锤。(以上參考了老師題目為”過擬合和欠擬合的文章)
上面代碼中默認使用的是100棵樹,而我使用了200棵樹即"n_estimators=200",這是經過四個實驗后確定的:
第一個設置默認值n_estimators=100:
第二個設置n_estimators=200:
第三個設置n_estimators=300:
第四個設置n_estimators=250:
從上面實驗結果來看設置值300的結果要比100的結果要高食拜,但是訓練集的準度為1鸵熟,可見出現了過擬合,而設置值為200以及250的結果則比前兩者更優(yōu)负甸,同為0.99/0.96流强,略微減輕了過擬合的現象,由于設置值為200的程序運行時間比250的運行時間短呻待,鑒于兩者結果一樣打月,所以最后選擇了參數設置為"n_estimators=200"。
上述兩個函數參數設置完畢蚕捉,最后的結果如下奏篙,
使用DecisionTreeClassifier函數:
使用GradientBoostingClassifier函數:
兩者相比于邏輯回歸算法的準度都略微有所提高,但存在稍微的過擬合現象鱼冀,運行時間又有所差別报破,使用DecisionTreeClassifier函數運行時間較短悠就,使用GradientBoostingClassifier函數運行時間較長。
下面是兩者的ROC曲線及AUC值充易,
使用DecisionTreeClassifier函數:
使用GradientBoostingClassifier函數:
兩者對比可見使用GradientBoostingClassifier函數的算法性能是比使用DecisionTreeClassifier函數的算法的性能是要好的梗脾。
③?算法優(yōu)缺點
優(yōu)點:
(1)速度快: 計算量相對較小, 且容易轉化成分類規(guī)則. 只要沿著樹根向下一直走到葉, 沿途的分裂條件就能夠唯一確定一條分類的謂詞.
(2)準確性高: 挖掘出來的分類規(guī)則準確性高, 便于理解, 決策樹可以清晰的顯示哪些字段比較重要, 即可以生成可以理解的規(guī)則.
(3)可以處理連續(xù)和種類字段
(4)不需要任何領域知識和參數假設
(5)適合高維數據
缺點:
(1)對于各類別樣本數量不一致的數據, 信息增益偏向于那些更多數值的特征
(2)容易過擬合
(3)忽略屬性之間的相關性
四 神經網絡算法(MLPClassifier函數)
①?算法思想
MLPClassifier是一個監(jiān)督學習算法,下圖是只有1個隱藏層的MLP模型 盹靴,左側是輸入層炸茧,右側是輸出層。
上圖的整體結構可以簡單的理解為下圖所示:
MLP又名多層感知機稿静,也叫人工神經網絡(ANN梭冠,Artificial Neural Network),除了輸入輸出層改备,它中間可以有多個隱藏層控漠,如果沒有隱藏層即可解決線性可劃分的數據問題。最簡單的MLP模型只包含一個隱藏層悬钳,即三層的結構盐捷,如上圖。
從上圖可以看到默勾,多層感知機的層與層之間是全連接的(全連接的意思就是:上一層的任何一個神經元與下一層的所有神經元都有連接)碉渡。多層感知機最底層是輸入層,中間是隱藏層母剥,最后是輸出層滞诺。
②?算法展示
下面是使用MLPClassifier函數的代碼,其中的乳腺癌數據使用了sklearn.preprocessing包中的 StandardScaler工具進行了數據縮放(MLP 的精度相當好环疼,但沒有其他模型好习霹。與較早的 SVC 例子相同,原因可能在于數據的縮放炫隶。神經網絡也要求所有輸入特征的變化范圍相似序愚,最理想的情況是均值為 0、方差為 1等限。我們必須對數據進行縮放以滿足這些要求)爸吮,如圖#數據縮放:
參數說明(有選擇性地進行講解):
1. hidden_layer_sizes :例如hidden_layer_sizes=(50, 50),表示有兩層隱藏層望门,第一層隱藏層有50個神經元形娇,第二層也有50個神經元。?
2. activation :激活函數,{‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, 默認relu?
- identity:f(x) = x?
- logistic:其實就是sigmod,f(x) = 1 / (1 + exp(-x)).?
- tanh:f(x) = tanh(x).?
- relu:f(x) = max(0, x)?
3. solver: {‘lbfgs’, ‘sgd’, ‘adam’}, 默認adam筹误,用來優(yōu)化權重?
- lbfgs:quasi-Newton方法的優(yōu)化器?
- sgd:隨機梯度下降?
- adam: Kingma, Diederik, and Jimmy Ba提出的機遇隨機梯度的優(yōu)化器?
注意:默認solver ‘adam’在相對較大的數據集上效果比較好(幾千個樣本或者更多)桐早,對小數據集來說,lbfgs收斂更快效果也更好。?
4. alpha :float,可選的哄酝,默認0.0001,正則化項參數
5. max_iter: int友存,可選,默認200陶衅,最大迭代次數屡立。?
6. random_state:int 或RandomState,可選搀军,默認None膨俐,隨機數生成器的狀態(tài)或種子。?
參數設置:增加迭代次數加到了1000(max_iter=1000)罩句,但僅提高了訓練集性能焚刺,但沒有提高泛化性能。不過模型的表現相當不錯门烂。由于訓練性能和測試性能之間仍有一些差距乳愉,所以我們可以嘗試降低模型復雜度來得到更好的泛化性能。這里我們選擇增大?alpha?參數(變化范圍相當大屯远,從?0.0001?到?1)(alpha=1)匾委,以此向權重添加更強的正則化。
運行結果如下圖:
這是目前為止性能最好的模型氓润,盡管運行時間比較之前的算法較長。
下面是他的ROC曲線:
可見其性能也是十分優(yōu)秀的薯鳍。
③?算法優(yōu)缺點
優(yōu)點:
(1)具有自學習功能咖气。例如實現圖像識別時,只在先把許多不同的圖像樣板和對應的應識別的結果輸入人工神經網絡挖滤,網絡就會通過自學習功能崩溪,慢慢學會識別類似的圖像。
自學習功能對于預測有特別重要的意義斩松。預期未來的人工神經網絡計算機將為人類提供經濟預測伶唯、市場預測、效益預測惧盹,其應用前途是很遠大的乳幸。
(2)具有聯想存儲功能。用人工神經網絡的反饋網絡就可以實現這種聯想钧椰。
(3)具有高速尋找優(yōu)化解的能力粹断。尋找一個復雜問題的優(yōu)化解,往往需要很大的計算量嫡霞,利用一個針對某問題而設計的反饋型人工神經網絡瓶埋,發(fā)揮計算機的高速運算能力,可能很快找到優(yōu)化解。
(4)能夠獲取大量數據中包含的信息养筒,并構建無比復雜的模型曾撤。
缺點:
(1)最嚴重的問題是沒能力來解釋自己的推理過程和推理依據。
(2)神經網絡——特別是功能強大的大型神經網絡——通常需要很長的訓練時間晕粪。
(3)它還需要仔細地預處理數據挤悉,正如我們這里所看到的。
(4)不能向用戶提出必要的詢問兵多,而且當數據不充分的時候尖啡,神經網絡就無法進行工作。
(5)把一切問題的特征都變?yōu)閿底质1欤岩磺型评矶甲優(yōu)?a target="_blank">數值計算衅斩,其結果勢必是丟失信息。
五 支持向量機算法(SVC函數)
①?算法介紹
支持向量機英文Support Vector Machine怠褐,簡稱SVM畏梆。SVM本來是一種線性分類和非線性分類都支持的二元分類算法,但經過演變奈懒,現在也支持多分類問題奠涌,也能應用到了回歸問題。
②?算法展示
下面是使用SVC函數的代碼磷杏,其中的乳腺癌數據使用了sklearn.preprocessing包中的 MinMaxScaler工具進行了數據的歸一化溜畅,以使數據的所有特征縮放到 0 和 1 之間,如圖#數據歸一化:
參數介紹:
SVC的重要參數kernel(核函數)极祸,作為SVC類最重要的參數之一慈格,“kernel"在sklearn中可選以下幾種選項:
可以看出,除了選項"linear"之外遥金,其他核函數都可以處理非線性問題浴捆。多項式核函數有次數d,當d為1的時候它就是再處理線性問題稿械,當d為更高次項的時候它就是在處理非線性問題选泻。
在上述代碼中,我遍歷了不同的核函數結果如下:
可見在數據歸一化后性能最好的還是使用'poly'核函數美莫。
另外我未進行歸一化處理時页眯,運行poly核函數,其運行時間十分長厢呵,但在把degree參數調整為1餐茵,多項式核函數的運行速度立刻加快了,并且精度也提升到了接近線性核函數的水平述吸。在數據歸一化后忿族,其結果在把degree參數調整為1后也略有提升锣笨,因此保留了這個參數調節(jié)。
另一個使用到的參數C:
在實際使用中道批,C和核函數的相關參數(gamma错英,degree等等)們搭配,往往是SVM調參的重點隆豹。與gamma不同椭岩,C沒有在對偶函數中出現,并且是明確了調參目標的璃赡,所以我們可以明確我們究竟是否需要訓練集上的高精確度來調整C的方向判哥。默認情況下C為1,通常來說這都是一個合理的參數碉考。
我們可以嘗試增大?C?或?gamma?來擬合更為復雜的模型塌计。因此我設置了三個數值:1、100侯谁、100锌仅。
第一個數值,也即默認數值C=1墙贱,得到的結果如下圖:
可見其準度十分低热芹,因此繼續(xù)提高其數值,C=100:
準度馬上提高了許多惨撇,但我還是不滿意伊脓,因此繼續(xù)提高C=1000:
其準度可見比前者更加提高了。
最后我將C提高到了5000魁衙,結果如下:
增大?C?可以顯著改進模型报腔,得到 97.3% 的精度,運行時間也十分的快速纺棺,這也是這個算法的最終結果,至此我們得到了和神經網絡算法(MLPClassifier函數)相媲美的準度邪狞。
此算法的ROC曲線如下圖所示:
AUC值為:
其性能也是相當不錯祷蝌。
③?算法優(yōu)缺點
優(yōu)點:
(1)非線性映射是SVM方法的理論基礎,SVM利用內積核函數代替向高維空間的非線性映射;
(2)對特征空間劃分的最優(yōu)超平面是SVM的目標,最大化分類邊際的思想是SVM方法的核心帆卓;
(3)支持向量是SVM的訓練結果,在SVM分類決策中起決定作用的是支持向量巨朦。
(4)SVM 是一種有堅實理論基礎的新穎的小樣本學習方法。它基本上不涉及概率測度及大數定律等,因此不同于現有的統(tǒng)計方法剑令。從本質上看,它避開了從歸納到演繹的傳統(tǒng)過程,實現了高效的從訓練樣本到預報樣本的“轉導推理”,大大簡化了通常的分類和回歸等問題糊啡。
(5)SVM 的最終決策函數只由少數的支持向量所確定,計算的復雜性取決于支持向量的數目,而不是樣本空間的維數,這在某種意義上避免了“維數災難”。
(6)少數支持向量決定了最終結果,這不但可以幫助我們抓住關鍵樣本吁津、“剔除”大量冗余樣本,而且注定了該方法不但算法簡單,而且具有較好的“魯棒”性棚蓄。
缺點:
(1) SVM算法對大規(guī)模訓練樣本難以實施堕扶。由于SVM是借助二次規(guī)劃來求解支持向量,而求解二次規(guī)劃將涉及m階矩陣的計算(m為樣本的個數)梭依,當m數目很大時該矩陣的存儲和計算將耗費大量的機器內存和運算時間稍算。
(2)用SVM解決多分類問題存在困難。
第四部分 整理總結
根據以上的總結役拴,與我的觀點來說糊探,我會選擇神經網絡算法(MLPClassifier函數)或者支持向量機算法(SVC函數),兩者的準確率相對來說最高河闰,且比較接近科平,ROC曲線分析下,性能也十分的優(yōu)異姜性。但運行時間上瞪慧,神經網絡的運行時間比較長,如果需處理的數據集十分巨大的話污抬,時間上來說是一個負擔汞贸,而支持向量機SVM算法對大規(guī)模訓練樣本難以實施。在較大數據集基礎上印机,我們選擇神經網絡算法會比較好矢腻,但運行時間可能會比較長。
代碼地址:碼云
參考資料:
1射赛、02 過擬合和欠擬合 - 簡書
2多柑、機器學習--線性回歸算法的原理及優(yōu)缺點 - 泰初 - 博客園
3、sklearn線性回歸LinearRegression代碼及調參_人工智能_lyy的博客-CSDN博客
4楣责、邏輯回歸算法原理 - 簡書
5竣灌、LogisticRegression函數的各個參數意義_Python_默默學習-CSDN博客
7秆麸、sklearn 神經網絡 MLPClassifier簡單應用與參數說明 - 簡書
8初嘹、支持向量機(SVM)的優(yōu)缺點_網絡_qq_38734403的博客-CSDN博客
9、乳腺癌數據集上SVM核函數功能和選擇的研究報告 - 庫妍 - 博客園
10沮趣、ROC原理介紹及利用python實現二分類和多分類的ROC曲線_Python_山不過來屯烦,我就過去-CSDN博客