0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

機(jī)器學(xué)習(xí)的100天作戰(zhàn)計(jì)劃與教程

電子工程師 ? 來源:未知 ? 作者:李倩 ? 2018-08-03 09:50 ? 次閱讀

機(jī)器學(xué)習(xí)已經(jīng)成為人工智能中發(fā)展最快,應(yīng)用最廣、最重要的分支之一。但是這條學(xué)習(xí)之路似乎并不是那么容易,也不總是一帆風(fēng)順的。

相信每一個(gè)學(xué)習(xí)機(jī)器學(xué)習(xí)的小伙伴都碼過不少的學(xué)習(xí)資源,無論是在線課程還是大佬們整理的學(xué)習(xí)PPT,但是看的速度遠(yuǎn)不及碼的速度;有的同學(xué)數(shù)學(xué)基礎(chǔ)比較差,就想先把數(shù)學(xué)補(bǔ)足再學(xué)習(xí),但是往往數(shù)學(xué)也沒補(bǔ)上來,機(jī)器學(xué)習(xí)還沒開始就已經(jīng)放棄了;還有很多同學(xué)看到現(xiàn)在深度學(xué)習(xí)聲勢最盛,直接學(xué)習(xí)深度學(xué)習(xí),結(jié)果發(fā)現(xiàn)學(xué)習(xí)到的內(nèi)容也像空中樓閣,不扎實(shí)。

無論是數(shù)學(xué)知識、經(jīng)典與重要的算法還是編碼實(shí)踐,每天都會有人在路上敗下陣來而放棄學(xué)習(xí),仿佛我們永遠(yuǎn)都停留在入門階段。

其實(shí)機(jī)器學(xué)習(xí)涵蓋的知識面非常多,而且不僅要學(xué)習(xí)理論還有實(shí)踐同樣不能忽視。如果基礎(chǔ)薄弱,學(xué)習(xí)起來肯定是會遇到很多困難的,但就一定不行嗎?如何在基礎(chǔ)薄弱的條件下進(jìn)行有效的學(xué)習(xí)是很多人都非常關(guān)心的。至此特此根據(jù)作者Avik-Hain 的博客為大家精心準(zhǔn)備了“機(jī)器學(xué)習(xí)百天大作戰(zhàn)”的系列學(xué)習(xí)計(jì)劃與教程,從理論與實(shí)踐結(jié)合,在100天左右的時(shí)間里從理論+實(shí)踐結(jié)合的方式,有條理有邏輯的幫助大家完成入門,助攻進(jìn)階。相信大家一定可以受益頗多!

本期內(nèi)容是此系列的第一期,主要內(nèi)容有:

數(shù)據(jù)處理的實(shí)踐流程

簡單的線性回歸與實(shí)現(xiàn)

多元線性回歸與實(shí)踐

Logistic 回歸及實(shí)踐

支持向量機(jī) SVM 及其實(shí)現(xiàn)

KNN 算法與實(shí)現(xiàn)

決策樹模型與實(shí)現(xiàn)

Day 1

數(shù)據(jù)處理

機(jī)器學(xué)習(xí)中的數(shù)據(jù)處理實(shí)踐流程主要如下:

第一步:導(dǎo)入所需的庫。Numpy 和 Pandas 是兩個(gè)必需的,也是最基本的數(shù)據(jù)處理庫。

importnumpyasnpimportpandasaspd

第二步:導(dǎo)入數(shù)據(jù)集。數(shù)據(jù)集通常是 .csv 的格式。一個(gè) csv 文件能夠儲存表格數(shù)據(jù),每行都代表一條數(shù)據(jù),我們可以使用 Pandas 中的 read_csv 方法來讀取 csv 文件并將其作為 dataframe 處理。隨后,我們可以將 dataframe 中的矩陣、向量和標(biāo)量分離開來單獨(dú)處理。

dataset=pd.read_csv('Data.csv')X=dataset.iloc[:,:-1].valuesY=dataset.iloc[:,3].values

第三步:處理缺失數(shù)據(jù)。數(shù)據(jù)通常會因?yàn)橐恍┰蚨笔?,我們需要對其進(jìn)行處理以便其不會對機(jī)器學(xué)習(xí)模型的性能造成影響。我們可以通過對整列數(shù)據(jù)進(jìn)行平均化或中值化來填補(bǔ)缺失數(shù)據(jù),這可以通過 sklearn.preprocessing 中的 Imputer 類方法來解決這個(gè)問題。

