機械零部件測繪 第3版 課件第3章 典型學習算法_第1頁
機械零部件測繪 第3版 課件第3章 典型學習算法_第2頁
機械零部件測繪 第3版 課件第3章 典型學習算法_第3頁
機械零部件測繪 第3版 課件第3章 典型學習算法_第4頁
機械零部件測繪 第3版 課件第3章 典型學習算法_第5頁
已閱讀5頁,還剩106頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

機器學習原理與應用第3章典型學習算法本章學習目標(知識要點)了解常用回歸算法原理和回歸評價標準;熟悉常用聚類算法原理及其聚類評價標準;熟悉常用分類算法原理以及分類評價標準;掌握支持向量機和決策樹的基本原理以及實現機制;通過回歸、聚類、分類等機器學習算法案例解決實際應用問題。目錄

回歸算法

聚類算法

分類算法

支持向量機

決策樹3.13.23.33.43.5

綜合案例:基于隨機森林回歸的

空氣質量預測3.6◎回歸簡介◎回歸技術◎常用回歸算法◎回歸評價標準◎案例:房屋價格回歸分析回歸算法3.13.1.1回歸簡介回歸方法是指確定兩種或兩種以上變量間相互依賴關系的一種分析方法。回歸分析可以幫助理解在保持其他自變量不變的情況下,因變量的值是如何對應于一個自變量變化的。在大數據分析中,回歸分析是一種預測性的建模技術,它研究的是因變量(目標)和自變量(預測器)之間的關系。例如,自變量為廣告費,而因變量就是銷售額。自變量和因變量之間的關系往往可以通過離散的數據點來繪制,可以通過曲線來擬合離散的數據點,使得曲線到數據點的距離差異最小。曲線正是回歸算法需要學習的模型,回歸中的數據擬合3.1.1回歸簡介通過回歸模型來建模因變量和自變量之間的關系,最終能幫助回答以下問題:發現自變量和因變量之間的關系:比如變量之間是否相關、相關的方向(正或反)。確定多個自變量對一個因變量的影響強度:通過回歸,可以確定最重要的因素,最不重要的因素,以及每個因素如何影響其他因素。通過預測發現數據的趨勢。3.1.2回歸技術回歸技術劃分按照涉及自變量的多少,分為一元回歸和多元回歸分析;按照因變量的類型,可分為簡單回歸分析和多重回歸分析;按照自變量和因變量之間的關系類型,可分為線性回歸分析和非線性回歸分析。經典的回歸技術線性回歸(LinearRegression):通過帶系數的線性模型建模預測模型。邏輯斯蒂回歸(LogisticRegression):通過非線性的sigmoid函數或logistic函數建模預測模型。多項式回歸(PolynomialRegression):通過多項式函數建模預測模型。支持向量回歸(SupportVectorRegression):通過非線性變換轉換到高維的特征空間,在高維空間中構造線性決策函數來實現線性回歸。決策樹回歸(DecisionTreeRegression):通過回歸樹將特征空間劃分成若干單元,按照特征將其歸到某個單元,并對其進行預測。隨機森林回歸(RandomForestRegression)則是由多棵決策樹構成,且森林中的每一棵決策樹之間沒有關聯,模型的最終輸出由森林中的每一棵決策樹共同決定。3.1.3常用回歸算法常用回歸算法(6種)線性回歸、邏輯斯蒂回歸、多項式回歸、支持向量回歸、決策樹回歸、隨機森林回歸。1.線性回歸線性回歸是一種用于預測分析的統計回歸方法。它是一種非常簡單易行的回歸算法,通常用于表示自變量(x軸)和因變量(y軸)之間的線性關系,因而稱為線性回歸。簡單線性回歸只有一個輸入變量多元線性回歸有多個輸入變量

3.1.3常用回歸算法

3.1.3常用回歸算法

sigmoid函數

3.1.3常用回歸算法

3.1.3常用回歸算法

多項式回歸模型

3.1.3常用回歸算法

3.1.3常用回歸算法3.多項式回歸

模型擬合的三種狀態3.1.3常用回歸算法

3.1.3常用回歸算法

支持向量回歸3.1.3常用回歸算法

3.1.3常用回歸算法

3.1.3常用回歸算法

