原文作者:Sunil Ray
譯者:TalkingData 張永超
原文鏈接:https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/
簡介
從廣義上講架馋,機器學(xué)習(xí)算法有三種類型:
監(jiān)督學(xué)習(xí)
該算法是由一個目標(biāo)/結(jié)果變量(也成為因變量)組成复哆,該變量可以從一組給定的預(yù)測變量中預(yù)測出來班利。使用這些變量的組合窗看,我們可以生成一個由輸入映射到所需輸出的的函數(shù)。該算法的訓(xùn)練過程會嘗試將模型的預(yù)測準(zhǔn)確度提高到訓(xùn)練數(shù)據(jù)所需的程度。具體的算法有:回歸丈挟、決策樹刁卜、隨機森林、kNN曙咽、Logistic回歸等等蛔趴。
無監(jiān)督學(xué)習(xí)
該算法中,沒有任何的目標(biāo)/結(jié)果變量以用來預(yù)測/估計例朱⌒⑶椋基本上用于不同的群體間的聚類,通常該算法用于對不同的群體進行分組洒嗤。具體的算法有:Apriori算法箫荡,K-means等。
強化學(xué)習(xí)
該算法是比較新的一個機器學(xué)習(xí)算法分類烁竭,使用該算法菲茬,機器會被訓(xùn)練來做出一些特定的決策。此時機器會被暴露在一個特定的環(huán)境中派撕,通過反復(fù)試驗不斷的訓(xùn)練自己婉弹,知道最終得到一個比較好的決策結(jié)果。該算法會從過去的經(jīng)驗中學(xué)習(xí)终吼,并嘗試捕捉最佳的結(jié)果知識以做出更加準(zhǔn)確的決策镀赌。典型的算法有:馬爾可夫決策過程等。
通用機器學(xué)習(xí)算法列表
下面是一些通用的機器學(xué)習(xí)算法际跪,這些算法基本上能夠解決大部分的數(shù)據(jù)相關(guān)問題:
1.??? 線性回歸(Linear Regression)
2.??? 邏輯回歸(Logistic Regression)
3.??? 決策樹(Decision Tree)
4.??? 支持向量機(SVM)
5.??? 樸素貝葉斯(Naive Bayes)
6.??? k近鄰(kNN)
7.??? k均值(K-Means)
8.??? 隨機森林(Random Forest)
9.??? 降維算法(Dimensionality Reduction Algorithms)
10.? 梯度增強算法(Gradient Boosting algorithms)
GBM
XGBoost
LightGBM
CatBoos
線性回歸
線性回歸主要用于根據(jù)連續(xù)的變量來估計實際值(例如:房屋成本商佛,通話次數(shù),總銷售額等)姆打。在該算法中良姆,我們通過擬合最佳的分界線來建立獨立變量和因變量之間的關(guān)系。該最佳的擬合線稱為回歸線幔戏,并可以由線性方程Y = a * X + b表示玛追。例如:我們要求一個五年級的孩子根據(jù)班上同學(xué)的體重來排序,而不告訴他同學(xué)們的具體體重闲延。他會怎么做呢痊剖?他可能會根據(jù)同學(xué)們的身高和體型來判斷某個同學(xué)的體重,然后進行排序垒玲。我們并沒有告訴他身高和體型與體重之間的關(guān)系陆馁,而他已經(jīng)可以通過眼睛的觀察來得到身高和體型與體重之間的關(guān)系了,而這個關(guān)系是符合上述線性回歸的方程的合愈。
在上述方程中:
Y --- 因變量
a --- 傾斜量
X --- 自變量
b --- 截距
系數(shù)a和b是基于最小化數(shù)據(jù)點與回歸線之間的距離的平方差的總和而得出的叮贩。
假設(shè)我們有一些人員的身體和體重的數(shù)據(jù)击狮,將其繪制在圖表中。如下圖所示:
這里我們已經(jīng)找到了最佳的擬合線妇汗,其方程表示為y = 0.2811*x + 13.9帘不,為圖中黑色線。那么我們就可以使用這個方程來根據(jù)某人的身高杨箭,得到其體重了。
線性回歸主要有兩種類型:單一線性回歸和多元線性回歸储狭。單一線性回歸顧名思義互婿,就是僅由一個獨立的自變量表征,而多元線性回歸由多于一個自變量來表征辽狈。在尋找最佳擬合線時慈参,可以擬合多項式或曲線回歸。
本文中的代碼大部分為演示所用刮萌,在實際應(yīng)用中需要替換甚至重寫部分代碼驮配,請慎重復(fù)制粘貼!
Python code
1# Import Library
2# Import other necessary libraries like pandas, numpy...
3from sklearn import linear_model
4# Load Train and Test datasets
5# Identify feature and response variable(s) and values must be numeric and numpy arrays
6x_train=input_variables_values_training_datasets
7y_train=target_variables_values_training_datasets
8x_test=input_variables_values_test_datasets
9# Create linear regression object
10linear = linear_model.LinearRegression()
11# Train the model using the training sets and check score
12linear.fit(x_train, y_train)
13linear.score(x_train, y_train)
14# Equation coefficient and Intercept
15print('Coefficient: \n', linear.coef_)
16print('Intercept: \n', linear.intercept_)
17# Predict Output
18predicted= linear.predict(x_test)
2邏輯回歸
不要被這個名字所糊弄了着茸! 其實邏輯回歸并不是回歸算法壮锻。它基于給定的一組自變量來估計離散值(二進制值,如0/1涮阔,是/否猜绣,真/假)。簡單的說敬特,它通過將數(shù)據(jù)擬合到logit函數(shù)來預(yù)測事件發(fā)生的可能性掰邢。因此,它通常也被稱為logit回歸伟阔。因為它預(yù)測了可能性辣之,即概率,因此其輸出值在0和1之間皱炉。例如:你的朋友給你出了一道難題怀估,并且他并不知道你的知識范圍,而你能給出的結(jié)果只有能解決或者不能解決娃承。假如這道題是高級物理學(xué)科的題目奏夫,你可能只有大學(xué)本科的經(jīng)歷,你給出能解決的概率可能只有20%历筝,而如何你恰好是一個物理學(xué)博士酗昼,你給出解決的概率可能就有80%了,這就是邏輯回歸梳猪。
從數(shù)學(xué)的含義上講麻削,邏輯回歸就是結(jié)果的對數(shù)幾率被建模為預(yù)測變量的線性組合蒸痹。如下:
1odds = p / (1- p) = probabilityofevent occurrence / probabilityofnotevent occurrence
2ln(odds) = ln(p / (1- p))
3logit(p) = ln(p / (1- p)) = b0+b1X1+b2X2+b3X3....+bkXk
上述公式中,p是存在感興趣特征的概率呛哟。它選擇最大化觀察樣本值的可能性的參數(shù)叠荠,而不是最小化平方誤差的總和(如在普通回歸中那樣)。
Python code
1# Import Library
2fromsklearn.linear_modelimportLogisticRegression
3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
4# Create logistic regression object
5model = LogisticRegression()
6# Train the model using the training sets and check score
7model.fit(X, y)
8model.score(X, y)
9# Equation coefficient and Intercept
10print('Coefficient: \n', model.coef_)
11print('Intercept: \n', model.intercept_)
12# Predict Output
13predicted= model.predict(x_test)
3決策樹
決策樹是一種主要用于分類問題的監(jiān)督學(xué)習(xí)算法扫责。該算法不僅僅支持分類問題榛鼎,還支持連續(xù)因變量問題。在這個算法中鳖孤,我們將人口分成兩個或更多的齊次集合者娱。這是基于最重要的屬性/獨立變量來完成的,以盡可能地形成不同的組苏揣。
如上圖所示黄鳍,可以看到該算法根據(jù)多個屬性將一個群體分為了四個不同的群體,以識別“他們是否會參加比賽”平匈。為了分組框沟,它使用各種技術(shù),如基尼增炭,信息增益忍燥,卡方,熵等弟跑。
另一種理解決策樹的絕佳方式是玩一個微軟上經(jīng)典的游戲 --- Jezzball灾前。基本上孟辑,你有一個有活動墻壁的房間哎甲,你需要創(chuàng)造墻壁,這樣最大的區(qū)域就會被清理掉饲嗽。
因此炭玫,每一次你使用墻壁來劃分房間,你都將試圖將一個房間劃分為兩部分貌虾。決策樹也非常類似這種方式吞加。
Python code
1# Import Library
2# Import other necessary libraries like pandas, numpy...
3from sklearn import tree
4# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
5# Create tree object
6model = tree.DecisionTreeClassifier(criterion='gini')# for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini ?
7# model = tree.DecisionTreeRegressor() for regression
8# Train the model using the training sets and check score
9model.fit(X, y)
10model.score(X, y)
11# Predict Output
12predicted= model.predict(x_test)
4SVM(支持向量機)
SVM是一個分類方法。在該算法中尽狠,我們將每個數(shù)據(jù)項繪制為n維空間中的一個點(其中n是您擁有的要素數(shù))衔憨,每個要素的值都是特定坐標(biāo)的值。
例如袄膏,如果我們只有個人的身高和頭發(fā)長度兩個特征践图,我們首先在二維空間中繪制這兩個變量,其中每個點有兩個坐標(biāo)(這些坐標(biāo)被稱為支持向量)沉馆。
現(xiàn)在码党,我們將找到一些分割兩個不同分類數(shù)據(jù)組之間線德崭。而這條線將使得兩組數(shù)據(jù)中最近點的距離最遠。
在上面所示的例子中揖盘,將數(shù)據(jù)分成兩個不同分類組的線是黑線眉厨,因為兩個最近點離線最遠。這條線就是我們的分類器兽狭。然后憾股,根據(jù)測試數(shù)據(jù)在線兩側(cè)的位置,就可以區(qū)分測試數(shù)據(jù)屬于哪個類了箕慧。
Python code
1# Import Library
2from sklearn import svm
3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
4# Create SVM classification object
5model = svm.svc()# there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail.
6# Train the model using the training sets and check score
7model.fit(X, y)
8model.score(X, y)
9# Predict Output
10predicted= model.predict(x_test)
5樸素貝葉斯
樸素貝葉斯是一種基于貝葉斯定理的分類技術(shù)荔燎,假設(shè)預(yù)測變量之間具有獨立性。簡而言之销钝,樸素貝葉斯分類器假定類中特定特征的存在與任何其他特征的存在無關(guān)。例如琐簇,如果果實呈紅色蒸健,圓形,直徑約3英寸婉商,則可認為其為蘋果似忧。即使這些特征依賴于彼此或者依賴于其他特征的存在,樸素貝葉斯分類器也會考慮所有這些特性來獨立地貢獻該水果是蘋果的可能性丈秩。
樸素貝葉斯模型很容易構(gòu)建盯捌,對于非常大的數(shù)據(jù)集特別有用。貝葉斯定理提供了一種從P(c)蘑秽,P(x)和P(x | c)計算后驗概率P(c | x)的方法饺著。看下面的公式:
這里:
P(c | x)是給定預(yù)測器(屬性)的類(目標(biāo))的后驗概率肠牲。
P(c)是類的先驗概率幼衰。
P(x | c)是預(yù)測器給定類的概率的可能性。
P(x)是預(yù)測變量的先驗概率缀雳。
例子:讓我們用一個例子來理解它渡嚣。下面我有一個天氣和相應(yīng)的目標(biāo)變量“是否參加比賽”的訓(xùn)練數(shù)據(jù)集。現(xiàn)在肥印,我們需要根據(jù)天氣情況來分類球員是否參加比賽识椰。讓我們按照以下步驟來執(zhí)行它。
將數(shù)據(jù)集轉(zhuǎn)換為頻率表
通過查找像Overcast probability = 0.29和播放概率為0.64的概率來創(chuàng)建Likelihood表深碱。
現(xiàn)在腹鹉,使用樸素貝葉斯方程來計算每個類別的后驗概率。具有最高后驗概率的類別是預(yù)測的結(jié)果莹痢。
Python code
1# Import Library
2fromsklearn.naive_bayesimportGaussianNB
3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
4# Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link
5# Train the model using the training sets and check score
6model.fit(X, y)
7# Predict Output
8predicted= model.predict(x_test)
6kNN (k-最近鄰)
kNN可以用于分類和回歸問題种蘸。然而皮服,它在業(yè)內(nèi)的分類問題中被更廣泛地使用恩伺。 K最近鄰算法是一個簡單的算法,它存儲所有可用的案例,并通過其k個鄰居的多數(shù)投票來分類新案例殖演。被分配給類的情況在距離函數(shù)測量的k近鄰中最為常見。
這些距離函數(shù)可以是歐幾里得讳苦,曼哈頓芒炼,閔可夫斯基和海明距離。前三個函數(shù)用于連續(xù)函數(shù)滨彻,第四個函數(shù)(Hamming)用于分類變量藕届。如果K = 1,那么該情況被簡單地分配給其最近鄰居的類別亭饵。有時休偶,在執(zhí)行kNN建模時選擇K是一項挑戰(zhàn)。
kNN可以很容易地映射到我們的真實生活中辜羊。如果你想了解一個你沒有信息的人踏兜,你可能想知道他的親密朋友和他進入的圈子并獲得他/她的信息!
選擇kNN之前需要考慮的事項: * KNN在計算上很耗時 * 在使用kNN時八秃,變量應(yīng)該被標(biāo)準(zhǔn)化碱妆,否則更高的范圍變量會偏向它 * 在進入kNN之前要更多地進行數(shù)據(jù)預(yù)處理,如異常值昔驱,噪音消除等疹尾。
Python code
1# Import Library
2fromsklearn.neighborsimportKNeighborsClassifier
3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
4# Create KNeighbors classifier object model
5KNeighborsClassifier(n_neighbors=6)# default value for n_neighbors is 5
6# Train the model using the training sets and check score
7model.fit(X, y)
8# Predict Output
9predicted= model.predict(x_test)
7K-均值(K-Means)
K-均值是一種解決聚類問題的無監(jiān)督算法。其過程遵循一個簡單的方法骤肛,通過一定數(shù)量的聚類(假設(shè)k個聚類)對給定的數(shù)據(jù)集進行分類纳本。群集內(nèi)的數(shù)據(jù)點與同級群組是同質(zhì)且異質(zhì)的。
例如在白紙上隨機撒上的墨水萌衬, K-均值有點類似這個活動饮醇,每一塊墨水水漬可以理解為一個群組。
K-means如何形成群集:
K-means為每個簇選取k個點秕豫,稱為質(zhì)心朴艰。
每個數(shù)據(jù)點形成具有最接近質(zhì)心的群集,即k個群集混移。
根據(jù)現(xiàn)有集群成員查找每個集群的質(zhì)心祠墅。這里我們有新的質(zhì)心。
由于我們有新的質(zhì)心歌径,請重復(fù)步驟2和3.從新質(zhì)心找到每個數(shù)據(jù)點的最近距離毁嗦,并與新的k-簇進行關(guān)聯(lián)。重復(fù)這個過程直到收斂發(fā)生回铛,即質(zhì)心不變狗准。
如何確定K的值:
在K-means中克锣,我們有簇,每個簇都有自己的質(zhì)心腔长。質(zhì)心與聚類內(nèi)的數(shù)據(jù)點之間的差的平方和構(gòu)成該聚類的平方值的和袭祟。另外,當(dāng)所有群集的平方值總和相加時捞附,群集解決方案的平方和總和為總和巾乳。
我們知道,隨著群集數(shù)量的增加鸟召,這個值會持續(xù)下降胆绊,但是如果您繪制結(jié)果,您可能會看到平方距離的總和急劇下降到某個k值欧募,然后再慢得多压状。在這里,我們可以找到聚類的最佳數(shù)量跟继。
Python code
1# Import Library
2from sklearn.cluster import KMeans
3# Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset
4# Create KNeighbors classifier object model
5k_means = KMeans(n_clusters=3, random_state=0)
6# Train the model using the training sets and check score
7model.fit(X)
8# Predict Output
9predicted= model.predict(x_test)
8
隨機森林
隨機森林是一個決策樹集合的術(shù)語何缓。在隨機森林中,集成了多個決策樹(所謂的“森林”)还栓。要根據(jù)屬性對新對象進行分類,每棵樹都會給出一個分類传轰,并且該樹會為該分類“投票”剩盒。森林選擇票數(shù)最多的分類,即為最終的分類慨蛙。
每株樹種植和生長如下:
如果訓(xùn)練集中的病例數(shù)為N辽聊,則隨機抽取N個病例的樣本,但需要更換期贫。這個樣本將成為培育樹的培訓(xùn)集跟匆。
如果有M個輸入變量,則指定一個數(shù)m << M通砍,以便在每個節(jié)點處從M中隨機選擇m個變量玛臂,并且使用這些m上的最佳分割來分割節(jié)點。在森林生長期間封孙,m的值保持不變迹冤。
每棵樹都盡可能地生長。沒有修剪虎忌。
Python code
1# Import Library
2from sklearn.ensemble import RandomForestClassifier
3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
4# Create Random Forest object
5model= RandomForestClassifier()
6# Train the model using the training sets and check score
7model.fit(X, y)
8# Predict Output
9predicted= model.predict(x_test)
9
維度降低算法
在過去的4-5年里泡徙,在每個可能的階段數(shù)據(jù)采集呈指數(shù)級增長。企業(yè)/政府機構(gòu)/研究機構(gòu)不僅擁有新的資源膜蠢,而且還在詳細捕獲數(shù)據(jù)堪藐。
例如:電子商務(wù)公司正在抓住更多有關(guān)客戶的細節(jié)莉兰,例如他們的人口統(tǒng)計數(shù)據(jù),網(wǎng)絡(luò)爬行歷史礁竞,他們喜歡或不喜歡的內(nèi)容糖荒,購買歷史記錄,反饋信息等等苏章,以便為他們提供比最近的雜貨店老板更多的個性化關(guān)注寂嘉。
作為一名數(shù)據(jù)科學(xué)家,我們提供的數(shù)據(jù)還包含許多功能枫绅,這對構(gòu)建良好的健壯模型聽起來不錯泉孩,但是存在挑戰(zhàn)。你如何確定1000或2000年以外的重要變量并淋?在這種情況下寓搬,降維算法可以幫助我們連同各種其他算法,如決策樹县耽,隨機森林句喷,PCA,因子分析兔毙,基于相關(guān)矩陣的識別唾琼,缺失值比等。
Python code
1# Import Library
2from sklearn import decomposition
3# Assumed you have training and test data set as train and test
4# Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features)
5# For Factor analysis
6# fa= decomposition.FactorAnalysis()
7# Reduced the dimension of training dataset using PCA
8train_reduced = pca.fit_transform(train)
9# Reduced the dimension of test dataset
10test_reduced = pca.transform(test)
10梯度下降算法
10.1. GBM
當(dāng)我們處理大量數(shù)據(jù)以進行具有高預(yù)測能力的預(yù)測時澎剥,GBM是一種增強算法锡溯。 Boosting實際上是一種學(xué)習(xí)算法集合,它將幾個基本估計量的預(yù)測結(jié)合起來哑姚,以提高單個估計量的魯棒性祭饭。它將多個弱預(yù)測器或平均預(yù)測器組合成強大的預(yù)測器。這些提升算法在Kaggle叙量,AV Hackathon倡蝙,CrowdAnalytix等數(shù)據(jù)科學(xué)競賽中始終運作良好。
Python code
1# Import Library
2from sklearn.ensemble import GradientBoostingClassifier
3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
4# Create Gradient Boosting Classifier object
5model= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)
6# Train the model using the training sets and check score
7model.fit(X, y)
8# Predict Output
9predicted= model.predict(x_test)
10.2. XGBoost
XGBoost是另一個經(jīng)典的漸變增強算法绞佩,被稱為在一些Kaggle比賽中獲勝的關(guān)鍵性算法寺鸥。
XGBoost具有非常高的預(yù)測能力,使其成為事件精確度的最佳選擇品山,因為它具有線性模型和樹學(xué)習(xí)算法析既,使得該算法比現(xiàn)有梯度增強技術(shù)快近10倍。
支持包括各種目標(biāo)函數(shù)谆奥,包括回歸眼坏,分類和排名。
XGBoost最有趣的事情之一就是它也被稱為正規(guī)化提升技術(shù)。這有助于減少過度裝配建模宰译,并且對Scala檐蚜,Java,R沿侈,Python闯第,Julia和C ++等一系列語言提供大量支持。
在許多包含GCE缀拭,AWS咳短,Azure和Yarn群集的機器上支持分布式和廣泛的培訓(xùn)。 XGBoost還可以與Spark蛛淋,F(xiàn)link和其他云數(shù)據(jù)流系統(tǒng)集成在一起咙好,每次迭代過程中都有內(nèi)置的交叉驗證。
Python code
1from xgboost import XGBClassifier
2from sklearn.model_selection import train_test_split
3from sklearn.metrics import accuracy_score
4X = dataset[:,0:10]
5Y = dataset[:,10:]
6seed = 1
7X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=seed)
8model = XGBClassifier()
9model.fit(X_train, y_train)
10#Make predictions for test data
11y_pred = model.predict(X_test)
10.3. LightGBM
LightGBM是一種梯度提升框架褐荷,使用基于樹的學(xué)習(xí)算法勾效。它的設(shè)計是分布式和高效的,具有以下優(yōu)點:
更快的訓(xùn)練速度和更高的效率
降低內(nèi)存使用量
更好的準(zhǔn)確性
支持并行和GPU學(xué)習(xí)
能夠處理大型數(shù)據(jù)
該框架是一種基于決策樹算法的快速高性能梯度提升算法叛甫,用于排序层宫、分類和許多其他機器學(xué)習(xí)任務(wù)。它是在Microsoft的分布式機器學(xué)習(xí)工具包項目下開發(fā)的其监。
由于LightGBM基于決策樹算法萌腿,因此它將樹葉以最佳擬合進行分割。因此抖苦,當(dāng)在Light GBM中的同一片葉上生長時哮奇,葉式算法可以比平面式算法減少更多的損失,因此可以獲得更好的精度睛约,而現(xiàn)有的任何增強算法都很難達到這些精度。
Python code
1data = np.random.rand(500, 10)# 500 entities, each contains 10 features
2label = np.random.randint(2, size=500)# binary target
3train_data = lgb.Dataset(data, label=label)
4test_data = train_data.create_valid('test.svm')
5param = {'num_leaves':31, 'num_trees':100, 'objective':'binary'}
6param['metric'] = 'auc'
7num_round = 10
8bst = lgb.train(param, train_data, num_round, valid_sets=[test_data])
9bst.save_model('model.txt')
10# 7 entities, each contains 10 features
11data = np.random.rand(7, 10)
12ypred = bst.predict(data)
10.4. Catboost
CatBoost是Yandex最近開源的機器學(xué)習(xí)算法哲身。它可以輕松地與Google的TensorFlow和Apple的Core ML等深度學(xué)習(xí)框架相整合辩涝。
CatBoost最棒的部分是它不需要像其他ML模型那樣的大量數(shù)據(jù)訓(xùn)練,并且可以處理各種數(shù)據(jù)格式;不會破壞它的可靠性勘天。
在使用和執(zhí)行Catboost算法之前怔揩,請確保數(shù)據(jù)中的缺失值已經(jīng)被處理。
Catboost可以自動處理分類變量而不顯示類型轉(zhuǎn)換錯誤脯丝,這有助于您更專注于更好地調(diào)整模型商膊。
Python code
1importpandasaspd
2importnumpyasnp
3fromcatboostimportCatBoostRegressor
4#Read training and testing files
5train = pd.read_csv("train.csv")
6test = pd.read_csv("test.csv")
7#Imputing missing values for both train and test
8train.fillna(-999, inplace=True)
9test.fillna(-999,inplace=True)
10#Creating a training set for modeling and validation set to check model performance
11X = train.drop(['Item_Outlet_Sales'], axis=1)
12y = train.Item_Outlet_Sales
13fromsklearn.model_selectionimporttrain_test_split
14X_train, X_validation, y_train, y_validation = train_test_split(X, y, train_size=0.7, random_state=1234)
15categorical_features_indices = np.where(X.dtypes != np.float)[0]
16#importing library and building model
17fromcatboostimportCatBoostRegressormodel=CatBoostRegressor(iterations=50, depth=3, learning_rate=0.1, loss_function='RMSE')
18model.fit(X_train, y_train,cat_features=categorical_features_indices,eval_set=(X_validation, y_validation),plot=True)
19submission = pd.DataFrame()
20submission['Item_Identifier'] = test['Item_Identifier']
21submission['Outlet_Identifier'] = test['Outlet_Identifier']
22submission['Item_Outlet_Sales'] = model.predict(test)
總結(jié)
至此,相信你對機器學(xué)習(xí)的各個主要算法有了一個大概的了解宠进,文中給出了各個算法的邏輯代碼晕拆,你可以從這里開始,嘗試解決一些問題材蹬,并在過程中加深理解实幕。關(guān)于數(shù)據(jù)吝镣,你可以在網(wǎng)絡(luò)上找到很多,而且在一些所使用到的Python庫中也常內(nèi)置了各種數(shù)據(jù)集昆庇,你可以查看相應(yīng)的官方文檔查找并直接使用末贾。