機器學習已經成為人工智能中發展最快,應用最廣、最重要的分支之一。但是這條學習之路似乎并不是那么容易,也不總是一帆風順的。
相信每一個學習機器學習的小伙伴都碼過不少的學習資源,無論是在線課程還是大佬們整理的學習PPT,但是看的速度遠不及碼的速度;有的同學數學基礎比較差,就想先把數學補足再學習,但是往往數學也沒補上來,機器學習還沒開始就已經放棄了;還有很多同學看到現在深度學習聲勢最盛,直接學習深度學習,結果發現學習到的內容也像空中樓閣,不扎實。
無論是數學知識、經典與重要的算法還是編碼實踐,每天都會有人在路上敗下陣來而放棄學習,仿佛我們永遠都停留在入門階段。
其實機器學習涵蓋的知識面非常多,而且不僅要學習理論還有實踐同樣不能忽視。如果基礎薄弱,學習起來肯定是會遇到很多困難的,但就一定不行嗎?如何在基礎薄弱的條件下進行有效的學習是很多人都非常關心的。至此特此根據作者Avik-Hain 的博客為大家精心準備了“機器學習百天大作戰”的系列學習計劃與教程,從理論與實踐結合,在100天左右的時間里從理論+實踐結合的方式,有條理有邏輯的幫助大家完成入門,助攻進階。相信大家一定可以受益頗多!
本期內容是此系列的第一期,主要內容有:
數據處理的實踐流程
簡單的線性回歸與實現
多元線性回歸與實踐
Logistic 回歸及實踐
支持向量機 SVM 及其實現
KNN 算法與實現
決策樹模型與實現
Day 1
數據處理
機器學習中的數據處理實踐流程主要如下:
第一步:導入所需的庫。Numpy 和 Pandas 是兩個必需的,也是最基本的數據處理庫。
importnumpyasnpimportpandasaspd
第二步:導入數據集。數據集通常是 .csv 的格式。一個 csv 文件能夠儲存表格數據,每行都代表一條數據,我們可以使用 Pandas 中的 read_csv 方法來讀取 csv 文件并將其作為 dataframe 處理。隨后,我們可以將 dataframe 中的矩陣、向量和標量分離開來單獨處理。
dataset=pd.read_csv('Data.csv')X=dataset.iloc[:,:-1].valuesY=dataset.iloc[:,3].values
第三步:處理缺失數據。數據通常會因為一些原因而缺失,我們需要對其進行處理以便其不會對機器學習模型的性能造成影響。我們可以通過對整列數據進行平均化或中值化來填補缺失數據,這可以通過 sklearn.preprocessing 中的 Imputer 類方法來解決這個問題。
fromsklearn.preprocessingimportImputerimputer=Imputer(missing_values="NaN",strategy="mean",axis=0)imputer=imputer.fit(X[:,1:3])X[:,1:3]=imputer.transform(X[:,1:3])
第四步:編碼類數據。類數據是一個包含標簽值的變量,通常它們被限制在一個固定的集合中。例如,‘Yes’ 或 ‘No’ 是無法用于模型中的數學表達式,因此我們需要對這些類數據進行編碼,將其轉化為數值。我們可以通過 sklearn.preprocessing 中的 LabelEncoder 類方法來解決這個問題。
fromsklearn.preprocessingimportLabelEncoder,OneHotEncoderlabelencoder_X=LabelEncoder()X[:,0]=labelencoder_X.fit_transform(X[:,0])
第五步:將數據集分離為訓練集和測試集。在機器學習中,我們通常需要對源數據集進行處理,以便分離出訓練集和測試集,分別用于模型的訓練和測試。通常所使用的分離比為8:2,我們可以通過導入 sklearn.crossvalidation 庫的 train_test_split() 方法來解決這個問題。
fromsklearn.cross_validationimporttrain_test_splitX_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.2,random_state=0)
第六步:特征縮放。大多數機器學習算法會采用歐式距離,來衡量兩個數據點特征變化情況。相比于低量級的特征,高量級的特征會在距離計算中占更大的權重。可以通過特征標準化或 Z 分數正則化來解決,我們可以導入 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
簡單的線性回歸
▌簡單的線性回歸模型
使用單個特征來預測結果。在這種回歸模型中,我們嘗試最小化預測值和真實值之間的損失,來得到最佳的擬合性能。
▌線性回歸的實現
第一步:數據預處理。回歸模型中的數據預處理過程遵循上述的數據處理流程,主要包括導入所需的庫,導入所需的數據集,檢查缺失數據,分離數據集以及特征縮放。
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)
第二步:用訓練數據擬合簡單的線性回歸模型。首先,我們導入 sklearn.linear_model 中的 LinearRegression 類。然后,我們為目標 regressor 創建一個 LinearRegression 類。現在,我們可以使用 LinearRegression 類的 fit() 方法來用訓練數據去擬合我們的目標 regressor。
fromsklearn.linear_modelimportLinearRegressionregressor=LinearRegression()regressor=regressor.fit(X_train,Y_train)
第三步:預測結果。使用我們訓練好的模型,在測試集上預測我們的結果。首先,我們為預測結果創建一個向量 Y-pred。然后,我們對訓練好的 regressor 使用 LinearRegression 類的預測方法來進行預測。
Y_pred=regressor.predict(X_test)
第四步:可視化。最后一步是可視化最后的結果,我們可以采用 matplotlib.pyplot 庫來為模型的訓練結果和測試結果做出散點圖,可視化模型的預測結果。
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
多元線性回歸
▌多元線性回歸模型
旨在通過擬合一個線性等式,探究兩個或多個特征變量之間的關系。多元線性回歸的處理步驟與簡單線性回歸的流程大致相似,不同就在于模型評估處理。由于多個變量對最終預測結果的影響是不同的,因此我們可以進一步評估對模型影響最大的變量以及各變量之間的相互關系。一個好的多元線性回歸模型需要滿足以下幾個條件:
線性:不論是獨立還是非獨立的變量,它們之間的關系都應該是線性的。
方差齊性 (Homoscedasticity):常量間誤差要始終存在。
多元正態性 (Multivariate Normality):多元回歸假設變量之間的殘差服從正態分布。
缺乏多重性 (Lack of Multicollinearity):這里假設數據間不存在多重性。只有當特征或變量之間獨立時才存在多重性。
此外,多元回歸模型中使用的類數據是處理非數值數據類型非常有效的手段。類數據通常涉及一些表示類別數值的數據,如性別(男/女)。在回歸模型中,這些數值通常可以被表示為啞變量,即用1或0代表類別數據出現或不出現。此外,對于兩個類數據之間存在相關性的問題,我們通常降低一個類別數量,以便正常使用回歸模型。
▌深入多元線性回歸
第一步:數據預處理
導入庫、導入數據集、編碼分類數據、分離數據為訓練集和測試集
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)
第二步:將多個線性回歸擬合到訓練集
fromsklearn.linear_modelimportLinearRegressionregressor=LinearRegression()regressor.fit(X_train,Y_train)
第三步:預測測試集結果
y_pred=regressor.predict(X_test)
Day 4、5、6
Logistic 回歸與深入實踐
這部分將深入研究 Logistic 回歸模型,包括它背后的數學原理,如何計算成本函數,以及如何將梯度下降算法應用于成本函數以最小化預測誤差等內容。
▌Logistic 回歸
Logistic 回歸通常用于不同類別的分類問題,旨在通過觀察現有目標類預測所屬的類別。通常所給的是離散的二值數據,介于0和1之間。Logistic 回歸最常見的例子是在選舉期間民眾的投票情況。
Logistic 回歸模型采用潛在的 logistic 函數得到估計概率值,來衡量獨立變量 (通常使我們要預測的標簽值) 與一個或多個非獨立變量 (我們的特征值) 之間的關系。Logistic 函數,也被稱為 sigmoid 函數,這是一個 S 型曲線函數,它能夠將估計的概率值轉換為二進制值0或1,以便模型預測得到結果。
與線性回歸模型得到連續型輸出不同,Logistic 回歸最終的結果是離散的。
▌深入 Logistic 回歸實戰
下面我以一個實例來具體說明整個 Logistic 回歸的流程。
社交網絡數據集,這是一個包含社交網絡用戶信息的數據集,其中用戶信息包括用戶 ID,性別,年齡和估計工資等情況。一家汽車公司剛推出一款全新的豪華 SUV 騎車。我們的任務是試圖預測社交網絡中哪些用戶將有能力購買這款全新的 SUV。最后一列的數據代表用戶是否購買了這款 SUV (1代表購買,0代表不購買)。這里,我們打算構建一個 Logistic 回歸模型,并把年齡和估計工資兩列作為我們的特征矩陣。我們希望找到年齡和用戶估計工資,與用戶是否購買 SUV 決定之間的相關性。
第一步:數據預處理
導入所需的依賴庫
importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd
導入所需的數據庫
dataset=pd.read_csv('Social_Network_Ads.csv')X=dataset.iloc[:,[2,3]].valuesy=dataset.iloc[:,4].values
數據庫地址:
https://github.com/Avik-Jain/100-Days-Of-ML-Code/blob/master/datasets/Social_Network_Ads.csv
第二步:將數據庫分離為訓練庫和測試庫
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 回歸模型
我們采用一個線性模型庫,因為 Logistic 回歸本身就是一個線性分類器,這意味著,我們將用一條直線在兩個維度把兩類用戶分開,然后導入 logistic 回歸類。 接下來,我們將從這個類中創建一個新對象,并作為我們的訓練數據集中的分類器。
在訓練集中擬合 logistic 回歸模型
fromsklearn.linear_modelimportLogisticRegressionclassifier=LogisticRegression()classifier.fit(X_train,y_train)
第五步:預測
用測試集數據預測結果
y_pred=classifier.predict(X_test)
第六步:評估預測結果
我們將通過可視化混淆矩陣評估 logistic 回歸模型的預測結果。混淆矩陣能夠顯示我們模型所做出的正確預測以及不正確的預測。
創建混淆矩陣
fromsklearn.metricsimportconfusion_matrixcm=confusion_matrix(y_test,y_pred)
第七步:可視化結果
Day 7、8、9
支持向量機 SVM及算法實現
這部分學習將帶你直觀了解 SVM 是什么,以及如何使用它來解決分類問題。
▌SVM 算法的實現
支持向量機 (SVM) 是一種監督式的機器學習算法,可以用于回歸和分類任務 (大多數情況)。它通過找尋一個分類超平面來分離兩個類別,換句話說,得到的最優超平面能夠進一步用于新樣本的分類。最優超平面是能夠最大化類別數據之間間距的那個平面,換而言之,每個類別距離最優超平面的點之間的距離是最大的。SVM 算法示意圖如下:
對于 SVM 算法而言,有四個至關重要的超參數:
核大小 (Kernel):線性 SVM 中超平面是通過線性代數變換得到的,因此核大小扮演著關鍵的角色。多項式核和指數型核都能用于更高維度的線性分離計算。
正則化參數 (Regularization):當正則化參數過大時,SVM 的優化過程將選擇一個小邊距的超平面,相反一個非常小的正則化參數將導致優化過程搜索一個大邊距的分離面。
GAMMA 參數:小的 gamma 參數意味著遠離可能超平面的點在計算分離線時會被考慮,相反大的 gamma 參數意味著靠近超平面的這些點在計算時會被考慮。
邊距 (Margin):邊距是分離線與最近類別數據點的距離。一個好的邊距能夠將相應類別的數據點分離開,而中間不會出現其他類別的數據。
▌SVM 算法的實現
下面以一個實例來具體說明
第一步:數據預處理
導入所需的庫
importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd
導入所需的數據數據集
dataset=pd.read_csv('Social_Network_Ads.csv')X=dataset.iloc[:,[2,3]].valuesy=dataset.iloc[:,4].values
第二步:將數據庫分離為訓練庫和測試庫
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)
第四步:在訓練集中擬合 SVM 算法
fromsklearn.svmimportSVCclassifier=SVC(kernel='linear',random_state=0)classifier.fit(X_train,y_train)
第五步:用測試集數據預測結果
y_pred=classifier.predict(X_test)
第六步:創建混淆矩陣
fromsklearn.metricsimportconfusion_matrixcm=confusion_matrix(y_test,y_pred)
第七步:可視化訓練結果
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()
第八步:可視化測試結果
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)與算法實現
通過這部分學習,你將學會如何實現一個 KNN 算法。
▌KNN算法
K 最近鄰算法 (KNN) 是一種簡單的回歸分類模型,旨在通過非參數化的監督式學習來訓練樣本實例的算法。它不依賴于任何的數據分布假設,也不需要通過學習模型來預測結果。在分類任務中,KNN 算法有三個關鍵要素:標簽目標集合,目標間的距離以及最近鄰 k 的個數。
對于無標簽的目標,KNN 算法會先計算它與標簽目標之間的距離,并確定其 k 個最近鄰數。然后,通過最近鄰目標的類別標簽來確定該目標的類別。對于實值的輸入變量,最常用的距離度量是歐式距離。
歐式距離是通過計算兩個目標各屬性值之間的平方和得到的。還有其他的距離度量包括:Hamming 距離,Manhattan 距離,Minkowski 距離等。
K 值得選取:發現最佳的 K 值不是件容易的事。K 值越少,則對結果的影響越大;而 K 值越大,則計算成本將越高。K 值得選取通常取決于你發樣本量,有時候你需要嘗試一些可能的 K 值來得到最佳的選擇。
▌KNN 算法的實現
下面以一個實例來具體說明
第一步:導入庫
importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd
導入數據集
dataset=pd.read_csv('Social_Network_Ads.csv')X=dataset.iloc[:,[2,3]].valuesy=dataset.iloc[:,4].values
第二步:將數據集分離為訓練集和測試集
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)
第四步:在訓練集中擬合 KNN 算法
fromsklearn.neighborsimportKNeighborsClassifierclassifier=KNeighborsClassifier(n_neighbors=5,metric='minkowski',p=2)classifier.fit(X_train,y_train)
第五步:預測測試集結果
y_pred=classifier.predict(X_test)
第六步:混淆矩陣
fromsklearn.metricsimportconfusion_matrixcm=confusion_matrix(y_test,y_pred)
Day 13、14、15
決策樹模型
▌決策樹模型
決策樹模型是一類用于類別和連續輸入輸出變量分類問題的監督式學習算法。一個決策樹模型有許多分支,每個分支節點都代表一種選擇,每個葉子 (leaf) 節點都代表一種決策。下面我們來看看決策樹模型是如何工作的:
在下圖的高維空間,我們有很多個散布的數據點,我們將采用決策樹模型將這些數據分離開。
首先我們將每種類別的數據分離開,并構建一個決策樹模型,方便后續使用。
通過諸如 CART,ID3等決策樹算法,我們構建的決策樹模型如下,這可以用于后續的輸出預測。
ID3 表示的是迭代的 Dichotomizer 3 算法,旨在給定樹節點的每個屬性數據,通過自上而下的貪婪搜索來構建一個決策樹模型。假定 A 是最佳屬性,則分配一個決策樹節點給 A。然后,對每個 A 值,為其創建一個子節點,直到遍歷所有的訓練數據。如果創建的決策樹模型能夠完美地分類數據,則終止上述過程,否則繼續迭代每個葉節點。
▌決策樹模型的實現
下面以一個實例來具體說明
第一步:導入庫
importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd
導入數據集
dataset=pd.read_csv('Social_Network_Ads.csv')X=dataset.iloc[:,[2,3]].valuesy=dataset.iloc[:,4].values
第二步:將數據分離為訓練集和測試集
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)
第四步:將決策樹分類擬合到訓練集
fromsklearn.treeimportDecisionTreeClassifierclassifier=DecisionTreeClassifier(criterion='entropy',random_state=0)classifier.fit(X_train,y_train)
第五步:預測測試集結果
y_pred=classifier.predict(X_test)
第六步:混淆矩陣
fromsklearn.metricsimportconfusion_matrixcm=confusion_matrix(y_test,y_pred)
第七步:可視化訓練集結果
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()
第八步:可視化測試集結果
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()
-
人工智能
+關注
關注
1791文章
47352瀏覽量
238791 -
數據處理
+關注
關注
0文章
602瀏覽量
28584 -
機器學習
+關注
關注
66文章
8422瀏覽量
132736
原文標題:逼瘋懶癌:“機器學習100天大作戰”正式開始!
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論