fromsklearn.preprocessingimportImputerimputer=Imputer(missing_values="NaN",strategy="mean",axis=0)imputer=imputer.fit(X[:,1:3])X[:,1:3]=imputer.transform(X[:,1:3])

第四步:編碼類數(shù)據(jù)。類數(shù)據(jù)是一個(gè)包含標(biāo)簽值的變量,通常它們被限制在一個(gè)固定的集合中。例如,‘Yes’ 或 ‘No’ 是無法用于模型中的數(shù)學(xué)表達(dá)式,因此我們需要對這些類數(shù)據(jù)進(jìn)行編碼,將其轉(zhuǎn)化為數(shù)值。我們可以通過 sklearn.preprocessing 中的 LabelEncoder 類方法來解決這個(gè)問題。

fromsklearn.preprocessingimportLabelEncoder,OneHotEncoderlabelencoder_X=LabelEncoder()X[:,0]=labelencoder_X.fit_transform(X[:,0])

第五步:將數(shù)據(jù)集分離為訓(xùn)練集和測試集。在機(jī)器學(xué)習(xí)中,我們通常需要對源數(shù)據(jù)集進(jìn)行處理,以便分離出訓(xùn)練集和測試集,分別用于模型的訓(xùn)練和測試。通常所使用的分離比為8:2,我們可以通過導(dǎo)入 sklearn.crossvalidation 庫的 train_test_split() 方法來解決這個(gè)問題。

fromsklearn.cross_validationimporttrain_test_splitX_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.2,random_state=0)

第六步:特征縮放。大多數(shù)機(jī)器學(xué)習(xí)算法會采用歐式距離,來衡量兩個(gè)數(shù)據(jù)點(diǎn)特征變化情況。相比于低量級的特征,高量級的特征會在距離計(jì)算中占更大的權(quán)重??梢酝ㄟ^特征標(biāo)準(zhǔn)化或 Z 分?jǐn)?shù)正則化來解決,我們可以導(dǎo)入 sklearn.preprocessing 庫的 StandardScalar 方法。

fromsklearn.preprocessingimportStandardScalersc_X=StandardScaler()X_train=sc_X.fit_transform(X_train)X_test=sc_X.fit_transform(X_test)

Day 2

簡單的線性回歸

▌簡單的線性回歸模型

使用單個(gè)特征來預(yù)測結(jié)果。在這種回歸模型中,我們嘗試最小化預(yù)測值和真實(shí)值之間的損失,來得到最佳的擬合性能。

▌線性回歸的實(shí)現(xiàn)

第一步:數(shù)據(jù)預(yù)處理。回歸模型中的數(shù)據(jù)預(yù)處理過程遵循上述的數(shù)據(jù)處理流程,主要包括導(dǎo)入所需的庫,導(dǎo)入所需的數(shù)據(jù)集,檢查缺失數(shù)據(jù),分離數(shù)據(jù)集以及特征縮放。

importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltdataset=pd.read_csv('studentscores.csv')X=dataset.iloc[:,:1].valuesY=dataset.iloc[:,1].valuesfromsklearn.cross_validationimporttrain_test_splitX_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=1/4,random_state=0)

第二步:用訓(xùn)練數(shù)據(jù)擬合簡單的線性回歸模型。首先,我們導(dǎo)入 sklearn.linear_model 中的 LinearRegression 類。然后,我們?yōu)槟繕?biāo) regressor 創(chuàng)建一個(gè) LinearRegression 類?,F(xiàn)在,我們可以使用 LinearRegression 類的 fit() 方法來用訓(xùn)練數(shù)據(jù)去擬合我們的目標(biāo) regressor。

fromsklearn.linear_modelimportLinearRegressionregressor=LinearRegression()regressor=regressor.fit(X_train,Y_train)

第三步:預(yù)測結(jié)果。使用我們訓(xùn)練好的模型,在測試集上預(yù)測我們的結(jié)果。首先,我們?yōu)轭A(yù)測結(jié)果創(chuàng)建一個(gè)向量 Y-pred。然后,我們對訓(xùn)練好的 regressor 使用 LinearRegression 類的預(yù)測方法來進(jìn)行預(yù)測。

Y_pred=regressor.predict(X_test)

第四步:可視化。最后一步是可視化最后的結(jié)果,我們可以采用 matplotlib.pyplot 庫來為模型的訓(xùn)練結(jié)果和測試結(jié)果做出散點(diǎn)圖,可視化模型的預(yù)測結(jié)果。

plt.scatter(X_train,Y_train,color='red')plt.plot(X_train,regressor.predict(X_train),color='blue')

