老師,我建議你多掛點人
如果不讓小明通過答辯,他會不會跳樓?
這個社會在極嚴厲的懲罰不讀書的人
寒門如何出貴子
機器學習發(fā)展到現在,已經形成較為完善的知識體系,同時大量的數據科學家的研究成果也讓現實問題的處理有了相對成熟的應對算法。
所以對于一般的機器學習來說,解決問題的方式變的非常簡單:熟悉這些基本的算法,并且遇到實際的問題能夠系統(tǒng)地運用這些思想來解決。
這篇文章將對機器學習算法進行分類的詳細描述,并介紹幾個常用的機器學習算法(附python代碼),這些足夠解決平時的大多數問題。
回歸算法(Regression Algorithms)
回歸是關注變量之間關系的建模,利用模型預測誤差測量進行反復提煉?;貧w方法是統(tǒng)計工作,已納入統(tǒng)計機器學習。這可能是令人困惑,因為我們可以用回歸來引用各類的問題及各類算法,回歸其實是一個過程。
普通最小二乘法 Ordinary Least Squares
邏輯回歸 Logistic Regression
逐步回歸 Stepwise Regression
多元自適應回歸 MARS
局部散點平滑估計 LOESS
基于實例的方法(Instance-based Algorithms)
基于實例的學習模型是使用那些對于模型很重要訓練數據,這類方法通常使用基于示例數據的數據庫,用新數據和數據庫數據以一種相似度方式從中找到最佳匹配,從而作出預測。出于這個原因,基于實例的方法也被稱為贏家通吃所有的方法和基于記憶的學習。重點放在存儲實例之間的相似性度量表現上。
k最鄰近算法 k-Nearest Neighbour ,kNN
學習矢量量化 Learning Vector Quantization ,LVQ
自組織映射 Self-Organizing Map ,SOM
局部加權學習 Locally Weighted Learning ,LWL
正則化方法(regularization Algorithms)
正則化方法是其他算法(回歸算法)的延伸,根據算法的復雜度對算法進行調整。正則化方法通常對簡單模型予以獎勵而對復雜算法予以懲罰?;谡齽t化方法的擴展 (典型是基于regression回歸方法) 可能比較復雜,越簡單可能會利于推廣,下面列出的正則化方法是因為它們比較流行 強大簡單。
嶺回歸數值計算方法 Ridge Regression
至少絕對的收縮和選擇算子 LASSO
彈性網絡 Elastic Net
決策樹算法(Decision Tree Algorithms)
決策樹方法是建立一種基于數據的實際屬性值的決策模型。決策使用樹型結構直至基于一個給定記錄的預測決策得到。決策樹的訓練是在分類和回歸兩方面的數據上進行的。
分類回歸樹 Classification and Regression Tree ,CART
迭代二叉樹3代 Iterative Dichotomiser 3 ,ID3
卡方自動交互檢測 CHAID
多元自適應回歸樣條 MARS
梯度推進機 Gradient Boosting Machines ,GBM
單層決策樹 Decision Stump
貝葉斯方法(Bayesian Algorithms)
貝葉斯分析方法(Bayesian Analysis)提供了一種計算假設概率的方法,這種方法是基于假設的先驗概率、給定假設下觀察到不同數據的概率以及觀察到的數據本身而得出的。其方法為,將關于未知參數的先驗信息與樣本信息綜合,再根據貝葉斯公式,得出后驗信息,然后根據后驗信息去推斷未知參數的方法。
樸素貝葉斯 Naive Bayes
平均單依賴估計 AODE
貝葉斯置信網絡 Bayesian Belief Network ,BBN
內核方法(Kernel Methods)
最有名的當屬支持向量機的方法, 內核方法更關注將數據映射到高維空間向量,在那里可以進行一些分類或回歸問題的建模。
支持向量機 Support Vector Machines ,SVM
徑向基函數 Radial Basis Function ,RBF
線性鑒別分析 Linear Discriminate Analysis ,LDA
聚類算法(Clustering Algorithms)
聚類方法, 類似回歸,是屬于描述問題和方法的類別,聚集方法通常被建模于基于幾何中心centroid-based和層次組織等系統(tǒng)。所有的方法都是有關使用數據中固有的結構,這樣以便更好將數據組織為存在最大共性的分組。
聚類類似于分類,但與分類的目的不同,是針對數據的相似性和差異性將一組數據分為幾個類別。屬于同一類別的數據間的相似性很大,但不同類別之間數據的相似性很小,跨類的數據關聯性很低。
k-Means聚類方法
期望最大化算法 Expectation Maximisation ,EM
關聯規(guī)則學習(Association Rule Learning)
關聯規(guī)則的學習方法是提取那些能解釋觀察到的變量之間的數據關系的規(guī)則。這些規(guī)則可以用于在大型多維數據集里,以便能發(fā)現重要的和商業(yè)上對某個組織或公司有用的的關聯。
關聯規(guī)則的挖掘過程主要包括兩個階段:第一階段為從海量原始數據中找出所有的高頻項目組;第二極端為從這些高頻項目組產生關聯規(guī)則。關聯規(guī)則挖掘技術已經被廣泛應用于金融行業(yè)企業(yè)中用以預測客戶的需求,各銀行在自己的ATM 機上通過捆綁客戶可能感興趣的信息供用戶了解并獲取相應信息來改善自身的營銷。
Apriori 算法
Eclat 算法
人工神經網絡(Artificial Neural Network)
人工神經網絡模型的靈感來自于生物神經網絡的結構和功能。他們是一類的模式匹配,常用于回歸和分類問題。
神經網絡作為一種先進的人工智能技術,因其自身自行處理、分布存儲和高度容錯等特性非常適合處理非線性的以及那些以模糊、不完整、不嚴密的知識或數據為特征的處理問題,它的這一特點十分適合解決數據挖掘的問題。典型的神經網絡模型主要分為三大類:第一類是以用于分類預測和模式識別的前饋式神經網絡模型,其主要代表為函數型網絡、感知機;第二類是用于聯想記憶和優(yōu)化算法的反饋式神經網絡模型,以Hopfield 的離散模型和連續(xù)模型為代表。第三類是用于聚類的自組織映射方法,以ART 模型為代表。雖然神經網絡有多種模型及算法,但在特定領域的數據挖掘中使用何種模型及算法并沒有統(tǒng)一的規(guī)則,而且人們很難理解網絡的學習及決策過程
因為各種各樣的問題類型有數百種分支的算法。一些經典的流行的方法:
感知器神經網絡 Perceptron
反向傳播 Back-Propagation
霍普菲爾網絡 Hopfield Network
自組織映射 Self-Organizing Map ,SOM
學習矢量量化 Learning Vector Quantization ,LVQ
深度學習(Deep Learning)
深度學習方法是一個現代的人工神經網絡方法升級版,利用豐富而又廉價的計算,建立更大和更復雜的神經網絡,許多方法都是涉及半監(jiān)督學習(大型數據中包含很少有標記的數據)。
受限波爾茲曼機 Restricted Boltzmann Machine ,RBM
深度置信網絡 Deep Belief Networks ,DBN
卷積神經網絡 Convolutional Neural Network,CNN
堆棧式自動編碼器 Stacked Auto-encoders
類似群集clustering方法, 降維是尋求和利用數據的內在結構,但在這種情況下,使用無監(jiān)督的方式只能較少的信息總結或描述數據。以監(jiān)督方式使用是有用的,能形成可視化的三維數據或簡化數據。
主成分分析 Principal Component Analysis ,PCA
偏最小二乘回歸 Partial Least Squares Regression ,PLS
薩蒙映射 Sammon Mapping
多維尺度 Multidimensional Scaling ,MDS
投影尋蹤 Projection Pursuit
由多個獨立訓練的弱模型組成,這些模型以某種方式結合進行整體預測。大量的精力需要投入學習什么弱類型以及它們的組合方式。這是一個非常強大的很受歡迎的技術類別:
Boosting/AdaBoost
自展輸入引導式聚合 Bootstrapped Aggregation
堆棧泛化 Stacked Generalization
梯度Boosting機器 Gradient Boosting Machines ,GBM
隨機森林 Random Forest
經過上面的描述,機器學習的主流算法基本都已經包括了。但是你肯定會想,這樣的分類是否真的科學?誠然,筆者并沒有找到完全科學的分類方式,按有無監(jiān)督的情況來進行分類似乎更準確一些。但是那只說明了算法本身的特征,而我們更需要的是從算法的功能用途來進行分類,這樣我們在遇到某一類問題時可以直接利用這些算法切入。
還有一些情況需要說明,比如支持向量機(SVM),既可以用于分類,也可用于回歸分析,很難歸于某一類。又比如一些具體的領域,如計算機視覺 (CV)、自然語言處理(NLP)、推薦系統(tǒng)等,復雜的實際情況更難使解決問題的算法歸于某一類,很可能是多種問題的集合。
這么多的算法,全部融會貫通真的是一件極其困難的事情,就算你全部掌握,也很難在具體問題中做出選擇。而對于實際的問題的處理,目前都有了主流的方法,以下10種算法是現在最流行的機器學習算法(含python代碼),幾乎可以解決絕大部分的問題。
1.線性回歸 Linear Regression
線性回歸是利用連續(xù)性變量來估計實際數值(例如房價,呼叫次數和總銷售額等)。我們通過線性回歸算法找出自變量和因變量間的最佳線性關系,圖形上可以確定一條最佳直線。這條最佳直線就是回歸線。這個回歸關系可以用Y=aX+b 表示。
Python 代碼:
#Import Library
#Import other necessary libraries like pandas, numpy...
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.邏輯回歸 Logistic Regression
邏輯回歸其實是一個分類算法而不是回歸算法。通常是利用已知的自變量來預測一個離散型因變量的值(像二進制值0/1,是/否,真/假)。簡單來說,它就是通過擬合一個邏輯函數來預測一個事件發(fā)生的概率。所以它預測的是一個概率值,它的輸出值應該在0到1之間。
Python 代碼:
#Import Library
from sklearn.linear_model import LogisticRegression
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create logistic regression object
model = LogisticRegression
# Train the model using the training sets and check score
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.決策樹 Decision Tree
既可以運用于類別變量(categorical variables)也可以作用于連續(xù)變量。這個算法可以讓我們把一個總體分為兩個或多個群組。分組根據能夠區(qū)分總體的最重要的特征變量/自變量進行。
Python 代碼:
#Import Library
#Import other necessary libraries like pandas, numpy...
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
給定一組訓練樣本,每個標記為屬于兩類,一個SVM訓練算法建立了一個模型,分配新的實例為一類或其他類,使其成為非概率二元線性分類。一個SVM模型的例子,如在空間中的點,映射,使得所述不同的類別的例子是由一個明顯的差距是盡可能寬劃分的表示。新的實施例則映射到相同的空間中,并預測基于它們落在所述間隙側上屬于一個類別。
Python 代碼:
#Import Library
from sklearn import svm
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create SVM classification object
model = svm.svc # there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail.
# 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)
5.樸素貝葉斯 Naive Bayes
樸素貝葉斯的思想基礎是這樣的:對于給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬于哪個類別。
Python 代碼:
#Import Library
from sklearn.naive_bayes import GaussianNB
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create SVM classification object model = GaussianNB # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)
6.K鄰近算法 KNN
這個算法既可以解決分類問題,也可以用于回歸問題,但工業(yè)上用于分類的情況更多。 KNN先記錄所有已知數據,再利用一個距離函數,找出已知數據中距離未知事件最近的K組數據,最后按照這K組數據里最常見的類別預測該事件。
Python 代碼:
#Import Library
from sklearn.neighbors import KNeighborsClassifier
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create KNeighbors classifier object model
KNeighborsClassifier(n_neighbors=6) # default value for n_neighbors is 5
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)
7.K-均值算法 K-means
首先從n個數據對象任意選擇 k 個對象作為初始聚類中心;而對于所剩下其它對象,則根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然 后再計算每個所獲新聚類的聚類中心(該聚類中所有對象的均值);不斷重復這一過程直到標準測度函數開始收斂為止。
Python 代碼:
#Import Library
from sklearn.cluster import KMeans
#Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset
# Create KNeighbors classifier object model
k_means = KMeans(n_clusters=3, random_state=0)
# Train the model using the training sets and check score
model.fit(X)
#Predict Output
predicted= model.predict(x_test)
8.隨機森林 Random Forest
隨機森林是對決策樹集合的特有名稱。隨機森林里我們有多個決策樹(所以叫“森林”)。為了給一個新的觀察值分類,根據它的特征,每一個決策樹都會給出一個分類。隨機森林算法選出投票最多的分類作為分類結果。
Python 代碼:
#Import Library
from sklearn.ensemble import RandomForestClassifier
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create Random Forest object
model= RandomForestClassifier
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)
9.降維算法 Dimensionality Reduction Algorithms
我們手上的數據有非常多的特征。雖然這聽起來有利于建立更強大精準的模型,但它們有時候反倒也是建模中的一大難題。怎樣才能從1000或2000個變量里找到最重要的變量呢?這種情況下降維算法及其他算法,如決策樹,隨機森林,PCA,因子分析,相關矩陣,和缺省值比例等,就能幫我們解決難題。
Python 代碼:
#Import Library
from sklearn import decomposition
#Assumed you have training and test data set as train and test
# Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features)
# For Factor analysis
#fa= decomposition.FactorAnalysis
# Reduced the dimension of training dataset using PCA
train_reduced = pca.fit_transform(train)
#Reduced the dimension of test dataset
test_reduced = pca.transform(test)
10.Gradient Boost/Adaboost算法
GBM和AdaBoost都是在有大量數據時提高預測準確度的boosting算法。Boosting是一種集成學習方法。它通過有序結合多個較弱的分類器/估測器的估計結果來提高預測準確度。這些boosting算法在DataCastke 、Kaggle等數據科學競賽中有出色發(fā)揮。
Python 代碼:
#Import Library
from sklearn.ensemble import GradientBoostingClassifier
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create Gradient Boosting Classifier object
model= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)
-END-
聯系客服