3.1.3常用回歸算法5.決策樹回歸sklearn包中提供了決策樹回歸函數,實現方式如下#導入相關函數包importnumpyasnpfromsklearn.treeimportDecisionTreeRegressorimportmatplotlib.pyplotasplt#創建隨機數據集rng=np.random.RandomState(1)X=np.sort(5*rng.rand(80,1),axis=0)y=np.sin(X).ravel()y[::5]+=3*(0.5-rng.rand(16))#模型訓練regr_1=DecisionTreeRegressor(max_depth=2)#創建最大深度為2的決策樹regr_2=DecisionTreeRegressor(max_depth=5)#創建最大深度為2的決策樹regr_1.fit(X,y)regr_2.fit(X,y)r_sq1=regr_1.score(X,y)#返回回歸預測精度R-Squared(見3.1.4小節)r_sq2=regr_2.score(X,y)#返回回歸預測精度R-Squared(見3.1.4小節)3.1.3常用回歸算法6.隨機森林回歸隨機森林是非常強大的監督學習算法之一,它結合多顆決策樹,能夠執行回歸和分類任務。隨機森林回歸是一種集成學習方法,其步驟一般為:1)通過對數據隨機采樣的方式,從原始數據集中構建N個子數據集。通常可以采用集成學習中的Bagging聚合技術,這是一種基于Bootstrap方法隨機選擇子樣本的方法,即先隨機取出一個樣本放入采樣集中,然后將該樣本重新放回原始數據及后再進行下一次采樣,此為有放回的采樣方式。2)對每一個采樣的子數據集構建決策樹。3)對于預測樣本,根據每棵樹輸出的平均值來預測最終的輸出(默認每一棵樹的權重相同):隨機森林3.1.3常用回歸算法6.隨機森林回歸隨機森林可以通過sklearn來實現,實現方式如下:#導入相關函數包fromsklearn.ensembleimportRandomForestRegressorfromsklearn.datasetsimportmake_regression

#創建隨機數據集X,y=make_regression(n_features=4,n_informative=2,...random_state=0,shuffle=False)#模型訓練regr=RandomForestRegressor(max_depth=2,random_state=0)regr.fit(X,y)r_sq=regr.predict([[0,0,0,0]])#預測X的回歸標簽值3.1.4回歸評價標準在回歸任務中,通常所使用的評價算法有均方誤差MSE、均方根誤差RMSE、平均絕對誤差MAE、R-Squared。1)均方誤差(MeanSquaredError,MSE)2)均方根誤差或標準誤差(RootMeanSquardError,RMSE)3)平均絕對誤差(MeanAbsoluteError,MAE)

3.1.4回歸評價標準

3.1.5案例:房屋價格回歸分析以房屋價格回歸分析為例,介紹回歸算法應用的具體實現。1.數據集房屋價格數據包含兩列變量,分別為面積和價格,部分數據示例如下表所示2.導入相關函數包importmatplotlib.pyplotasplt#matplotlib的pyplot子庫,用于繪圖fromsklearnimportlinear_model#導入線性回歸模型fromsklearn.preprocessingimportPolynomialFeatures#導入線性模型和多項式特征構造模塊importnumpyasnp面積價格100016879218412601971262220124022811702483.1.5案例:房屋價格回歸分析3.加載訓練數據集dataX=[]#儲存房屋面積數據dataY=[]#儲存房屋房價數據fread=open('priceData.txt','r')#以只讀的方式讀取數據集所在的文件lines=fread.readlines()#一次性讀取所有的數據集,返回一個列表forlineinlines[1:]:#逐行遍歷,第一行標題省去items=line.strip().split(',')#去除數據集中的不可見字符,并用逗號分割數據dataX.append(int(items[0]))#將讀取的數據轉換為int型,并分別寫入data_X和data_YdataY.append(int(items[1]))

length=len(dataX)#求數據集的總長度dataX=np.array(dataX).reshape([length,1])#將dataX轉化為數組,并變為二維,以符合線性#回歸擬合函數輸入參數要求dataY=np.array(dataY)minX=min(dataX)maxX=max(dataX)X=np.arange(minX,maxX).reshape([-1,1])#以數據dataX的最大值和最小值為范圍建立等差數#列,方便后續畫圖3.1.5案例:房屋價格回歸分析4.建立線性回歸模型polyReg=PolynomialFeatures(degree=2)#degree=2表示建立dataX的二次多項式特征XpolyXpoly=polyReg.fit_transform(dataX)#創建線性回歸模型,使用線性模型學習二次項特征#Xpoly和dataY之間的映射關系linReg2=linear_model.LinearRegression()linReg2.fit(Xpoly,dataY)5.可視化回歸模型的擬合線plt.scatter(dataX,dataY,color='green')#標簽數據散點圖可視化plt.plot(X,linReg2.predict(polyReg.fit_transform(X)),color='blue')#繪制回歸擬合線plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#用于正常顯示中文標簽plt.xlabel('房屋面積')plt.ylabel('房屋價格')plt.show()6.最終繪制的線性回歸模型如圖中藍色曲線所示目錄

回歸算法

聚類算法

分類算法

支持向量機

決策樹3.13.23.33.43.5

綜合案例:基于隨機森林回歸的

空氣質量預測3.6◎聚類簡介◎聚類技術◎典型聚類算法◎聚類評價標準◎案例:用戶社區聚類分析聚類算法3.23.2.1聚類簡介聚類是將數據集中的樣本劃分為多個不相交的子集,每個子集稱為一個“簇”(或“類”)。理論上,同一簇中的樣本應該具有相似的屬性和/或特征,而不同簇中的樣本應該具有高度不同的屬性和/或特征。每一個簇隱含地對應一個潛在的“類別”。聚類示意圖3.2.1聚類簡介聚類應用圖像分析生物信息商業選址產品推薦信號處理自然語言處理金融分析計算機視覺異常檢測等https://franknielsen.github.io/Clustering/index.html3.2.2聚類技術