plt.scatter(X_test,Y_test,color='red')plt.plot(X_test,regressor.predict(X_test),color='blue')

Day 3

多元線性回歸

▌多元線性回歸模型

旨在通過擬合一個(gè)線性等式,探究兩個(gè)或多個(gè)特征變量之間的關(guān)系。多元線性回歸的處理步驟與簡單線性回歸的流程大致相似,不同就在于模型評估處理。由于多個(gè)變量對最終預(yù)測結(jié)果的影響是不同的,因此我們可以進(jìn)一步評估對模型影響最大的變量以及各變量之間的相互關(guān)系。一個(gè)好的多元線性回歸模型需要滿足以下幾個(gè)條件:

線性:不論是獨(dú)立還是非獨(dú)立的變量,它們之間的關(guān)系都應(yīng)該是線性的。

方差齊性 (Homoscedasticity):常量間誤差要始終存在。

多元正態(tài)性 (Multivariate Normality):多元回歸假設(shè)變量之間的殘差服從正態(tài)分布。

缺乏多重性 (Lack of Multicollinearity):這里假設(shè)數(shù)據(jù)間不存在多重性。只有當(dāng)特征或變量之間獨(dú)立時(shí)才存在多重性。

此外,多元回歸模型中使用的類數(shù)據(jù)是處理非數(shù)值數(shù)據(jù)類型非常有效的手段。類數(shù)據(jù)通常涉及一些表示類別數(shù)值的數(shù)據(jù),如性別(男/女)。在回歸模型中,這些數(shù)值通常可以被表示為啞變量,即用1或0代表類別數(shù)據(jù)出現(xiàn)或不出現(xiàn)。此外,對于兩個(gè)類數(shù)據(jù)之間存在相關(guān)性的問題,我們通常降低一個(gè)類別數(shù)量,以便正常使用回歸模型。

▌深入多元線性回歸

第一步:數(shù)據(jù)預(yù)處理

導(dǎo)入庫、導(dǎo)入數(shù)據(jù)集、編碼分類數(shù)據(jù)、分離數(shù)據(jù)為訓(xùn)練集和測試集

importpandasaspdimportnumpyasnpdataset=pd.read_csv('50_Startups.csv')X=dataset.iloc[:,:-1].valuesY=dataset.iloc[:,4].valuesfromsklearn.preprocessingimportLabelEncoder,OneHotEncoderlabelencoder=LabelEncoder()X[:,3]=labelencoder.fit_transform(X[:,3])onehotencoder=OneHotEncoder(categorical_features=[3])X=onehotencoder.fit_transform(X).toarray()X=X[:,1:]fromsklearn.cross_validationimporttrain_test_splitX_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.2,random_state=0)

第二步:將多個(gè)線性回歸擬合到訓(xùn)練集

fromsklearn.linear_modelimportLinearRegressionregressor=LinearRegression()regressor.fit(X_train,Y_train)

第三步:預(yù)測測試集結(jié)果

y_pred=regressor.predict(X_test)

Day 4、5、6

Logistic 回歸與深入實(shí)踐

這部分將深入研究 Logistic 回歸模型,包括它背后的數(shù)學(xué)原理,如何計(jì)算成本函數(shù),以及如何將梯度下降算法應(yīng)用于成本函數(shù)以最小化預(yù)測誤差等內(nèi)容。

▌Logistic 回歸

Logistic 回歸通常用于不同類別的分類問題,旨在通過觀察現(xiàn)有目標(biāo)類預(yù)測所屬的類別。通常所給的是離散的二值數(shù)據(jù),介于0和1之間。Logistic 回歸最常見的例子是在選舉期間民眾的投票情況。

Logistic 回歸模型采用潛在的 logistic 函數(shù)得到估計(jì)概率值,來衡量獨(dú)立變量 (通常使我們要預(yù)測的標(biāo)簽值) 與一個(gè)或多個(gè)非獨(dú)立變量 (我們的特征值) 之間的關(guān)系。Logistic 函數(shù),也被稱為 sigmoid 函數(shù),這是一個(gè) S 型曲線函數(shù),它能夠?qū)⒐烙?jì)的概率值轉(zhuǎn)換為二進(jìn)制值0或1,以便模型預(yù)測得到結(jié)果。

與線性回歸模型得到連續(xù)型輸出不同,Logistic 回歸最終的結(jié)果是離散的。

▌深入 Logistic 回歸實(shí)戰(zhàn)

下面我以一個(gè)實(shí)例來具體說明整個(gè) Logistic 回歸的流程。

