1. 程式人生 > >常見的十大機器學習演算法

常見的十大機器學習演算法

機器學習演算法的廣義分類大概有三種:監督式學習、無監督學習、強化學習。
監督學習由一個目標變數或結果變數(或因變數)組成。這些變數由已知的一系列預示變數(自變數)預測而來。利用這一系列變數,我們生成一個將輸入值對映到期望輸出值的函式。這個訓練過程會一直持續,直到模型在訓練資料上獲得期望的精確度。監督式學習的例子有:迴歸、決策樹、隨機森林、K – 近鄰演算法、邏輯迴歸等。
無監督式學習沒有任何目標變數或結果變數要預測或估計。這個演算法用在不同的組內聚類分析。這種分析方式被廣泛地用來細分客戶,根據干預的方式分為不同的使用者組。非監督式學習的例子有:關聯演算法和 K – 均值演算法。
強化學習

,這個演算法訓練機器進行決策。它的工作機制是機器被放在一個能讓它通過反覆試錯來訓練自己的環境中。機器從過去的經驗中進行學習,並且嘗試利用瞭解最透徹的知識作出精確的商業判斷。 強化學習的例子有馬爾可夫決策過程。

常見的十種機器學習演算法:

  1. 線性迴歸
  2. 邏輯迴歸
  3. 決策樹演算法
  4. SVM支援向量機
  5. 樸素貝葉斯
  6. k近鄰演算法
  7. k-means演算法
  8. 隨機森林演算法
  9. 降維演算法
  10. Gradient Boosting 和 AdaBoost 演算法

1、 線性迴歸
線性迴歸通常用於根據連續變數估計實際數值(房價,呼叫次數等),我們通過擬合最佳直線來建立自變數和因變數的關係,而這條最佳直線就叫做迴歸線,並且可以用

Y= a*X + b

線性等式來表示。
理解線性迴歸的最好辦法是回顧一下童年。假設在不問對方體重的情況下,讓一個五年級的孩子按體重從輕到重的順序對班上的同學排序,你覺得這個孩子會怎麼做?他(她)很可能會目測人們的身高和體型,綜合這些可見的引數來排列他們。這是現實生活中使用線性迴歸的例子。實際上,這個孩子發現了身高和體型與體重有一定的關係,這個關係看起來很像上面的等式。
在上面的等式中,

  • Y: 因變數
  • X: 自變數
  • a: 斜率
  • b: 截距
    係數a和b可以通過最小二乘法求得;
    線性迴歸的兩種主要型別是一元線性迴歸和多元線性迴歸。一元線性迴歸的特點是隻有一個自變數。多元線性迴歸存在多個自變數。找最佳擬合直線的時候,你可以擬合到多項或者曲線迴歸。這些就被叫做多項或曲線迴歸。Python中sklearn中有這個演算法,
from sklearn import linear_model

#Load Train and Test datasets
#Identify feature and response variable(s) and values must be numeric and numpy arrays
x_train=input_variables_values_training_datasets
y_train=target_variables_values_training_datasets
x_test=input_variables_values_test_datasets

# Create linear regression object
linear = linear_model.LinearRegression()

# Train the model using the training sets and check score
linear.fit(x_train, y_train)
linear.score(x_train, y_train)

#Equation coefficient and Intercept
print('Coefficient: n', linear.coef_)
print('Intercept: n', linear.intercept_)

#Predict Output
predicted= linear.predict(x_test)

2、邏輯迴歸
別被它的名字迷惑了!這是一個分類演算法而不是一個迴歸演算法。該演算法可根據已知的一系列因變數估計離散數值(比方說二進位制數值 0 或 1 ,是或否,真或假)。簡單來說,它通過將資料擬合進一個邏輯函式來預估一個事件出現的概率。因此,它也被叫做邏輯迴歸。因為它預估的是概率,所以它的輸出值大小在 0 和 1 之間(正如所預計的一樣)。
假設你的朋友讓你解開一個謎題。這隻會有兩個結果:你解開了或是你沒有解開。想象你要解答很多道題來找出你所擅長的主題。這個研究的結果就會像是這樣:假設題目是一道十年級的三角函式題,你有 70%的可能會解開這道題。然而,若題目是個五年級的歷史題,你只有30%的可能性回答正確。這就是邏輯迴歸能提供給你的資訊。

從數學上看,在結果中,機率的對數使用的是預測變數的線性組合模型。

from sklearn.linear_model import LogisticRegression
model = LogisticRegression()

model.fit(X, y)
model.score(X, y)

#Equation coefficient and Intercept
print('Coefficient: n', model.coef_)
print('Intercept: n', model.intercept_)

#Predict Output
predicted= model.predict(x_test)

3、決策樹
這個監督式學習演算法通常被用於分類問題。令人驚奇的是,它同時適用於分類變數和連續因變數。在這個演算法中,我們將總體分成兩個或更多的同類群。這是根據最重要的屬性或者自變數來分成儘可能不同的組別。
這裡寫圖片描述
在上圖中你可以看到,根據多種屬性,人群被分成了不同的四個小組,來判斷 “他們會不會去玩”。為了把總體分成不同組別,需要用到許多技術,比如說 Gini、Information Gain、Chi-square、entropy。

from sklearn import tree

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create tree object 
model = tree.DecisionTreeClassifier(criterion='gini') # for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini  

# model = tree.DecisionTreeRegressor() for regression
# Train the model using the training sets and check score