3.2.3典型聚類算法

3.2.3典型聚類算法

K-Means算法示意圖3.2.3典型聚類算法

3.2.3典型聚類算法

密度聚類3.2.3典型聚類算法

3.2.3典型聚類算法3.凝聚層次聚類兩類:自上而下(分列式)和自下而上(凝聚式)。層次聚類算法試圖在不同層次對數據集進行劃分,從而形成樹形的聚類結構。層級凝聚聚類(HierarchicalAgglomerativeClustering,HAC)是自下而上的一種聚類算法。HAC首先將每個數據點視為一個單一的簇,然后計算所有簇之間的距離來合并距離最近的兩個簇,該步驟不斷重復直到達到預設的聚類簇數為止。層次聚類3.2.3典型聚類算法

3.2.3典型聚類算法3.凝聚層次聚類HAC可以通過sklearn實現如下fromsklearn.clusterimportAgglomerativeClusteringimportnumpyasnp

X=np.array([[1,2],[1,4],[1,0],[4,2],[4,4],[4,0]])

clustering=AgglomerativeClustering().fit(X)clusteringAgglomerativeClustering()clustering.labels_#輸出分類標簽3.2.3典型聚類算法

3.2.3典型聚類算法

3.2.3典型聚類算法4. 基于高斯混合模型的最大期望聚類GMM算法的一般過程如下:1)初始化K個多元高斯分布以及其權重。2)EM方法中的E步:估計每個樣本由每個成分生成的后驗概率,見公式3-18。3)EM方法的M步:根據均值,協方差的定義以及2步求出的后驗概率,更新均值向量,協方差矩陣和權重。4)重復2-3步,直到似然函數增加值已小于收斂閾值,或達到最大迭代次數。5)對于每一個樣本點,根據貝葉斯定理計算出其屬于每一個簇的后驗概率,并將樣本劃分到后驗概率最大的簇中。GMM可以利用sklearn實現如下:importnumpyasnpfromsklearnimportmixturenp.random.seed(1)3.2.3典型聚類算法g=mixture.GMM(n_components=2)#Generaterandomobservationswithtwomodescenteredon0#and10tousefortraining.obs=np.concatenate((np.random.randn(100,1),10+np.random.randn(300,1)))g.fit(obs)GMM(covariance_type='diag',init_params='wmc',min_covar=0.001,n_components=2,n_init=1,n_iter=100,params='wmc',random_state=None,thresh=None,tol=0.001)g.predict([[0],[2],[9],[10]])3.2.4聚類評價標準聚類評價指標可以分為兩類:外部指標:將聚類結果與某個參考模型(或者人工標注)進行比較。內部指標:不使用任何參考模型,直接評價聚類結果。常用的聚類外部指標Jaccard系數(JC)FM指數(FMI)Rand指數(RI)

3.2.4聚類評價標準

3.2.4聚類評價標準聚類的內部指標可以包括DB指數(DBI)Dunn指數(DI)

3.2.5案例:用戶社區聚類分析以用戶社區聚類分析為例,介紹聚類算法應用的具體實現。1.數據集某商場用戶數據的示例如下圖所示,每一個用戶包含性別、年齡、年薪以及消費積分等信息。2.導入相關函數包3.商場用戶消費數據3.2.5案例:用戶社區聚類分析3.加載訓練數據users=pd.read_csv("userdatasets.csv")#利用pandas加載csv格式的訓練數據集users["Male"]=users.Gender.apply(lambdax:0ifx=="Male"else1)#對離散變量數值化處理users["Female"]=users.Gender.apply(lambdax:0ifx=="Female"else1)#對離散變量數值化處理dataX=users.iloc[:,2:]4.加載K-Means模型#n_clusters:簇的數量,在這個例子設為5#max_iter:k-means算法的最大迭代次數#n_init:初始化簇中心的最大次數,不同的初始簇中心將產生不同的聚類效果,選取其中聚類效果最好的一次#random_state:用于初始化簇中心的隨機數。kmeans=KMeans(n_clusters=5,init='k-means++',max_iter=15,n_init=10,random_state=0)

