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