社交網(wǎng)絡(luò)數(shù)據(jù)集,這是一個(gè)包含社交網(wǎng)絡(luò)用戶信息的數(shù)據(jù)集,其中用戶信息包括用戶 ID,性別,年齡和估計(jì)工資等情況。一家汽車公司剛推出一款全新的豪華 SUV 騎車。我們的任務(wù)是試圖預(yù)測社交網(wǎng)絡(luò)中哪些用戶將有能力購買這款全新的 SUV。最后一列的數(shù)據(jù)代表用戶是否購買了這款 SUV (1代表購買,0代表不購買)。這里,我們打算構(gòu)建一個(gè) Logistic 回歸模型,并把年齡和估計(jì)工資兩列作為我們的特征矩陣。我們希望找到年齡和用戶估計(jì)工資,與用戶是否購買 SUV 決定之間的相關(guān)性。

第一步:數(shù)據(jù)預(yù)處理

導(dǎo)入所需的依賴庫

importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd

導(dǎo)入所需的數(shù)據(jù)庫

dataset=pd.read_csv('Social_Network_Ads.csv')X=dataset.iloc[:,[2,3]].valuesy=dataset.iloc[:,4].values

數(shù)據(jù)庫地址:

https://github.com/Avik-Jain/100-Days-Of-ML-Code/blob/master/datasets/Social_Network_Ads.csv

第二步:將數(shù)據(jù)庫分離為訓(xùn)練庫和測試庫

fromsklearn.cross_validationimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=0)

第三步:特征縮放

fromsklearn.preprocessingimportStandardScalersc=StandardScaler()X_train=sc.fit_transform(X_train)X_test=sc.transform(X_test)

第四步:Logistic 回歸模型

我們采用一個(gè)線性模型庫,因?yàn)?Logistic 回歸本身就是一個(gè)線性分類器,這意味著,我們將用一條直線在兩個(gè)維度把兩類用戶分開,然后導(dǎo)入 logistic 回歸類。 接下來,我們將從這個(gè)類中創(chuàng)建一個(gè)新對象,并作為我們的訓(xùn)練數(shù)據(jù)集中的分類器。

在訓(xùn)練集中擬合 logistic 回歸模型

fromsklearn.linear_modelimportLogisticRegressionclassifier=LogisticRegression()classifier.fit(X_train,y_train)

第五步:預(yù)測

用測試集數(shù)據(jù)預(yù)測結(jié)果

y_pred=classifier.predict(X_test)

第六步:評估預(yù)測結(jié)果

我們將通過可視化混淆矩陣評估 logistic 回歸模型的預(yù)測結(jié)果。混淆矩陣能夠顯示我們模型所做出的正確預(yù)測以及不正確的預(yù)測。

創(chuàng)建混淆矩陣

fromsklearn.metricsimportconfusion_matrixcm=confusion_matrix(y_test,y_pred)

第七步:可視化結(jié)果

Day 7、8、9

支持向量機(jī) SVM及算法實(shí)現(xiàn)

這部分學(xué)習(xí)將帶你直觀了解 SVM 是什么,以及如何使用它來解決分類問題。

▌SVM 算法的實(shí)現(xiàn)

支持向量機(jī) (SVM) 是一種監(jiān)督式的機(jī)器學(xué)習(xí)算法,可以用于回歸和分類任務(wù) (大多數(shù)情況)。它通過找尋一個(gè)分類超平面來分離兩個(gè)類別,換句話說,得到的最優(yōu)超平面能夠進(jìn)一步用于新樣本的分類。最優(yōu)超平面是能夠最大化類別數(shù)據(jù)之間間距的那個(gè)平面,換而言之,每個(gè)類別距離最優(yōu)超平面的點(diǎn)之間的距離是最大的。SVM 算法示意圖如下:

對于 SVM 算法而言,有四個(gè)至關(guān)重要的超參數(shù):

核大小 (Kernel):線性 SVM 中超平面是通過線性代數(shù)變換得到的,因此核大小扮演著關(guān)鍵的角色。多項(xiàng)式核和指數(shù)型核都能用于更高維度的線性分離計(jì)算。

正則化參數(shù) (Regularization):當(dāng)正則化參數(shù)過大時(shí),SVM 的優(yōu)化過程將選擇一個(gè)小邊距的超平面,相反一個(gè)非常小的正則化參數(shù)將導(dǎo)致優(yōu)化過程搜索一個(gè)大邊距的分離面。

GAMMA 參數(shù):小的 gamma 參數(shù)意味著遠(yuǎn)離可能超平面的點(diǎn)在計(jì)算分離線時(shí)會被考慮,相反大的 gamma 參數(shù)意味著靠近超平面的這些點(diǎn)在計(jì)算時(shí)會被考慮。