#預測數據的簇標簽labelY=kmeans.fit_predict(dataX)3.2.5案例:用戶社區聚類分析5.聚類可視化fig,ax=plt.subplots(figsize=(8,6))#利用PCA對數據進行降維,使其能在二維空間中進行可視化pca=PCA(n_components=2).fit(dataX)pca2d=pca.transform(dataX)#將數據樣本的特征向量轉化為2維向量plt.scatter(pca2d[:,0],pca2d[:,1],c=labelY,edgecolor="none",cmap=plt.cm.get_cmap("Spectral_r",5),alpha=0.5)plt.gca().spines["top"].set_visible(False)plt.gca().spines["right"].set_visible(False)plt.gca().spines["bottom"].set_visible(False)plt.gca().spines["left"].set_visible(False)plt.xticks(size=12)plt.yticks(size=12)plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#用于正常顯示中文標簽plt.xlabel("主成分1",size=14,labelpad=10)plt.ylabel("主成分2",size=14,labelpad=10)plt.colorbar(ticks=[0,1,2,3,4])plt.show()3.2.5案例:用戶社區聚類分析5.聚類可視化6.預測#預測新用戶的類簇newX=np.array([[36,30,75,1,0]])newUser=kmeans.predict(newX)print(f"新用戶屬于cluster{newUser[0]}")預測結果為:新用戶屬于cluster4。用戶數據聚類可視化目錄

回歸算法

聚類算法

分類算法

支持向量機

決策樹3.13.23.33.43.5

綜合案例:基于隨機森林回歸的

空氣質量預測3.6◎分類簡介◎分類技術◎常用分類算法◎分類評價標準◎案例:新聞分類分類算法3.33.3.1分類簡介分類算法是一種監督學習技術,從給定的數據集中學習已標注的數據,即被標上類標簽的數據,然后為新觀測數據分配類標簽的過程。如下圖所示是一個二分類的可視化例子,藍色數據點的類標簽為ClassA,綠色數據點的類標簽為ClassB。分類應用情感分析垃圾郵件檢測客戶流失預測文本分類等分類3.3.2分類技術

3.3.3分類技術

3.3.3分類技術

3.3.3分類技術

3.3.3分類技術2.邏輯斯蒂回歸介紹了用于回歸的邏輯斯蒂回歸算法,事實上邏輯斯蒂回歸也可以用于分類任務,其算法步驟可參見前面。單獨的邏輯斯蒂回歸只能進行二分類回歸,通過定義一個sigmoid預測函數得到一個(0,1)之間的概率值,通常默認閾值0.5,大于0.5則屬于分類1,小于0.5則屬于分類2。邏輯斯蒂回歸不存在條件獨立性假設。相比于樸素貝葉斯,邏輯斯蒂回歸對于大量數據的處理更有優勢。但是邏輯斯蒂回歸也容易過擬合,可解決的方法包括進行特征選擇或者采取正則化。邏輯斯蒂回歸利用sklearn進行分類的實現方式如下:#導入相關函數包fromsklearn.datasetsimportload_irisfromsklearn.linear_modelimportLogisticRegression#加載數據集X,y=load_iris(return_X_y=True)

#模型訓練model=LogisticRegression(random_state=0).fit(X,y)#模型預測clf.predict(X[:2,:])#輸出分類標簽3.3.3分類技術3.決策樹分類決策樹是一種有監督的分類算法。決策樹分類主要在于構建一個樹狀結構,其中每個內部結點表示樣本中一個特征或屬性,每個分支表示對特征測試的結果,每個葉結點表示最終分類。中間結點根結點葉結點:類別決策樹示例3.3.3分類技術3.決策樹分類根據不同劃分依據可以衍生出不同的決策樹算法,最為經典的算法分別是ID3、C4.5和CART。1)ID3算法:選擇信息增益最大的特征來作為劃分依據。信息增益偏向于選取值越多的特征,但這在有的情況下并不適用。而且ID3不能處理連續分布的數據特征。2)C4.5算法:該算法是RossQuinlan在ID3的基礎上擴展的,利用信息增益率來選擇特征,通過在構造樹過程中進行剪枝克服了用信息增益偏向選擇取值多的特征的不足。它能夠完成對連續特征的離散化處理,且能夠對不完整數據進行處理。但C4.5算法因樹構造過程中需要對數據集進行多次的順序掃描和排序,因而比較低效。3)CART算法:即分類與回歸樹(ClassificationandRegressionTrees,CART),采用Gini指數作為劃分依據,并利用后剪枝操作簡化決策樹的規模,提高生成決策樹的效率,而且Gini指數較于熵而言其計算速度更快一些。CART算法同樣可以對離散值、連續值,甚至缺失值進行,而且還可以處理回歸問題。3.3.3分類技術3.決策樹分類根據不同劃分依據可以衍生出不同的決策樹算法,最為經典的算法分別是ID3、C4.5和CART。1)ID3算法:選擇信息增益最大的特征來作為劃分依據。信息增益偏向于選取值越多的特征,但這在有的情況下并不適用。而且ID3不能處理連續分布的數據特征。2)C4.5算法:該算法是RossQuinlan在ID3的基礎上擴展的,利用信息增益率來選擇特征,通過在構造樹過程中進行剪枝克服了用信息增益偏向選擇取值多的特征的不足。它能夠完成對連續特征的離散化處理,且能夠對不完整數據進行處理。但C4.5算法因樹構造過程中需要對數據集進行多次的順序掃描和排序,因而比較低效。3)CART算法:即分類與回歸樹(ClassificationandRegressionTrees,CART),采用Gini指數作為劃分依據,并利用后剪枝操作簡化決策樹的規模,提高生成決策樹的效率,而且Gini指數較于熵而言其計算速度更快一些。CART算法同樣可以對離散值、連續值,甚至缺失值進行,而且還可以處理回歸問題。

