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