邊距 (Margin):邊距是分離線與最近類別數(shù)據(jù)點(diǎn)的距離。一個(gè)好的邊距能夠?qū)⑾鄳?yīng)類別的數(shù)據(jù)點(diǎn)分離開,而中間不會出現(xiàn)其他類別的數(shù)據(jù)。

▌SVM 算法的實(shí)現(xiàn)

下面以一個(gè)實(shí)例來具體說明

第一步:數(shù)據(jù)預(yù)處理

導(dǎo)入所需的庫

importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd

導(dǎo)入所需的數(shù)據(jù)數(shù)據(jù)集

dataset=pd.read_csv('Social_Network_Ads.csv')X=dataset.iloc[:,[2,3]].valuesy=dataset.iloc[:,4].values

第二步:將數(shù)據(jù)庫分離為訓(xùn)練庫和測試庫

fromsklearn.cross_validationimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=0)

第三步:特征縮放

fromsklearn.preprocessingimportStandardScalersc=StandardScaler()X_train=sc.fit_transform(X_train)X_test=sc.transform(X_test)

第四步:在訓(xùn)練集中擬合 SVM 算法

fromsklearn.svmimportSVCclassifier=SVC(kernel='linear',random_state=0)classifier.fit(X_train,y_train)

第五步:用測試集數(shù)據(jù)預(yù)測結(jié)果

y_pred=classifier.predict(X_test)

第六步:創(chuàng)建混淆矩陣

fromsklearn.metricsimportconfusion_matrixcm=confusion_matrix(y_test,y_pred)

第七步:可視化訓(xùn)練結(jié)果

frommatplotlib.colorsimportListedColormapX_set,y_set=X_train,y_trainX1,X2=np.meshgrid(np.arange(start=X_set[:,0].min()-1,stop=X_set[:,0].max()+1,step=0.01),np.arange(start=X_set[:,1].min()-1,stop=X_set[:,1].max()+1,step=0.01))plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha=0.75,cmap=ListedColormap(('red','green')))plt.xlim(X1.min(),X1.max())plt.ylim(X2.min(),X2.max())fori,jinenumerate(np.unique(y_set)):plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],c=ListedColormap(('red','green'))(i),label=j)plt.title('SVM(Trainingset)')plt.xlabel('Age')plt.ylabel('EstimatedSalary')plt.legend()plt.show()

第八步:可視化測試結(jié)果

frommatplotlib.colorsimportListedColormapX_set,y_set=X_test,y_testX1,X2=np.meshgrid(np.arange(start=X_set[:,0].min()-1,stop=X_set[:,0].max()+1,step=0.01),np.arange(start=X_set[:,1].min()-1,stop=X_set[:,1].max()+1,step=0.01))plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha=0.75,cmap=ListedColormap(('red','green')))plt.xlim(X1.min(),X1.max())plt.ylim(X2.min(),X2.max())fori,jinenumerate(np.unique(y_set)):plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],c=ListedColormap(('red','green'))(i),label=j)plt.title('SVM(Testset)')plt.xlabel('Age')plt.ylabel('EstimatedSalary')plt.legend()plt.show()

Day 10、11、12

K 最近鄰算法 (KNN)與算法實(shí)現(xiàn)

通過這部分學(xué)習(xí),你將學(xué)會如何實(shí)現(xiàn)一個(gè) KNN 算法。

▌KNN算法

K 最近鄰算法 (KNN) 是一種簡單的回歸分類模型,旨在通過非參數(shù)化的監(jiān)督式學(xué)習(xí)來訓(xùn)練樣本實(shí)例的算法。它不依賴于任何的數(shù)據(jù)分布假設(shè),也不需要通過學(xué)習(xí)模型來預(yù)測結(jié)果。在分類任務(wù)中,KNN 算法有三個(gè)關(guān)鍵要素:標(biāo)簽?zāi)繕?biāo)集合,目標(biāo)間的距離以及最近鄰 k 的個(gè)數(shù)。

對于無標(biāo)簽的目標(biāo),KNN 算法會先計(jì)算它與標(biāo)簽?zāi)繕?biāo)之間的距離,并確定其 k 個(gè)最近鄰數(shù)。然后,通過最近鄰目標(biāo)的類別標(biāo)簽來確定該目標(biāo)的類別。對于實(shí)值的輸入變量,最常用的距離度量是歐式距離。