支持場景樹結構特征選擇連續值處理缺失值處理剪枝ID3分類多叉樹信息增益×××C4.5分類多叉樹信息增益比√√√CART分類/回歸二叉樹基尼指數/均方差√√√3.3.3分類技術4.隨機森林分類隨機森林分類算法是將決策樹進行Bagging的集成算法,即使用多棵決策樹的進行單獨預測,最后將這些預測進行組合決定。不同于回歸算法將所有決策樹輸出結果的平均值作為預測值,分類算法將被決策樹預測最多的類作為預測結果。其一般步驟如下:1)通過對數據隨機采樣的方式,從原始數據集中構建N個子數據集。2)對每一個采樣的子數據集構建決策樹。3)對于預測數據,則根據每棵樹的輸出結果,將輸出最多的分類標簽作為預測值。3.3.3分類技術4.隨機森林分類隨機森林分類算法可以通過sklearn實現如下:#導入相關函數包fromsklearn.ensembleimportRandomForestClassifierfromsklearn.datasetsimportmake_classification

#加載數據集X,y=make_classification(n_samples=1000,n_features=4,n_informative=2,n_redundant=0,random_state=0,shuffle=False)

#模型訓練clf=RandomForestClassifier(max_depth=2,random_state=0)clf.fit(X,y)

#模型預測

clf.predict([[0,0,0,0]])#輸出分類標簽3.3.3分類技術

超平面間隔支持向量支持向量機3.3.3分類技術6. 神經網絡算法一些基于神經網絡的算法在分類領域廣泛應用,受到了極大的關注。例如多層感知機MLP,深度學習中的卷積神經網絡CNN。這些算法通過不同的卷積層(不同的濾波器)用于提取樣本低維稠密的特征,然后利用池化層對數據進行降維,最后利用全連接層和softmax函數得到樣本在不同類上的概率值。3.3.4分類評價標準

混淆矩陣:是一張表,這張表通過對比預測的分類結果和真實的分類結果來描述衡量分類器的性能。以二分類為例,混淆矩陣是展示預測分類和真實值四種不同結果組合的表。準確率(accuracy)精確率(precision)

真實分類

NoYes預測分類NoTNFNYesFPTP

3.3.4分類評價標準召回率(recall)F1值ROC-AUC指標ROC是分類器采用不同分類閾值時,真正例比率(TruePositiveRate,TPR)和假正例比率(FalsePositiveRate,FPR)的比值所展現出的曲線。如下圖所示藍色虛線表示分類器隨機猜測的結果,紅色曲線為ROC曲線。ROC下面積(即AUC)越大,表明分類器越好。

3.3.4分類評價標準PR-AUC不用于ROC同時兼顧正例和負例,precision和recall都是關于正例的評價度量指標,因此當樣本分布不平衡時如果主要關心正例的情況,PR曲線更合適。PR曲線的縱軸是Precision,橫軸是recall,如圖所示:PR-AUC指標3.3.5案例:新聞分類以新聞分類為例,實現分類算法應用的具體過程。1.數據集某新聞數據的示例如圖所示,每一條新聞包含標題(Title)、作者(Author)、類別(Category)、出版時間(PublishedDate)、更新時間(UpdatedOn)、網址(Slug)、摘要(Blurb)、新聞正文(Body)等信息。其中類別包含了“Business&Finance”、“HealthCare”、“Science&Health”、“Politics&Policy”、“CriminalJustice”這五個分類,每一條新聞僅屬于其中一個分類。新聞數據3.3.5案例:新聞分類2.導入相關函數包3.加載標注數據集lTitles=[]lCategories=[]withopen('NewsData.tsv','r',encoding='gbk',errors='ignore')astsv:count=0forlineintsv:a=line.strip().split('\t')[:3]ifa[2]in['Business&Finance','HealthCare','Science&Health','Politics&Policy','CriminalJustice']:title=a[0].lower()title=re.sub('\s\W','',title)title=re.sub('\W\s','',title)lTitles.append(title)lCategories.append(a[2])4.訓練數據和測試數據劃分#默認按照3:1劃分title_train,title_test,category_train,category_test=train_test_split(lTitles,lCategories)title_train,title_valid,category_train,category_valid=train_test_split(title_train,category_train)3.3.5案例:新聞分類5.數據向量化、特征選擇、采樣等預處理#利用詞袋模型Bagofwords(BOW)對文本進行向量化tokenizer=nltk.tokenize.RegexpTokenizer(r"\w+")vectorizer=CountVectorizer(tokenizer=tokenizer.tokenize)vectorizer.fit(iter(title_train))#學習原始文檔中所有詞的詞匯字典X_train=vectorizer.transform(iter(title_train))X_valid=vectorizer.transform(iter(title_valid))X_test=vectorizer.transform(iter(title_test))