model.fit(X, y)
model.score(X, y)

#Predict Output
predicted= model.predict(x_test)

4、支援向量機SVM
這是一種分類方法。在這個演算法中,我們將每個資料在N維空間中用點標出(N是你所有的特徵總數),每個特徵的值是一個座標的值。
支援向量機(Support Vector Machine,常簡稱為SVM)是一種監督式學習的方法,可廣泛地應用於統計分類以及迴歸分析。支援向量機屬於一般化線性分類器,這族分類器的特點是他們能夠同時最小化經驗誤差與最大化幾何邊緣區,因此支援向量機也被稱為最大邊緣區分類器。
支援向量機將向量對映到一個更高維的空間裡,在這個空間裡建立有一個最大間隔超平面。在分開資料的超平面的兩邊建有兩個互相平行的超平面,分隔超平面使兩個平行超平面的距離最大化。假定平行超平面間的距離或差距越大,分類器的總誤差越小。
假設給定一些分屬於兩類的2維點,這些點可以通過直線分割, 我們要找到一條最優的分割線,如何來界定一個超平面是不是最優的呢?
這裡寫圖片描述
在上面的圖中,a和b都可以作為分類超平面,但最優超平面只有一個,最優分類平面使間隔最大化。 那是不是某條直線比其他的更加合適呢? 我們可以憑直覺來定義一條評價直線好壞的標準:
距離樣本太近的直線不是最優的,因為這樣的直線對噪聲敏感度高,泛化性較差。 因此我們的目標是找到一條直線(圖中的最優超平面),離所有點的距離最遠。 由此, SVM演算法的實質是找出一個能夠將某個值最大化的超平面,這個值就是超平面離所有訓練樣本的最小距離。這個最小距離用SVM術語來說叫做間隔(margin) 。
5、樸素貝葉斯
貝葉斯分類是一類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故稱為貝葉斯分類;
這個定理解決了現實生活裡經常遇到的問題:已知某條件概率,如何得到兩個事件交換後的概率,也就是在已知P(A|B)的情況下如何求得P(B|A)。這裡先解釋什麼是條件概率:
P(B|A)表示事件B已經發生的前提下,事件A發生的概率,稱為事件B發生下事件A的條件概率,其基本求解公式為:
這裡寫圖片描述
貝葉斯定理之所以有用,是因為在我們日常生活中經常遇到這種情況:我們可以很容易得出P(A|B),但是P(B|A)則很難直接得出,,但是P(B|A)才是我們所關心的,貝葉斯定理就是為我們解決從P(A|B)獲得P(B|A)的。
貝葉斯定理:這裡寫圖片描述
樸素貝葉斯分類的原理和流程
樸素貝葉斯是一種十分簡單的分類演算法,叫他樸素貝葉斯是因為這種方法的思想“樸素”,思想基礎是這樣的:對於給出的待分類項,求解再此項出現的條件下各個類別出現的概率,哪個最大,就認為此代分類項屬於哪個類別,通俗來講,就好比這麼個道理,你在街上看到一個和偶人,我問你猜這哥們哪裡來的,你很可能會回答非洲。為什麼呢?因為非洲人中黑人比率最高呀!當然人家也可能是美洲人或者亞洲人,但在沒有其他可用資訊下,我們會選擇條件概率最大的類別,這就是樸素貝葉斯的思想基礎。
1、設這裡寫圖片描述為一個待分類項,而每個a為x的一個特徵屬性。
2、有類別集合這裡寫圖片描述
3、計算這裡寫圖片描述
4、如果這裡寫圖片描述
那麼現在的關鍵是如何計算第三步中的條件概率,我們可以這樣做:
1、找到一個一直分類的待分類集合,這個集合叫做訓練樣本集;
2、統計得到在各類別下各個特徵屬性的條件概率估計,即
這裡寫圖片描述
3、如果各個特徵屬性是條件獨立的,則根據貝葉斯定理有如下推導:
因為分母對於所有類別為常數,因為我們只要將分子最大化皆可。又因為各特徵屬性是條件獨立的,所以有:

根據上述分析,樸素貝葉斯分類的流程可以由下圖表示(暫時不考慮驗證):

可以看到,整個樸素貝葉斯分類分為三個階段:
第一階段: 準備工作階段,這個階段的任務是為樸素貝葉斯分類做必要的準備,主要工作是根據具體情況確定特徵屬性,並對每個特徵屬性進行適當劃分,然後由人工對一部分待分類項進行分類,形成訓練樣本集合。這一階段的輸入是所有待分類資料,輸出是特徵屬性和訓練樣本。這一階段是整個樸素貝葉斯分類中唯一需要人工完成的階段,其質量對整個過程將有重要影響,分類器的質量很大程度上由特徵屬性、特徵屬性劃分及訓練樣本質量決定。
第二階段: 分類器訓練階段,這個階段的任務就是生成分類器,主要工作是計算每個類別在訓練樣本中的出現頻率及每個特徵屬性劃分對每個類別的條件概率估計,並將結果記錄。其輸入是特徵屬性和訓練樣本,輸出是分類器。這一階段是機械性階段,根據前面討論的公式可以由程式自動計算完成。
第三階段: 應用階段。這個階段的任務是使用分類器對待分類項進行分類,其輸入是分類器和待分類項,輸出是待分類項與類別的對映關係。這一階段也是機械性階段,由程式完成。

比較熟悉的就上面這幾個了,其他的我再看看,等熟練了記錄下。。。