歐式距離是通過計(jì)算兩個(gè)目標(biāo)各屬性值之間的平方和得到的。還有其他的距離度量包括:Hamming 距離,Manhattan 距離,Minkowski 距離等。

K 值得選?。喊l(fā)現(xiàn)最佳的 K 值不是件容易的事。K 值越少,則對結(jié)果的影響越大;而 K 值越大,則計(jì)算成本將越高。K 值得選取通常取決于你發(fā)樣本量,有時(shí)候你需要嘗試一些可能的 K 值來得到最佳的選擇。

▌KNN 算法的實(shí)現(xiàn)

下面以一個(gè)實(shí)例來具體說明

第一步:導(dǎo)入庫

importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd

導(dǎo)入數(shù)據(jù)集

dataset=pd.read_csv('Social_Network_Ads.csv')X=dataset.iloc[:,[2,3]].valuesy=dataset.iloc[:,4].values

第二步:將數(shù)據(jù)集分離為訓(xùn)練集和測試集

fromsklearn.cross_validationimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=0)

第三步:特征縮放

fromsklearn.preprocessingimportStandardScalersc=StandardScaler()X_train=sc.fit_transform(X_train)X_test=sc.transform(X_test)

第四步:在訓(xùn)練集中擬合 KNN 算法

fromsklearn.neighborsimportKNeighborsClassifierclassifier=KNeighborsClassifier(n_neighbors=5,metric='minkowski',p=2)classifier.fit(X_train,y_train)

第五步:預(yù)測測試集結(jié)果

y_pred=classifier.predict(X_test)

第六步:混淆矩陣

fromsklearn.metricsimportconfusion_matrixcm=confusion_matrix(y_test,y_pred)

Day 13、14、15

決策樹模型

▌決策樹模型

決策樹模型是一類用于類別和連續(xù)輸入輸出變量分類問題的監(jiān)督式學(xué)習(xí)算法。一個(gè)決策樹模型有許多分支,每個(gè)分支節(jié)點(diǎn)都代表一種選擇,每個(gè)葉子 (leaf) 節(jié)點(diǎn)都代表一種決策。下面我們來看看決策樹模型是如何工作的:

在下圖的高維空間,我們有很多個(gè)散布的數(shù)據(jù)點(diǎn),我們將采用決策樹模型將這些數(shù)據(jù)分離開。

首先我們將每種類別的數(shù)據(jù)分離開,并構(gòu)建一個(gè)決策樹模型,方便后續(xù)使用。

通過諸如 CART,ID3等決策樹算法,我們構(gòu)建的決策樹模型如下,這可以用于后續(xù)的輸出預(yù)測。

ID3 表示的是迭代的 Dichotomizer 3 算法,旨在給定樹節(jié)點(diǎn)的每個(gè)屬性數(shù)據(jù),通過自上而下的貪婪搜索來構(gòu)建一個(gè)決策樹模型。假定 A 是最佳屬性,則分配一個(gè)決策樹節(jié)點(diǎn)給 A。然后,對每個(gè) A 值,為其創(chuàng)建一個(gè)子節(jié)點(diǎn),直到遍歷所有的訓(xùn)練數(shù)據(jù)。如果創(chuàng)建的決策樹模型能夠完美地分類數(shù)據(jù),則終止上述過程,否則繼續(xù)迭代每個(gè)葉節(jié)點(diǎn)。

▌決策樹模型的實(shí)現(xiàn)

下面以一個(gè)實(shí)例來具體說明

第一步:導(dǎo)入庫

importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd

導(dǎo)入數(shù)據(jù)集

dataset=pd.read_csv('Social_Network_Ads.csv')X=dataset.iloc[:,[2,3]].valuesy=dataset.iloc[:,4].values

第二步:將數(shù)據(jù)分離為訓(xùn)練集和測試集

fromsklearn.cross_validationimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=0)

第三步:特征縮放

fromsklearn.preprocessingimportStandardScalersc=StandardScaler()X_train=sc.fit_transform(X_train)X_test=sc.transform(X_test)

第四步:將決策樹分類擬合到訓(xùn)練集

fromsklearn.treeimportDecisionTreeClassifierclassifier=DecisionTreeClassifier(criterion='entropy',random_state=0)classifier.fit(X_train,y_train)

第五步:預(yù)測測試集結(jié)果

y_pred=classifier.predict(X_test)

第六步:混淆矩陣

fromsklearn.metricsimportconfusion_matrixcm=confusion_matrix(y_test,y_pred)

第七步:可視化訓(xùn)練集結(jié)果