encoder=LabelEncoder()encoder.fit(category_train)#存儲所有類別標簽y_train=encoder.transform(category_train)y_valid=encoder.transform(category_valid)y_test=encoder.transform(category_test)

#特征選擇#根據特征方差,通過設定閾值刪除無用的特征print("降維前的特征數量:",X_train.shape[1])selection=VarianceThreshold(threshold=0.001)Xtr_whole=copy.deepcopy(X_train)Ytr_whole=copy.deepcopy(y_train)selection.fit(X_train)

X_train=selection.transform(X_train)X_valid=selection.transform(X_valid)X_test=selection.transform(X_test)print("降維后的特征數量:",X_train.shape[1])

#數據采樣sm=SMOTE(random_state=42)#由于不同類標簽下的數據量不是均勻分布的,因此使用#SMOTE對數量較少的類進行上采樣,以便類的分布是均勻的X_train,y_train=sm.fit_resample(X_train,y_train)3.3.5案例:新聞分類6.分類模型訓練#隨機森林算法(RandomForest)rf=RandomForestClassifier(n_estimators=40)rf.fit(X_train,y_train)pred=rf.predict(X_valid)print(classification_report(y_valid,pred,target_names=encoder.classes_))

#多項式樸素貝葉斯(MultinomialNaiveBayesian)nb=MultinomialNB()nb.fit(X_train,y_train)pred_nb=nb.predict(X_valid)print(classification_report(y_valid,pred_nb,target_names=encoder.classes_))兩種模型在驗證集上的分類效果如下圖3.3.5案例:新聞分類7.模型預測pred_final=nb.predict(X_test)print(classification_report(y_test,pred_final,target_names=encoder.classes_))樸素貝葉斯模型在測試集上的預測效果多項式樸素貝葉斯算法在新聞測試數據集上的分類效果目錄

回歸算法

聚類算法

分類算法

支持向量機

決策樹3.13.23.33.43.5

綜合案例:基于隨機森林回歸的

空氣質量預測3.6◎支持向量機簡介◎間隔◎核函數與方法◎案例:垃圾郵件過濾支持向量機3.43.4.1支持向量機簡介支持向量機SVM最早是在20世紀90年代由Cortes與Vapnik提出,它是基于統計學習理論,具有很好的數學基礎支撐。SVM可以處理分類問題和回歸問題,但是在分類問題上效果更好,在回歸問題上也有較好的表現。支持向量分類機處理分類的SVM支持向量回歸機處理回歸的SVMSVM本質上就是一種二類分類模型,其基本模型定義為特征空間上間隔最大化的線性分類器,學習策略則是尋找以最大間隔把兩個類分開的超平面,這可以形式化一個求解凸二次規劃問題。3.4.2間隔

無數超平面對數據進行劃分

3.4.2間隔

3.4.2間隔支持向量機學習方法從建模形式簡單到復雜可以分為:線性可分支持向量機、線性支持向量機、非線性支持向量機。線性可分支持向量機(硬間隔支持向量機)面向數據線性可分的情況,通過硬間隔最大化學習一個線性分類器,該分類器又稱作硬間隔支持向量機。線性支持向量機(軟間隔支持向量機)線性支持向量機面向數據近似線性可分的情況,通過軟間隔最大化學習一個線性分類器,該分類器又稱作。非線性支持向量機面向數據線性不可分的情況,通過使用核技巧以及軟間隔最大化學習分類器。3.4.2間隔

3.4.2間隔2.線性支持向量機對于數據不能完全可分的情況,線性可分支持向量機并不適用。為了能擴展到線性不可分的問題,線性支持向量機修改硬間隔最大化為軟間隔最大化,從而使得完全不可分的要求弱化,只需要近似可分即可。此時D中可能存在一些異常點使得不存在一個線性超平面將數據完全分隔開,而將這些異常點去除后,剩下大部分的數據樣本則是線性可分的。如圖所示,陰影的樣本點為不滿足約束的樣本。。上述問題,可以通過優化如下目標函數實現:線性支持向量機

3.4.2間隔

3.非線性支持向量機如圖左側所示,藍色樣本和紅色樣本交叉,無法通過一條直線將兩者分割開來,而是通過一個曲線模型將其分離開。非線性可分問題到高維空間中的映射3.4.2間隔

3.4.3核函數與方法核技巧(kerneltrick)現實中存在很多非線性可分問題無法直接通過線性分類器進行區分。解決這類問題的一種方法就是將非線性問題變換為線性問題,通過求解變換后的線性問題來求解原來的非線性問題。核技巧就屬于這樣的方法。核技巧應用到支持向量機基本思想通過一個非線性變換將輸入特征空間對應到一個新的特征空間,使得輸入空間中的超曲面模型對應新特征空間中的超平面模型。這樣,分類問題可以通過在新特征空間中求解線性問題來完成。非線性支持向量機正是基于核方法來設計模型。3.4.3核函數與方法

