有监督学习和无监督学习举例_监督学习入门学习笔记
http://scikit-learn. org/stable/documentation (算法字典)
https://scikit-learn.org/stable/
Andreas Müller 創建的視頻課程“scikit-learn 高等機器學習"(Advanced Machine Learning with scikir-learn)https://www.oreilly.com/library/view/advanced-machine-learning/9781771374927/
監督學習使用流程
理解問題,選擇合適的監督算法。
輸入數據
數據清洗和處理/特征工程
觀察數據,作用有:
是否可以不用機器學習完成
發現異常值和特殊值
pandas函數:scatter_matrix(用于觀察兩組數據的散點圖/相關性
數據集拆分:訓練數據(training data)/訓練集(training set)和 測試數據(test data)/測試集(test set)/留出集(hold-out set)
訓練模型,并進行預測
評估模型
根據評估結果(訓練集和測試集都要進行評估)確認模型或重新搭建模型(調參、換模型、更新數據集等)
k近鄰
原理
算法會在訓練集中尋找與這個新數據點距離最近任意k個鄰居,然后將找到的鄰居(數據點)的標簽賦值給這個新數據點。
參數
KNeighbors分類器有2個重要參數:
鄰居個數。
數據點之間的度量方法。(默認使用歐式距離,作者說許多情況下效果都很好。暫時不懂)
優點
簡單,容易理解。通常不需要過多調節就可以得到不錯的性能。在 考慮使用更高級的技術之前,嘗試此算法是一種很好的基準方法。
可用于分類和回歸。
缺點
構建最近鄰模型的速度通常很快,但如果訓練集很大(特征數很多或者樣本數很大),預測速度可能會比較慢。
對于有很多特征(幾百或更多)的數據集往往效果不好。
對于大多數特征的大多數取值都為0的數據集(所謂的稀疏數據集)來說,這一算法的效果尤其不好。
特點
只需要保存訓練集(不需要測試集)。
隨著鄰居個數越來越多,決策邊界也越來越平滑。更平滑的邊界對應更簡單的模型。換句話說,使用更少的鄰居對應更高的模型復雜度,而使用更多的鄰居對應更低的模型復雜度。假如考慮極端情況,即鄰居個數等于訓練集中所有數據點的個數,那么每個測試點的鄰居都完全相同(即所有訓練點),所有預測結果也完全相同(即訓練集中出現次數最多的類別)。
線性模型
線性回歸/普通最小二乘法
原理
線性回歸尋找系數(權重)w和截距b,使得對訓練集的預測值與真實的回歸目標值y之間的均方誤差最小。
優點
模型中不需要輸入參數(比如k近鄰有多個參數來控制模型的復雜度)。
缺點
由于模型沒有參數,所以不能控制模型的復雜度。
特點
如果特征數量大于訓練數據點的數量,任何目標y都可以(在訓練集上)用線性函數完美擬合。(忘了線性函數的一些定律了。大概意思是特征值多于數據點時,不能使用線性回歸?)
嶺回歸/Ridge
原理
標準線性回歸最常用的替代方法之一就是嶺回歸(ridge regression),也是用于回歸的線性模型,,因此它的預測公式與普通最小二乘法相同。
但在嶺回歸中,對系數(w)的選擇不僅要在訓練數據上得到好的預測結果,而且還要擬合附加約束。我們還希望系數盡量小。換句話說,w的所有元素都應接近于0。直觀上來看,這意味著每個特征對輸出的影響應盡可能小(即斜率很小),同時仍給出很好的預測結果。這種約束是所謂正則化(regularization)的一個例子。
正則化是指對模型做顯式約束,以避免過擬合。嶺回歸用到的這種被稱為L2正則化。
參數
alpha決定模型系數的約束強度。
Ridge模型在模型的簡單性(系數都接近于0)與訓練集性能之間做出權衡。簡單性和訓練集性能二者對于模型的重要程度可以由用戶通過設置alpha參數來指定。默認參數alpha=1.0。alpha的最佳設定值取決于用到的具體數據集。增大alpha會使得系數更加趨向于0,從而降低訓練集性能,但可能會提高泛化性能。
更大的alpha表示約束更強的模型,所以我們預計大alpha對應的coef_元素比小alpha對應的coef_元素要小。
優點
相對線性回歸,泛化性能更好。
缺點
相對線性回歸,訓練集的性能更差。
特點
Ridge在訓練集上的分數要低于LinearRegression,但在測試集上的分數更高。這和我們的預期一致。線性回歸對數據存在過擬合。Ridge是一種約束更強的模型,所以更不容易過擬合。復雜度更小的模型意味著在訓練集上的性能更差,但泛化性能更好。由于我們只對泛化性能感興趣,所以應該選擇Ridge模型而不是LinearRegression模型。
當訓練數據足夠多,正則化變得不那么重要,并且嶺回歸和線性回歸將具有相同的性能。
Lasso--回歸方法
原理
與嶺回歸相同,使用lasso也是約束系數使其接近于0,但用到的方法不同,叫作L1正則化。L1正則化的結果是,使用lasso時某些系數剛好為0。這說明某些特征被模型完全忽略。這可以看作是一種自動化的特征選擇。某些系數剛好為0,這樣模型更容易解釋,也可以呈現模型最重要的特征。
參數
正則化參數alpha,可以控制系數趨向于0的強度。默認值alpha=1.0。為了降低欠擬合,我們嘗試減小alpha。這么做的同時,我們還需要增加max_iter的值(運行迭代的最大次數)。(模型可能會警告我們,說應該增大max_iter)
alpha值變小,我們可以擬合一個更復雜的模型。
優點
自動篩選特征。
呈現更重要的特征。
模型更簡單。
缺點
可能存在欠擬合,Lasso在訓練集與測試集上的表現都很差。
適用情況
在實踐中,在兩個模型中一般首選嶺回歸。但如果特征很多,你認為只有其中幾個是重要的,那么選擇Lasso可能更好。同樣,如果你想要一個容易解釋的模型,Lasso可以給出更容易理解的模型,因為它只選擇了一部分輸入特征。scikit-learn還提供了ElasticNet類,結合了Lasso和Ridge的懲罰項。在實踐中,這種結合的效果最好,不過代價是要調節兩個參數:一個用于L1正則化,一個用于L2正則化。
用于分類的線性模型--邏輯回歸和線性支持向量機
用于二分類的線性模型
原理
參數
對于LogisticRegression和LinearSVC,決定正則化強度的權衡參數叫作C。C值越大,對應的正則化越弱。
兩個模型都默認使用L2正則。但可以使用L1正則。
注意:當正則化不同時(或者數據等變化),可能導致某特征的系數由正變負(或相反),這提示我們,對線性模型系數的解釋始終持保留態度。如果想要一個可解釋性更強的模型,使用L1正則化可能更好,因為它約束模型只使用少數幾個特征。
用于多分類的線性模型
原理
將二分類算法推廣到多分類算法的一種常見方法是“一對其余”(one-vs.-rest)方法。
在“一對其余”方法中,對每個類別都學習一個二分類模型,將這個類別與所有其他類別盡量分開,這樣就生成了與類別個數一樣多的二分類模型。在測試點上運行所有二類分類器來進行預測。在對應類別上分數最高的分類器“勝出”,將這個類別標簽返回作為預測結果。
每個類別都對應一個二類分類器,這樣每個類別也都有一個系數(w)向量和一個截距(b)。下面給出的是分類置信方程,其結果中最大值對應的類別即為預測的類別標簽:
多分類 Logistic 回歸背后的數學與“一對其余”方法稍有不同,但它也是對每個類別都有一個系數向量和一個截距,也使用了相同的預測方法。
特殊問題
圖像中間的三角形區域屬于哪一個類別呢,3個二類分類器都將這一區域內的點劃為“其余”。這里的點應該劃歸到哪一個類別呢?答案是分類方程結果最大的那個類別,即最接近的那條線對應的類別。
線性模型的優點、缺點和參數--總結
參數
主要參數是正則化參數,在回歸模型中叫作alpha,在LinearSVC和Logistic-Regression中叫作C。alpha值較大或C值較小,說明模型比較簡單。
還需要確定的是用L1正則化還是L2正則化。如果你假定只有幾個特征是真正重要的,那么你應該用L1正則化,否則應默認使用L2正則化。如果模型的可解釋性很重要的話,使用L1也會有幫助。由于L1只用到幾個特征,所以更容易解釋哪些特征對模型是重要的,以及這些特征的作用。
優點
訓練速度非常快,預測速度也很快。如果你的數據包含數十萬甚至上百萬個樣本,你可能需要研究如何使用LogisticRegression和Ridge模型的solver='sag'選項,在處理大型數據時,這一選項比默認值要更快。
理解如何進行預測是相對比較容易的。
缺點
并不完全清楚系數為什么是這樣的。如果數據集中包含高度相關的特征,這一問題尤為突出。在這種情況下,可能很難對系數做出解釋。
樸素貝葉斯分類器
樸素貝葉斯模型的許多優點和缺點都與線性模型相同。
優點
相對線性模型,訓練速度往往更快。它的訓練和預測速度都很快,訓練過程也很容易理解。
該模型對高維稀疏數據的效果很好,對參數的魯棒性也相對較好。
樸素貝葉斯模型是很好的基準模型,常用于非常大的數據集。
缺點
泛化能力要比線性分類器(如LogisticRegression和LinearSVC)稍差。
三種樸素貝葉斯分類器
scikit-learn中實現了三種樸素貝葉斯分類器:GaussianNB、BernoulliNB和MultinomialNB:
GaussianNB可應用于任意連續數據,GaussianNB會保存每個類別中每個特征的平均值和標準差;
BernoulliNB假定輸入數據為二分類數據,BernoulliNB分類器計算每個類別中每個特征不為0的元素個數。;
MultinomialNB假定輸入數據為計數數據(即每個特征代表某個對象的整數計數,比如一個單詞在句子里出現的次數),MultinomialNB計算每個類別中每個特征的平均值。
注:BernoulliNB和MultinomialNB主要用于文本數據分類。
特點、參數
MultinomialNB和BernoulliNB都只有一個參數alpha,用于控制模型復雜度。alpha的工作原理是,算法向數據中添加alpha這么多的虛擬數據點,這些點對所有特征都取正值。這可以將統計數據“平滑化”(smoothing)。alpha越大,平滑化越強,模型復雜度就越低。算法性能對alpha值的魯棒性相對較好,也就是說,alpha值對模型性能并不重要。但調整這個參數通常都會使精度略有提高。
GaussianNB主要用于高維數據,而另外兩種樸素貝葉斯模型則廣泛用于稀疏計數數據,比如文本。MultinomialNB的性能通常要優于BernoulliNB,特別是在包含很多非零特征的數據集(即大型文檔)上。
決策樹
原理
從一層層的if/else問題中進行學習,并得出結論。目標是通過提出盡可能少的if/else問題來得到正確答案。為了構造決策樹,算法搜遍所有可能的測試,找出對目標變量來說信息量最大的那一個。
特點
廣泛用于分類和回歸任務的模型
在將基于樹的模型用于回歸時,我們想要指出它的一個特殊性質。DecisionTreeRegressor(以及其他所有基于樹的回歸模型)不能外推(extrapolate),也不能在訓練數據范圍之外進行預測。
控制決策樹的復雜度
構造決策樹直到所有葉結點都是純的葉結點,這會導致模型非常復雜,并且對訓練數據高度過擬合。純葉結點的存在說明這棵樹在訓練集上的精度是100%。
防止過擬合有兩種常見的策略:
一種是及早停止樹的生長,也叫預剪枝(pre-pruning)。預剪枝的限制條件可能包括
限制樹的最大深度,使用參數max_depth
限制葉結點的最大數目,
或者規定一個結點中數據點的最小數目來防止繼續劃分。
先構造樹,但隨后刪除或折疊信息量很少的結點,也叫后剪枝(post-pruning)或剪枝(pruning)。
注意:scikit-learn只實現了預剪枝,沒有實現后剪枝。
分析決策樹
利用tree模塊的export_graphviz函數來將樹可視化。
將特征重要性可視化。
如果某個特征的feature_importance_很小,并不能說明這個特征沒有提供任何信息。這只能說明該特征沒有被樹選中,可能是因為另一個特征也包含了同樣的信息。
特征重要性告訴我們“worst radius”(最大半徑)特征很重要,但并沒有告訴我們半徑大表示樣本是良性還是惡性。
參數
控制決策樹模型復雜度的參數是預剪枝參數,它在樹完全展開之前停止樹的構造。通常來說,選擇一種預剪枝策略(設置max_depth、max_leaf_nodes或min_samples_leaf)足以防止過擬合。
優點
模型很容易可視化,非專家也很容易理解;
算法完全不受數據縮放的影響,(數據是否變形做對數處理,不影響模型結果)。因此決策樹算法不需要特征預處理,比如歸一化或標準化。
缺點
即使做了預剪枝,它也經常會過擬合,泛化性能很差。因此,在大多數應用中,往往使用集成方法來替代單棵決策樹。
決策樹集成
集成定義
合并多個機器學習模型來構建更強大模型的方法。已證明有兩種集成模型對大量分類和回歸的數據集都是有效的,二者都以決策樹為基礎,分別是隨機森林(random forest)和梯度提升決策樹 (gradient boosted decision tree)。
隨機森林
原理
決策樹的一個主要缺點在于經常對訓練數據過擬合。隨機森林是解決這個問題的一種方法。隨機森林本質上是許多決策樹的集合,其中每棵樹都和其他樹略有不同。隨機森林背后的思想是,每棵樹的預測可能都相對較好,但可能對部分數據過擬合。如果構造很多樹,并且每棵樹的預測都很好,但都以不同的方式過擬合,那么我們可以對這些樹的結果取平均值來降低過擬合。既能減少過擬合又能保持樹的預測能力,這可以在數學上嚴格證明。
隨機森林的名字來自于將隨機性添加到樹的構造過程中,以確保每棵樹都各不相同。隨機森林中樹的隨機化方法有兩種:一種是通過選擇用于構造樹的數據點,另一種是通過選擇每次劃分測試的特征。
構造隨機森林
確定用于構造的樹的個數(RandomForestRegressor或RandomForestClassifier的n_estimators參數)。
要對數據進行自助采樣(bootstrap sample)。從n_samples個數據點中有放回地(即同一樣本可以被多次抽取)重復隨機抽取一個樣本,共抽取n_samples次。這樣會創建一個與原數據集大小相同的數據集,但有些數據點會缺失(大約三分之一),有些會重復。
基于這個新創建的數據集來構造決策樹。但是,要對我們在介紹決策樹時描述的算法稍作修改。在每個結點處,算法隨機選擇特征的一個子集,并對其中一個特征尋找最佳測試,而不是對每個結點都尋找最佳測試。選擇的特征個數由max_features參數來控制。每個結點中特征子集的選擇是相互獨立的,這樣樹的每個結點可以使用特征的不同子集來做出決策。
對于回歸問題,我們可以對每個決策樹結果取平均值作為最終預測。對于分類問題,則用到了“軟投票”(soft voting)策略。也就是說,每個算法做出“軟”預測,給出每個可能的輸出標簽的概率。對所有樹的預測概率取平均值,然后將概率最大的類別作為預測結果。
分析隨機森林
可視化每棵樹和隨機森林
觀察模型在訓練集和測試集的精度。
我們可以調節 max_features 參數,或者像單棵決策樹那樣進行預剪枝。但是,隨機森 林的默認參數通常就已經可以給出很好的結果。
隨機森林也可以給出特征重要性,計算方法是將森林中所有樹的特征重要 性求和并取平均。一般來說,隨機森林給出的特征重要性要比單棵樹給出的更為可靠。隨機森林比單棵樹更能從總體把握 數據的特征。
優點
用于回歸和分類的隨機森林是目前應用最廣泛的機器學習方法之一。這種方法非常強大,通常不需要反復調節參數就可以給出很好的結果,也不需要對數據進行縮放。
從本質上看,隨機森林擁有決策樹的所有優點,同時彌補了決策樹的一些缺陷。
既可以用于回歸也可以用于分類。
缺點
相對而言,較費時間。
對于維度非常高的稀疏數據(比如文本數據),隨機森林的表現往往不是很好。對于這種數據,使用線性模型可能更合適。
參數
n_jobs參數來調節使用的內核個數。使用更多的CPU內核,可以讓速度線性增加,但設置n_jobs 大于內核個數是沒有用的。你可以設置n_jobs=-1來使用計算機的所有內核。
需要調節的重要參數有n_estimators和max_features,可能還包括預剪枝選項(如max_depth)。n_estimators總是越大越好。對更多的樹取平均可以降低過擬合,從而得到魯棒性更好的集成。不過收益是遞減的,而且樹越多需要的內存也越多,訓練時間也越長。常用的經驗法則就是“在你的時間 / 內存允許的情況下盡量多”。
其他
仍然使用決策樹的一個原因是需要決策過程的緊湊表示。隨機森林中樹的深度往往比決策樹還要大(因為用到了特征子集)。因此,如果你需要以可視化的方式向非專家總結預測過程,那么選擇單棵決策樹可能更好。
隨機森林本質上是隨機的,設置不同的隨機狀態(或者不設置random_state參數)可以徹底改變構建的模型。森林中的樹越多,它對隨機狀態選擇的魯棒性就越好。如果你希望結果可以重現,固定 random_state是很重要的。
梯度提升回歸樹(梯度提升機)
原理
梯度提升回歸樹是另一種集成方法,通過合并多個決策樹來構建一個更為強大的模型。
與隨機森林方法不同,梯度提升采用連續的方式構造樹,每棵樹都試圖糾正前一棵樹的錯誤。默認情況下,梯度提升回歸樹中沒有隨機化,而是用到了強預剪枝。梯度提升樹通常使用深度很小(1到5之間)的樹,這樣模型占用的內存更少,預測速度也更快。
梯度提升背后的主要思想是合并許多簡單的模型(在這個語境中叫作弱學習器),比如深度較小的樹。每棵樹只能對部分數據做出好的預測,因此,添加的樹越來越多,可以不斷迭代提高性能。
優點
既可以用于回歸也可以用于分類。
由于強預剪枝,通常占用的內存更少,預測速度也更快。(相對于隨機森林)
不需要對數據進行縮放就可以表現得很好,而且也適用于二元特征與連續特征同時存在的數據集。
缺點
需要仔細調參。
訓練時間可能會比較長。
通常不適用于高維稀疏數據。
參數
預剪枝。
集成中數的數量。通過增大n_estimators來向集成中添加更多樹,也可以增加模型復雜度,因為模型有更多機會糾正訓練集上的錯誤。隨機森林的n_estimators值總是越大越好,但梯度提升不同,增大n_estimators會導致模型更加復雜,進而可能導致過擬合。通常的做法是根據時間和內存的預算選擇合適的n_estimators,然后對不同的learning_rate進行遍歷。
學習率(learning_rate)。用于控制每棵樹糾正前一棵樹的錯誤的強度。較高的學習率意味著每棵樹都可以做出較強的修正,這樣模型更為復雜。
特點
梯度提升樹經常是機器學習競賽的優勝者,并且廣泛應用于業界。與隨機森林相比,它通常對參數設置更為敏感,但如果參數設置正確的話,模型精度更高。
梯度提升樹的特征重要性與隨機森林的特征重要性有些類似,不過梯度提升完全忽略了某些特征。
由于梯度提升和隨機森林兩種方法在類似的數據上表現得都很好,因此一種常用的方法就是先嘗試隨機森林,它的魯棒性很好。如果隨機森林效果很好,但預測時間太長,或者機器學習模型精度小數點后第二位的提高也很重要,那么切換成梯度提升通常會有用。
核支持向量機(kernelized support vector machine)
核支持向量機背后的數學有點復雜,已經超出了本書的范圍。你可以閱讀Hastie、Tibshirani和Friedman合著的《統計學習基礎》一書(http://statweb.stanford.edu/~tibs/Elem StatLearn/)的第12章了解更多細節。
雖然支持向量機可以同時用于分類和回歸,但我們只會介紹用于分類的情況,它在SVC中實現。類似的概念也適用于支持向量回歸,后者在SVR中實現。
線性模型與非線性特征
線性模型在低維空間中可能非常受限,因為線和平面的靈活性有限。有一種方法可以讓線性模型更加靈活,就是添加更多的特征——舉個例子,添加輸入特征的交互項或多項式。
如果將線性SVM模型看作原始特征的函數,那么它實際上已經不是線性的了。它不是一條直線,而是一個橢圓。
核技巧
向數據表示中添加非線性特征,可以讓線性模型變得更強大。
但是,通常來說我們并不知道要添加哪些特征,而且添加許多特征(比如100維特征空間所有可能的交互項)的計算開銷可能會很大。核技巧(kernel trick)讓我們可以在更高維空間中學習分類器,而不用實際計算可能非常大的新的數據表示。它的原理是直接計算擴展特征表示中數據點之間的距離(更準確地說是內積),而不用實際對擴展進行計算。
對于支持向量機,將數據映射到更高維空間中有兩種常用的方法:
是多項式核,在一定階數內計算原始特征所有可能的多項式(比如 feature1 ** 2 * feature2 ** 5);
徑向基函數(radial basis function,RBF)核,也叫高斯核。一種對高斯核的解釋是它考慮所有階數的所有可能的多項式,但階數越高,特征的重要性越小。注:遵循指數映射的泰勒展開。
理解SVM
在訓練過程中,SVM學習每個訓練數據點對于表示兩個類別之間的決策邊界的重要性。通常只有一部分訓練數據點對于定義決策邊界來說很重要:位于類別之間邊界上的那些點。這些點叫作支持向量(support vector),支持向量機正是由此得名。
想要對新樣本點進行預測,需要測量它與每個支持向量之間的距離。分類決策是基于它與支持向量之間的距離以及在訓練過程中學到的支持向量重要性(保存在SVC的dual_coef_屬性中)來做出的。
高斯核運用case及調參
svm = SVC(kernel='rbf', C=10, gamma=0.1).fit(X, y)?
rbf:高斯核
γ(gamma):控制高斯核寬度的參數,它是高斯核寬度的倒數,它決定了點與點之間“靠近”是指多大的距離。gamma較小,說明高斯核的半徑較大,許多點都被看作比較靠近。小的gamma值表示決策邊界變化很慢,生成的是復雜度較低的模型,而大的gamma值則會生成更為復雜的模型。
C:正則化參數,與線性模型中用到的類似。它限制每個點的重要性(或者更確切地說,每個點的dual_coef_)。C值很小,說明模型非常受限,每個數據點的影響范圍都有限。(說明C值小,復雜度低,越平滑,更容易泛化。反之,C越大,模型越復雜)
特點
SVM的表現通常都很好,但它對參數的設定和數據的縮放非常敏感。特別地,它要求所有特征有相似的變化范圍。
為SVM預處理數據
解決特征變化范圍不一致(以上的模型特點)的一種方法就是對每個特征進行縮放,使其大致都位于同一范圍。核SVM常用的縮放方法就是將所有特征縮放到0和1之間。
優點
是非常強大的模型,在各種數據集上的表現都很好。
SVM允許決策邊界很復雜,即使數據只有幾個特征。
它在低維數據和高維數據(即很少特征和很多特征)上的表現都很好。
缺點
對樣本個數的縮放表現不好。(需要對特征值進行處理,使其有相似的變化范圍)
數據量太大時(10萬以上),在運行時間和內存使用方面可能會面臨挑戰。
預處理數據和調參都需要非常小心。這也是為什么如今很多應用中用的都是基于樹的模型,比如隨機森林或梯度提升(需要很少的預處理,甚至不需要預處理)。此外,SVM模型很難檢查,可能很難理解為什么會這么預測,而且也難以將模型向非專家進行解釋。
神經網絡(深度學習)
特點
深度學習算法往往經過精確調整,只適用于特定的使用場景。此處只討論相對簡單的方法,即用于分類和回歸的多層感知機(multilayer perceptron,MLP)。
在開始學習之前其權重是隨機設置的,這種隨機初始化會影響學到的模型。即,即使使用完全相同的參數,如果隨機種子不同的話,我們也可能得到非常不一樣的模型。如果網絡很大,并且復雜度選擇合理的話,那么這應該不會對精度有太大影響,但應該記住這一點(特別是對于較小的網絡)。
多層感知機/MLP模型及多層處理
可以作為研究更復雜的深度學習方法的起點。MLP也被稱為(普通)前饋神經網絡,有時也簡稱為神經網絡。
MLP可以被視為廣義的線性模型,執行多層處理后得到結論。
基本的多層處理流程:
線性回歸公式
在MLP中,多次重復這個計算加權求和的過程,首先計算代表中間過程的隱單元(hidden unit),然后再計算這些隱單元的加權求和并得到最終結果。如下圖:
從數學的角度看,計算一系列加權求和與只計算一個加權求和是完全相同的,因此,為了讓這個模型真正比線性模型更為強大,需要特殊技巧。在計算完每個隱單元的加權求和之后,對結果再應用一個非線性函數——通常是校正非線性(rectifying nonlinearity, 也叫校正線性單元或 relu)或正切雙曲線(tangens hyperbolicus,tanh)。然后將這個函數的結果用于加權求和,計算得到輸出?。
relu截斷小于0的值,而tanh在輸入值較小時接近-1,在輸入值較大時接近+1。有了這兩種非線性函數,神經網絡可以學習比線性模型復雜得多的函數。
relu和tanh函數可視化
結果:
神經網絡調參
mlp= MLPClassifier(solver='lbfgs', activation='tanh',random_state=0, hidden_layer_sizes=[10,10])
activation:默認非線性是"relu"。
hidden_layer_sizes:默認使用100個隱節點,減少數量可以降低模型復雜度;同時可以確定幾個隱層。
估計神經網絡的復雜度。最重要的參數是層數和每層的隱單元個數。你應該首先設置1個或2個隱層,然后可以逐步增加。每個隱層的結點個數通常與輸入特征個數接近,但在幾千個結點時很少會多于特征個數。隱節點冪乘數地增加權重個數,隱藏層乘數級別的增加權重個數。
alpha:L2懲罰使權重趨向于0,從而控制神經網絡的復雜度。它的默認值很小(弱正則化)。
max_iter(迭代次數):過模型給出了一個警告,告訴我們已經達到最大迭代次數。這是用于學習模型的adam算法的一部分,告訴我們應該增加迭代次數。增加迭代次數僅提高了訓練集性能,但沒有提高泛化性能。
solver:默認選項是'adam',在大多數情況下效果都很好,但對數據的縮放相當敏感。另一個選項是'lbfgs',其魯棒性相當好,但在大型模型或大型數據集上的時間會比較長。還有更高級的'sgd'選項,深度學習研究人員會用,此處不展開。
調參常用辦法:首先創建一個大到足以過擬合的網絡,確保這個網絡可以對任務進行學習。知道訓練數據可以被學習之后,要么縮小網絡,要么增大alpha來增強正則化,這可以提高泛化性能。
優點
目前最先進的模型,能夠獲取大量數據中包含的信息,并構建無比復雜的模型。給定足夠的計算時間和數據,并且仔細調節參數,神經網絡通常可以打敗其他機器學習算法(無論是分類任務還是回歸任務)。
缺點
需要對數據進行縮放。與SVC例子相同,神經網絡也要求所有輸入特征的變化范圍相似,最理想的情況是均值為0、方差為1。
需要很長的訓練時間。
需要仔細地預處理數據。
很難解釋。
更多深度學習庫
除了scikit-learn之外的,對于Python用戶來說,最為完善的是keras、lasagna和tensor-flow。
lasagna是基于theano庫構建的,而keras既可以用tensor-flow也可以用theano。這些庫提供了更為靈活的接口,可以用來構建神經網絡并跟蹤深度學習研究的快速發展。所有流行的深度學習庫也都允許使用高性能的圖形處理單元(GPU),而scikit-learn不支持GPU。使用GPU可以將計算速度加快10到100倍,GPU對于將深度學習方法應用到大型數據集上至關重要。
相關概念
分類和回歸
監督學習問題主要有兩種:分類(classification)和回歸(regression)。
分類問題的目標是預測類別標簽(class label),包含二分類和多分類。
回歸任務的目標是預測一個連續值,編程術語叫作浮點數(?oating-point number),數學術語叫作實數(real number)。
區分分類任務和回歸任務有一個簡單方法:輸出是否具有某種連續性。
泛化、過擬合與欠擬合
泛化(generalize):如果一個模型能夠對沒見過的數據做出準確預測,我們就說它能夠從訓練集泛化(generalize)到測試集。我們想要構建一個泛化精度盡可能高的模型。
過擬合(over?tting):如果你在擬合模型時過分關注訓練集的細節,得到了一個在訓練集上表現很好、但不能泛化到新數據上的模型,那么就存在過擬合。
與之相反,欠擬合(under?tting):如果你的模型過于簡單,那么你可能無法抓住數據的全部內容以及數據中的變化,你的模型甚至在訓練集上的表現就很差。選擇過于簡單的模型被稱為欠擬合(under?tting)。
我們的模型越復雜,在訓練數據上的預測結果就越好。但是,如果我們的模型過于復雜, 我們開始過多關注訓練集中每個單獨的數據點,模型就不能很好地泛化到新數據上。
二者之間存在一個最佳位置,可以得到最好的泛化性能。這就是我們想要的模型。
模型復雜度與數據集大小的關系
數據集中包含的數據點的變化范圍越大,在不發生過擬合的前提下你可以使用的模型就越復雜。通常來說,收集更多的數據點可以有更大的變化范圍,所以更大的數據集可以用來構建更復雜的模型。但是,僅復制相同的數據點或收集非常相似的數據是無濟于事的。
正則化
指對模型做顯式約束,以避免過擬合。
L2正則化:讓特征的系數盡量為0.
L1正則化:讓某些特征的系數為0。
更多資料:https://blog.csdn.net/liuweiyuxiang/article/details/99984288魯棒性
所謂“魯棒性”,也是指控制系統在一定(結構,大小)的參數攝動下,維持其它某些性能的特性。
介紹網址:https://baike.baidu.com/item/%E9%B2%81%E6%A3%92%E6%80%A7/832302?fr=aladdin集成
合并多個機器學習模型來構建更強大模型的方法。已證明有兩種集成模型對大量分類和回歸的數據集都是有效的,二者都以決策樹為基礎,分別是隨機森林(random forest)和梯度提升決策樹 (gradient boosted decision tree)。
總結
以上是生活随笔為你收集整理的有监督学习和无监督学习举例_监督学习入门学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python对象三个特性_百度资讯搜索_
- 下一篇: 统计并输出某给定字符在给定字符串中出现的