frommatplotlib.colorsimportListedColormapX_set,y_set=X_train,y_trainX1,X2=np.meshgrid(np.arange(start=X_set[:,0].min()-1,stop=X_set[:,0].max()+1,step=0.01),np.arange(start=X_set[:,1].min()-1,stop=X_set[:,1].max()+1,step=0.01))plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha=0.75,cmap=ListedColormap(('red','green')))plt.xlim(X1.min(),X1.max())plt.ylim(X2.min(),X2.max())fori,jinenumerate(np.unique(y_set)):plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],c=ListedColormap(('red','green'))(i),label=j)plt.title('DecisionTreeClassification(Trainingset)')plt.xlabel('Age')plt.ylabel('EstimatedSalary')plt.legend()plt.show()

第八步:可視化測試集結(jié)果

frommatplotlib.colorsimportListedColormapX_set,y_set=X_test,y_testX1,X2=np.meshgrid(np.arange(start=X_set[:,0].min()-1,stop=X_set[:,0].max()+1,step=0.01),np.arange(start=X_set[:,1].min()-1,stop=X_set[:,1].max()+1,step=0.01))plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha=0.75,cmap=ListedColormap(('red','green')))plt.xlim(X1.min(),X1.max())plt.ylim(X2.min(),X2.max())fori,jinenumerate(np.unique(y_set)):plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],c=ListedColormap(('red','green'))(i),label=j)plt.title('DecisionTreeClassification(Testset)')plt.xlabel('Age')plt.ylabel('EstimatedSalary')plt.legend()plt.show()

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1789

    文章

    46397

    瀏覽量

    236584
  • 數(shù)據(jù)處理
    +關(guān)注

    關(guān)注

    0

    文章

    562

    瀏覽量

    28483
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8325

    瀏覽量

    132194