核函數線性核多項式核高斯核拉普拉斯核Sigmoid核3.4.4案例:垃圾郵件過濾以垃圾郵件過濾為例,介紹支持向量機分類算法應用的具體實現過程1.數據集郵件數據如下圖所示,每一行數據包含兩個字段,第一列為類別標簽表明該郵件是否是垃圾郵件,ham表示非垃圾郵件,spam表示是垃圾郵件。第二列表明為該郵件的主題內容。

郵件數據3.4.4案例:垃圾郵件過濾2.導入相關函數包3.加載郵件訓練數據集emails=pd.read_csv("spam.csv",encoding='latin-1')emails=emails.rename(columns={'v1':'label','v2':'message'})cols=['label','message']emails=emails[cols]emails=emails.dropna(axis=0,how='any')

#郵件數據預處理num_emails=emails["message"].sizedefemailPreprocess(rawEmail):letters=re.sub("[^a-zA-Z]","",rawEmail)#刪除非英文的字符words=letters.lower().split()return("".join(words))

processedEmail=[]foriinrange(0,num_emails):processedEmail.append(emailPreprocess(emails["message"][i]))

#創建新的dataframeemails["Processed_Msg"]=processedEmail#處理后的郵件消息cols2=["Processed_Msg","label"]emails=emails[cols2]

3.4.4案例:垃圾郵件過濾數據劃分以及數據預處理#創建訓練集和測試集X_train,X_test,Y_train,Y_test=train_test_split(emails["Processed_Msg"],emails["label"])

#數據向量化vectorizer=CountVectorizer(analyzer="word",tokenizer=None,preprocessor=None,stop_words=None,max_features=5000)#定義向量化變量train_features=vectorizer.fit_transform(X_train)#對訓練數據樣本進行向量化train_features=train_features.toarray()

test_features=vectorizer.transform(X_test)#對測試數據樣本進行向量化test_features=test_features.toarray()加載SVM模型(線性核)

clf=svm.SVC(kernel='linear',C=1.0)#使用線性核clf.fit(train_features,Y_train)#訓練predicted=clf.predict(test_features)#測試accuracy=np.mean(predicted==Y_test)print("Accuracy:",accuracy)最終測試結果顯示的正確率為:Accuracy:0.9892318736539842目錄

回歸算法

聚類算法

分類算法

支持向量機

決策樹3.13.23.33.43.5

綜合案例:基于隨機森林回歸的

空氣質量預測3.6◎決策樹簡介◎構造及基本流程◎剪枝方法◎案例:鳶尾花卉預測應用決策樹3.53.5.1決策樹簡介決策樹是一種用于回歸和分類的基本算法。本章主要討論用于分類的決策樹。分類決策樹主要在于構建一個樹狀結構,其中每個內部結點表示樣本中一個特征或屬性,每個分支表示對特征測試的結果,每個葉結點表示最終分類。如圖所示是決策樹對于某一個樣本實例進行分類的過程,圓和方框分別代表內部節點和葉結點。決策樹分類3.5.1決策樹簡介對于一個訓練數據集,決策樹算法通常包含特征選擇、樹的生成與剪枝三大步驟:特征選擇:從訓練數據中所有特征中根據某種評估標準選擇一個特征作為當前最優特征,并根據該特征的取值對訓練數據進行分割,使得對各個子數據集能夠在當前條件下進行最好的分類。樹的生成:依據所選擇的特征評估標準,從根結點開始,從上至下遞歸地生成子結點。如果所分割的子數據集能夠被正確分類,那么構建葉結點,并將這些子數據集分到所對應的葉結點中;如果子數據集不能被正確分類,則繼續選擇新的最優特征,繼續對其進行分割,并構建相應的結點。剪枝:上述生成決策樹可能對訓練數據具有好的分類能力,但對未知的數據不一定具有好分類效果,也就是過擬合現象。對此,決策樹采用剪枝方法對樹結構進行簡化,從而使其具有更好的泛化能力。3.5.2構造及基本流程

3.5.3剪枝方法

3.5.3剪枝方法

3.5.4案例:鳶尾花卉預測應用以鳶尾花卉預測為例,介紹決策樹分類算法應用的具體實現過程1.數據集鳶尾花數據示例如下圖所示,每一行樣本包含四種特征,分別為花萼長度(sepal.length)、花萼寬度(sepal.width)、花瓣長度(petal.length)、花瓣寬度(petal.width),花的種類分為“setosa”、“versicolor”、“virginica'”三種。將根據鳶尾花的花萼和花瓣的長寬度特征,利用決策樹模型對其分類。鳶尾花數據3.5.4案例:鳶尾花卉預測應用2.導入相關函數包3.加載訓練數據集,訓練模型,預測iris=pd.read_csv("iris.csv")train,test=train_test_split(iris,test_size=0.25)#訓練和測試數據劃分,測試集占據25%.

