機器學習算法大體能夠分爲三類:python
基本的機器學習算法:git
迴歸分析(Regression Analysis)是統計學的數據分析方法,目的在於瞭解兩個或多個變量間是否相關、相關方向與強度,並創建數學模型以便觀察特定變量來預測其它變量的變化狀況。github
線性迴歸算法(Linear Regression)的建模過程就是使用數據點來尋找最佳擬合線。公式,y = m*x + c,其中 y 是因變量,x 是自變量,利用給定的數據集求 m 和 c 的值。 線性迴歸又分爲兩種類型,即 簡單線性迴歸(simple linear regression),只有 1 個自變量;多變量回歸(multiple regression),至少兩組以上自變量。算法
下面是一個線性迴歸示例:基於 Python scikit-learn 工具包描述。網絡
from sklearn import linear_model, datasets #digit dataset from sklearn digits = datasets.load_digits() #create the LinearRegression model clf = linear_model.LinearRegression() #set training set x, y = digits.data[:-1], digits.target[:-1] #train model clf.fit(x, y) #predict y_pred = clf.predict([digits.data[-1]]) y_true = digits.target[-1] print(y_pred) print(y_true)
支持向量機/網絡算法(SVM)屬於分類型算法。SVM模型將實例表示爲空間中的點,將使用一條直線分隔數據點。須要注意的是,支持向量機須要對輸入數據進行徹底標記,僅直接適用於兩類任務,應用將多類任務須要減小到幾個二元問題。app
from sklearn import svm, datasets #digit dataset from sklearn digits = datasets.load_digits() #create the Support Vector Classifier clf = svm.SVC(gamma = 0.001, C = 100) #set training set x, y = digits.data[:-1], digits.target[:-1] #train model clf.fit(x, y) #predict y_pred = clf.predict([digits.data[-1]]) y_true = digits.target[-1] print(y_pred) print(y_true)
KNN算法是一種基於實例的學習,或者是局部近似和將全部計算推遲到分類以後的惰性學習。用最近的鄰居(k)來預測未知數據點。k 值是預測精度的一個關鍵因素,不管是分類仍是迴歸,衡量鄰居的權重都很是有用,較近鄰居的權重比較遠鄰居的權重大。dom
KNN 算法的缺點是對數據的局部結構很是敏感。計算量大,須要對數據進行規範化處理,使每一個數據點都在相同的範圍。機器學習
from sklearn import datasets from sklearn.neighbors import KNeighborsClassifier #digit dataset from sklearn digits = datasets.load_digits() #create the KNeighborsClassifier clf = KNeighborsClassifier(n_neighbors=6) #set training set x, y = digits.data[:-1], digits.target[:-1] #train model clf.fit(x, y) #predict y_pred = clf.predict([digits.data[-1]]) y_true = digits.target[-1] print(y_pred) print(y_true)
延伸:KNN 的一個缺點是依賴於整個訓練數據集,學習向量量化(Learning Vector Quantization,LVQ)是一種監督學習的人神經網絡算法,容許你選擇訓練實例。LVQ 由數據驅動,搜索距離它最近的兩個神經元,對於同類神經元採起拉攏,異類神經元採起排斥,最終獲得數據的分佈模式。若是基於 KNN 能夠得到較好的數據集分類效果,利用 LVQ 能夠減小存儲訓練數據集存儲規模。典型的學習矢量量化算法有LVQ一、LVQ2和LVQ3,尤以LVQ2的應用最爲普遍。函數
邏輯迴歸算法(Logistic Regression)通常用於須要明確輸出的場景,如某些事件的發生(預測是否會發生降雨)。一般,邏輯迴歸使用某種函數將機率值壓縮到某一特定範圍。 例如,Sigmoid 函數(S 函數)是一種具備 S 形曲線、用於二元分類的函數。它將發生某事件的機率值轉換爲 0, 1 的範圍表示。工具
Y = E ^(b0+b1 * x)/(1 + E ^(b0+b1 * x ))
以上是一個簡單的邏輯迴歸方程,B0,B1是常數。這些常數值將被計算得到,以確保預測值和實際值之間的偏差最小。
決策樹(Decision tree)是一種特殊的樹結構,由一個決策圖和可能的結果(例如成本和風險)組成,用來輔助決策。機器學習中,決策樹是一個預測模型,樹中每一個節點表示某個對象,而每一個分叉路徑則表明某個可能的屬性值,而每一個葉節點則對應從根節點到該葉節點所經歷的路徑所表示的對象的值。決策樹僅有單一輸出,一般該算法用於解決分類問題。
一個決策樹包含三種類型的節點:
簡單決策樹算法案例,肯定人羣中誰喜歡使用信用卡。考慮人羣的年齡和婚姻情況,若是年齡在30歲或是已婚,人們更傾向於選擇信用卡,反之則更少。 經過肯定合適的屬性來定義更多的類別,能夠進一步擴展此決策樹。在這個例子中,若是一我的結婚了,他超過30歲,他們更有可能擁有信用卡(100% 偏好)。測試數據用於生成決策樹。
注意:對於那些各種別樣本數量不一致的數據,在決策樹當中信息增益的結果偏向於那些具備更多數值的特徵。
k-平均算法(K-Means)是一種無監督學習算法,爲聚類問題提供了一種解決方案。 K-Means 算法把 n 個點(能夠是樣本的一次觀察或一個實例)劃分到 k 個集羣(cluster),使得每一個點都屬於離他最近的均值(即聚類中心,centroid)對應的集羣。重複上述過程一直持續到重心不改變。
隨機森林算法(Random Forest)的名稱由 1995 年由貝爾實驗室提出的random decision forests 而來,正如它的名字所說的那樣,隨機森林能夠看做一個決策樹的集合。 隨機森林中每棵決策樹估計一個分類,這個過程稱爲「投票(vote)」。理想狀況下,咱們根據每棵決策樹的每一個投票,選擇最多投票的分類。
樸素貝葉斯算法(Naive Bayes)基於機率論的貝葉斯定理,應用很是普遍,從文本分類、垃圾郵件過濾器、醫療診斷等等。樸素貝葉斯適用於特徵之間的相互獨立的場景,例如利用花瓣的長度和寬度來預測花的類型。「樸素」的內涵能夠理解爲特徵和特徵之間獨立性強。
與樸素貝葉斯算法密切相關的一個概念是最大似然估計(Maximum likelihood estimation),歷史上大部分的最大似然估計理論也都是在貝葉斯統計中獲得大發展。例如,創建人口身高模型,很難有人力與物力去統計全國每一個人的身高,可是能夠經過採樣,獲取部分人的身高,而後經過最大似然估計來獲取分佈的均值與方差。
Naive Bayes is called naive because it assumes that each input variable is independent.
在機器學習和統計學領域,降維是指在限定條件下,下降隨機變量個數,獲得一組「不相關」主變量的過程,並可進一步細分爲特徵選擇和特徵提取兩大方法。
一些數據集可能包含許多難以處理的變量。特別是資源豐富的狀況下,系統中的數據將很是詳細。在這種狀況下,數據集可能包含數千個變量,其中大多數變量也多是沒必要要的。在這種狀況下,幾乎不可能肯定對咱們的預測影響最大的變量。此時,咱們須要使用降維算法,降維的過程當中也可能須要用到其餘算法,例如借用隨機森林,決策樹來識別最重要的變量。
梯度加強算法(Gradient Boosting)使用多個弱算法來建立更強大的精確算法。它與使用單個估計量不一樣,而是使用多個估計量建立一個更穩定和更健壯的算法。梯度加強算法有幾種:
更多精彩內容掃碼關注公衆號:RiboseYim's Blog