原文標(biāo)題:逼瘋懶癌:“機(jī)器學(xué)習(xí)100天大作戰(zhàn)”正式開始!

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    單片機(jī)學(xué)習(xí)計(jì)劃【原創(chuàng)】

    %,這兩估計(jì)正在學(xué)習(xí)IIC總線。2010年學(xué)習(xí)計(jì)劃單片機(jī)的方面1.學(xué)習(xí)I/O控制(1)數(shù)碼管動態(tài)顯示(2)鍵盤控制(3)AD/DA(4)串
    發(fā)表于 11-14 11:10

    【下載】《機(jī)器學(xué)習(xí)》+《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》

    `1.機(jī)器學(xué)習(xí)簡介:機(jī)器學(xué)習(xí)是計(jì)算機(jī)科學(xué)與人工智能的重要分支領(lǐng)域. 本書作為該領(lǐng)域的入門教材,在內(nèi)容上盡可能涵蓋機(jī)器
    發(fā)表于 06-01 15:49

    【KittenBot機(jī)器人試用申請】KittenBot繪圖避障機(jī)器人學(xué)習(xí)課程

    項(xiàng)目名稱:KittenBot繪圖避障機(jī)器人學(xué)習(xí)課程試用計(jì)劃:1、申請理由:本人為一名高中老師,業(yè)余喜歡學(xué)習(xí)arduino,希望借此機(jī)會培養(yǎng)學(xué)生的編程能力與動手能力2、項(xiàng)目名稱:KittenBot繪圖
    發(fā)表于 07-07 18:05

    機(jī)器學(xué)習(xí)100之多元線性回歸

    機(jī)器學(xué)習(xí)100-多元線性回歸 [代碼實(shí)現(xiàn)細(xì)節(jié)分析]
    發(fā)表于 05-12 15:06

    機(jī)器學(xué)習(xí)之 k-近鄰算法(k-NN)

    機(jī)器學(xué)習(xí)機(jī)器學(xué)習(xí)100(5) --- k-近鄰算法(k-NN)
    發(fā)表于 05-15 15:06

    【已開獎(jiǎng)】一一課,打卡學(xué)習(xí)計(jì)劃獲獎(jiǎng)名單公布

    活動地址:【打卡學(xué)習(xí)計(jì)劃】一一課,張飛老師精細(xì)講解MOS管的運(yùn)用,帶你吃透每個(gè)知識點(diǎn)恭喜以下朋友堅(jiān)持學(xué)習(xí)打卡,獲得獎(jiǎng)勵(lì)!管理員將通過私信聯(lián)系課程和實(shí)物中獎(jiǎng)?wù)撸堉歇?jiǎng)?wù)呤盏剿叫藕?,?
    發(fā)表于 07-08 17:02

    本文作者YY碩,來自大疆工程師《機(jī)器人工程師學(xué)習(xí)計(jì)劃》精選資料分享

    本文作者YY碩,來自大疆工程師。原文標(biāo)題《機(jī)器人工程師學(xué)習(xí)計(jì)劃》。前言很多朋友私信問我對機(jī)器人和人工智能感興趣,該怎么展開學(xué)習(xí)。最近稍微有點(diǎn)空,我寫寫我的看法。兩年前,我在知乎回答如何
    發(fā)表于 07-28 08:05

    機(jī)器人工程師學(xué)習(xí)計(jì)劃

    如何定義機(jī)器人?機(jī)器人工程師學(xué)習(xí)計(jì)劃分享
    發(fā)表于 12-20 06:11

    機(jī)器學(xué)習(xí)簡介與經(jīng)典機(jī)器學(xué)習(xí)算法人才培養(yǎng)

    上課時(shí)間安排:2022年05月27日 — 2022年05月30日No.1 第一一、機(jī)器學(xué)習(xí)簡介與經(jīng)典機(jī)器學(xué)習(xí)算法介紹什么是
    發(fā)表于 04-28 18:56

    什么是機(jī)器學(xué)習(xí)? 機(jī)器學(xué)習(xí)基礎(chǔ)入門

    本文旨在為硬件和嵌入式工程師提供機(jī)器學(xué)習(xí)(ML)的背景,它是什么,它是如何工作的,它為什么重要,以及 TinyML 是如何適應(yīng)的機(jī)器學(xué)習(xí)是一個(gè)始終存在并經(jīng)常被誤解的技術(shù)概念。數(shù)十年來,
    發(fā)表于 06-21 11:06

    Teradata睿加入NVIDIA合作伙伴計(jì)劃 助力人工智能與深度學(xué)習(xí)技術(shù)加速實(shí)現(xiàn)

    計(jì)劃成員,Think Big Analytics將針對企業(yè)級應(yīng)用與NVIDIA共同優(yōu)化深度學(xué)習(xí)技術(shù),幫助客戶擴(kuò)大AI項(xiàng)目規(guī)模,并協(xié)調(diào)制定AI項(xiàng)目市場策略。 Teradata睿公司曾委
    的頭像 發(fā)表于 03-28 10:40 ?3480次閱讀

    100讓你學(xué)會機(jī)器學(xué)習(xí)的項(xiàng)目!

    其中一名叫Avik Jain的機(jī)器學(xué)習(xí)愛好者,創(chuàng)建了一個(gè)100-Days-Of-ML-Code的項(xiàng)目,很快引起了大家的注意,截至今日,該項(xiàng)目已經(jīng)獲得了 11570 個(gè)「star」以及 1993 個(gè)
    的頭像 發(fā)表于 09-17 16:42 ?2847次閱讀

    未來作戰(zhàn)機(jī)器人來了 目前俄羅斯技術(shù)領(lǐng)先

    隨著人工智能的興起,世界各國都在研究人工智能的作戰(zhàn)系統(tǒng),終極目標(biāo)就是想實(shí)現(xiàn)無人化戰(zhàn)爭,比如無人機(jī)、無人坦克的誕生,但無人機(jī)、無人坦克還不足以實(shí)現(xiàn)無人化戰(zhàn)爭,各國開始研究作戰(zhàn)機(jī)器人來代替士兵上戰(zhàn)爭。作戰(zhàn)機(jī)器人的研究都有哪些國家走在
    發(fā)表于 12-26 09:44 ?1373次閱讀

    “中間三”問題 最對機(jī)器學(xué)習(xí)“胃口”

    而如今我們針對氣象研究的機(jī)器,利用數(shù)字計(jì)算和數(shù)據(jù)庫,對與天氣預(yù)報(bào)要解決的難題,也最對機(jī)器學(xué)習(xí)的胃口。那么中間三機(jī)器怎么有聯(lián)系呢。三
    的頭像 發(fā)表于 03-25 16:11 ?2126次閱讀

    基于圖嵌入的兵棋聯(lián)合作戰(zhàn)態(tài)勢實(shí)體知識表示學(xué)習(xí)方法

    基于圖嵌入的兵棋聯(lián)合作戰(zhàn)態(tài)勢實(shí)體知識表示學(xué)習(xí)方法 來源:《指揮控制與仿真》,作者王???摘 要:為將基于離散符號的兵棋聯(lián)合作戰(zhàn)態(tài)勢實(shí)體知識表示為機(jī)器更加容易
    發(fā)表于 01-11 08:34 ?833次閱讀