X_train=train[['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']]#提取有關特征生成訓練數據樣本y_train=train.Species#提取訓練數據類別標簽print(np.unique(y_train))

X_test=test[['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']]#提取有關特征生成測試數據樣本y_test=test.Species#提取測試數據類別標簽

#加載訓練模型deTree=DecisionTreeClassifier(criterion='entropy',random_state=7)deTree.fit(X_train,y_train)#模型訓練

y_pred=deTree.predict(X_test)#模型預測print("Accuracy:",accuracy_score(y_test,y_pred))

鳶尾花數據最終的預測結果為:Accuracy:0.9210526315789473目錄

回歸算法

聚類算法

分類算法

支持向量機

決策樹3.13.23.33.43.5

綜合案例:基于隨機森林回歸的

空氣質量預測3.6綜合案例:基于隨機森林回歸的空氣質量預測3.63.6綜合案例:基于隨機森林回歸的空氣質量預測在綜合案例分析中,將以空氣質量預測任務為例,借助機器學習算法解決空氣質量預測問題。該任務可以定義為一個回歸問題,已知一個城市的歷史空氣質量指標(Airqualityindex,AQI)數據及其空氣中主要污染物濃度數據,需要建立空氣污染物濃度(自變量)和AQI(因變量)兩者之間關系的模型,借助該模型,對于給定的任意一個城市的空氣污染物濃度,可以預測其AQI值。1.數據集空氣數據集示例如下圖所示,第一列為時間,第二列為對應空氣質量3.6綜合案例:基于隨機森林回歸的空氣質量預測2.導入相關函數包3.加載數據集#查看數據集print(data_src.head())print(data_src.shape)index=data_src.indexcol=data_src.columnsclass_names=np.unique(data_src.iloc[:,-1])#print(type(data_src))#print(class_names)#print(data_src.describe())

#劃分訓練集和驗證集data_train,data_test=train_test_split(data_src,test_size=0.1,random_state=0)#訓練集和測試集劃#分比例9:1#print("訓練集統計信息:\n",data_train.describe().round(2))#print("驗證集統計信息:\n",data_test.describe().round(2))#print("訓練集信息:\n",data_train.iloc[:,-1].value_counts())#print("驗證集信息:\n",data_test.iloc[:,-1].value_counts())

X_train=data_train.iloc[:,2:]#取數據集后6列作為特征(即自變量)X_test=data_test.iloc[:,2:]feature=data_train.iloc[:,2:].columns

y_train=data_train.iloc[:,0]#第一列空氣質量指數(AQI)作為因變量y_test=data_test.iloc[:,0]3.6綜合案例:基于隨機森林回歸的空氣質量預測4.加載模型#參數選擇criterion=['mae','mse']#回歸樹衡量分枝質量的指標,MAE和MSE作為備選n_estimators=[int(x)forxinnp.linspace(start=200,stop=2000,num=10)]max_features=['auto','sqrt']max_depth=[int(x)forxinnp.linspace(10,100,num=10)]max_depth.append(None)min_samples_split=[2,5,10]min_samples_leaf=[1,2,4]bootstrap=[True,False]random_grid={'criterion':criterion,'n_estimators':n_estimators,'max_features':max_features,'max_depth':max_depth,'min_samples_split':min_samples_split,'min_samples_leaf':min_samples_leaf,'bootstrap':bootstrap}#構建隨機森林回歸模型clf=RandomForestRegressor()clf_random=RandomizedSearchCV(estimator=clf,param_distributions=random_grid,n_iter=15,cv=3,verbose=2,random_state=42,n_jobs=1)#隨機搜索最佳參數clf_random.fit(X_train,y_train)print(clf_random.best_params_)#輸出最優參數3.6綜合案例:基于隨機森林回歸的空氣質量預測5.模型訓練、驗證rfr=RandomForestRegressor(criterion='mse',bootstrap=False,max_features='sqrt',max_depth=10,min_samples_split=5,n_estimators=120,min_samples_leaf=2)rfr.fit(X_train,y_train)y_train_pred=rfr.predict(X_train)y_test_pred=rfr.predict(X_test)#可視化各特征的重要性(Giniimportance)plt.barh(range(len(rfr.feature_importances_)),rfr.feature_importances_,tick_label=['PM','PM10','So2','No2','Co','O3'])plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#用于正常顯示中文標簽plt.title('各特征的重要性')plt.savefig("./Figure1.png")plt.show()print("決策樹模型評估--訓練集:")print('訓練r^2:',rfr.score(X_train,y_train))print('均方差',mean_squared_error(y_train,y_train_pred))print('絕對差',mean_absolute_error(y_train,y_train_pred))print('解釋度',explained_variance_score(y_train,y_train_pred))print("決策樹模型評估

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論