人工智能通識(shí)(基礎(chǔ)、技術(shù)、前沿、倫理與實(shí)踐)-課件-第3章 機(jī)器學(xué)習(xí)_第1頁(yè)
人工智能通識(shí)(基礎(chǔ)、技術(shù)、前沿、倫理與實(shí)踐)-課件-第3章 機(jī)器學(xué)習(xí)_第2頁(yè)
人工智能通識(shí)(基礎(chǔ)、技術(shù)、前沿、倫理與實(shí)踐)-課件-第3章 機(jī)器學(xué)習(xí)_第3頁(yè)
人工智能通識(shí)(基礎(chǔ)、技術(shù)、前沿、倫理與實(shí)踐)-課件-第3章 機(jī)器學(xué)習(xí)_第4頁(yè)
人工智能通識(shí)(基礎(chǔ)、技術(shù)、前沿、倫理與實(shí)踐)-課件-第3章 機(jī)器學(xué)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩184頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

人工智能通識(shí)——基礎(chǔ)、技術(shù)、前沿、倫理與實(shí)踐主講教師和作者林子雨簡(jiǎn)介廈門大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系副教授以第一作者編著18本大數(shù)據(jù)與人工智能教材被國(guó)內(nèi)1000余所高校采用榮獲“2022年福建省高等教育教學(xué)成果獎(jiǎng)特等獎(jiǎng)(個(gè)人排名第一)”入選“2021年高校計(jì)算機(jī)專業(yè)優(yōu)秀教師獎(jiǎng)勵(lì)計(jì)劃”2018年國(guó)家精品在線開放課程(獨(dú)立主講)2020年國(guó)家級(jí)線上一流本科課程(獨(dú)立主講)2021年國(guó)家級(jí)線上一流本科課程(獨(dú)立主講)入選“2023年教育部國(guó)家智慧教育公共服務(wù)平臺(tái)應(yīng)用典型案例”大模型科普?qǐng)?bào)告全網(wǎng)瀏覽量超過(guò)1000萬(wàn)《人工智能通識(shí)——基礎(chǔ)、技術(shù)、前沿、倫理與實(shí)踐》教材《人工智能通識(shí)》林子雨

編著人民郵電出版社2025年11月第1版ISBN:978-7-115-68359-5定價(jià):59.80元教材官網(wǎng)提供詳細(xì)信息和樣書申請(qǐng)官網(wǎng):/post/ai-introduction/掃碼訪問(wèn)教材官網(wǎng)了解詳情、獲取資源、申請(qǐng)樣書教材官網(wǎng)提供配套教學(xué)資源:教學(xué)大綱、講義PPT、上機(jī)實(shí)驗(yàn)手冊(cè)、案例視頻、MOOC視頻、大模型科普講座PPT、大模型講座視頻和1000道題庫(kù)等第3章機(jī)器學(xué)習(xí)目錄01機(jī)器學(xué)習(xí)基本概念02sklearn簡(jiǎn)介03監(jiān)督學(xué)習(xí)04無(wú)監(jiān)督學(xué)習(xí)05強(qiáng)化學(xué)習(xí)06人工神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)01機(jī)器學(xué)習(xí)基本概念Partone3.1機(jī)器學(xué)習(xí)基本概念什么是機(jī)器學(xué)習(xí)機(jī)器學(xué)習(xí)的四大類型機(jī)器學(xué)習(xí)的基本過(guò)程3.1.1什么是機(jī)器學(xué)習(xí)機(jī)器學(xué)習(xí)是人工智能領(lǐng)域中的一項(xiàng)關(guān)鍵技術(shù),它指的是計(jì)算機(jī)系統(tǒng)通過(guò)學(xué)習(xí)和經(jīng)驗(yàn)積累來(lái)不斷提升其性能的過(guò)程簡(jiǎn)單來(lái)說(shuō),機(jī)器學(xué)習(xí)就是讓計(jì)算機(jī)具備自我學(xué)習(xí)和改進(jìn)的能力,從而模擬人類的思考和行為。機(jī)器學(xué)習(xí)涉及多個(gè)學(xué)科領(lǐng)域,包括統(tǒng)計(jì)學(xué)、概率論、優(yōu)化算法等。機(jī)器學(xué)習(xí)的核心在于構(gòu)建一個(gè)能夠從數(shù)據(jù)中學(xué)習(xí)的模型。這個(gè)模型通常是通過(guò)訓(xùn)練數(shù)據(jù)來(lái)構(gòu)建的,訓(xùn)練數(shù)據(jù)包含已知的輸入和輸出,機(jī)器學(xué)習(xí)算法會(huì)利用這些數(shù)據(jù)進(jìn)行模型的參數(shù)調(diào)整和優(yōu)化,使得模型能夠更好地?cái)M合數(shù)據(jù)的內(nèi)在規(guī)律。機(jī)器學(xué)習(xí)算法從大量數(shù)據(jù)中自動(dòng)提取特征、發(fā)現(xiàn)規(guī)律根據(jù)規(guī)律對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)或決策3.1.2機(jī)器學(xué)習(xí)的四大類型(有標(biāo)簽)(有評(píng)級(jí)標(biāo)簽)(無(wú)標(biāo)簽)(有部分標(biāo)簽)有監(jiān)督學(xué)習(xí)無(wú)監(jiān)督學(xué)習(xí)半監(jiān)督學(xué)習(xí)增強(qiáng)學(xué)習(xí)3.1.3機(jī)器學(xué)習(xí)的基本過(guò)程數(shù)據(jù)探索性分析模型訓(xùn)練數(shù)據(jù)預(yù)處理建立模型特征工程交叉驗(yàn)證模型評(píng)估02機(jī)器學(xué)習(xí)工具包sklearnParttwo3.2機(jī)器學(xué)習(xí)工具包sklearnsklearn是一個(gè)Python的第三方模塊,可以使用如下命令安裝sklearn:基于sklearn的機(jī)器學(xué)習(xí)的一般流程為:數(shù)據(jù)獲取—>數(shù)據(jù)預(yù)處理—>模型訓(xùn)練—>模型評(píng)估—>模型優(yōu)化>pipinstallscikit-learn-i/simple/3.2機(jī)器學(xué)習(xí)工具包sklearn數(shù)據(jù)獲取可以導(dǎo)入內(nèi)部數(shù)據(jù)集、計(jì)算機(jī)生成的數(shù)據(jù)集、網(wǎng)絡(luò)上的數(shù)據(jù)集和文件中的數(shù)據(jù)集等。這里導(dǎo)入sklearn自帶的鳶尾花數(shù)據(jù)集,具體代碼如下:importnumpyasnpimportpandasaspdfromsklearnimportdatasetsiris=datasets.load_iris()#導(dǎo)入鳶尾花數(shù)據(jù)集iris.data#數(shù)據(jù)集iris['target']#標(biāo)簽#利用DataFrame做可視化分析df=pd.DataFrame(iris.data,columns=iris.feature_names)#用鳶尾花的特征做列名df['target']=iris.target#把標(biāo)簽集插入最后一列print(df.head())#顯示數(shù)據(jù)前五行3.2機(jī)器學(xué)習(xí)工具包sklearn數(shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)處理包括:fromsklearnimportpreprocessingscaler=preprocessing.MinMaxScaler()#MinMaxScaler把樣本縮放到0~1之間scaler.fit(iris.data)#fit()函數(shù)可以找到數(shù)據(jù)的整體指標(biāo),如平均值、方差等data=scaler.transform(iris.data)#根據(jù)數(shù)據(jù)的整體指標(biāo)對(duì)數(shù)據(jù)進(jìn)行歸一化print(data)數(shù)據(jù)的標(biāo)準(zhǔn)化數(shù)據(jù)的歸一化數(shù)據(jù)的二值化非線性轉(zhuǎn)換數(shù)據(jù)特征編碼處理缺失值具體代碼如下:3.2機(jī)器學(xué)習(xí)工具包sklearn模型的訓(xùn)練需要根據(jù)問(wèn)題特點(diǎn),選擇適當(dāng)?shù)哪P?。?dāng)前的問(wèn)題是根據(jù)特征預(yù)測(cè)鳶尾花的類型,屬于帶標(biāo)簽的分類問(wèn)題,并且樣本個(gè)數(shù)為150個(gè),小于100000,所以,可以選擇Linear_SVC模型進(jìn)行分類。具體代碼如下:fromsklearn.model_selectionimporttrain_test_split#把樣本劃分為訓(xùn)練集和測(cè)試集X_train,X_test,y_train,y_test=train_test_split(data,iris.target,test_size=1/3)print(len(X_train))print(len(X_test))#查看訓(xùn)練集和測(cè)試集的樣本數(shù)量fromsklearnimportsvmclf=svm.SVC(kernel='linear',C=1.0,probability=True)#linear表示線性核函數(shù),probability表示是否采用概率估計(jì)clf.fit(X_train,y_train)#用訓(xùn)練集訓(xùn)練模型clf.predict(X_test)#預(yù)測(cè)測(cè)試集clf.get_params()#查看參數(shù)clf.predict_proba(X_test)#查看樣本屬于每個(gè)類型的概率print(clf.score(X_test,y_test))#查看模型預(yù)測(cè)的準(zhǔn)確率,對(duì)不同類型的模型有不同的評(píng)分算法,由score方法內(nèi)部定義3.2機(jī)器學(xué)習(xí)工具包sklearn模型的評(píng)估模型的評(píng)估和模型的優(yōu)化相關(guān)功能在sklearn.model_selection中。除了使用estimator的score()函數(shù)簡(jiǎn)單粗略地評(píng)估模型的質(zhì)量之外,sklearn.metrics模塊針對(duì)不同的問(wèn)題類型提供了各種評(píng)估指標(biāo),并且可以創(chuàng)建用戶自定義的評(píng)估指標(biāo)??梢圆捎媒徊骝?yàn)證方法評(píng)估模型的泛化能力,有效地避免過(guò)度擬合。交叉驗(yàn)證的基本思想是將原始數(shù)據(jù)進(jìn)行分組,一部分做為訓(xùn)練集來(lái)訓(xùn)練模型,另一部分做為測(cè)試集來(lái)評(píng)價(jià)模型。交叉驗(yàn)證用于評(píng)估模型的預(yù)測(cè)性能,尤其是訓(xùn)練好的模型在新數(shù)據(jù)上的表現(xiàn),可以在一定程度上減小過(guò)擬合,還可以從有限的數(shù)據(jù)中獲取盡可能多的有效信息。使用sklearn.metrics模塊進(jìn)行評(píng)估的代碼如下:fromsklearn.metricsimportclassification_reportprint(classification_report(iris.target,clf.predict(data),target_names=iris.target_names))#對(duì)全體數(shù)據(jù)集進(jìn)行評(píng)估3.2機(jī)器學(xué)習(xí)工具包sklearn模型的評(píng)估采用k折交叉驗(yàn)證方法評(píng)估模型的泛化能力的代碼如下:fromsklearn.model_selectionimportcross_val_score#cross_val_score可以用來(lái)做交叉驗(yàn)證scores=cross_val_score(clf,data,iris.target,cv=5)#采用五折交叉驗(yàn)證print(scores)#輸出每次評(píng)分3.2機(jī)器學(xué)習(xí)工具包sklearn模型的優(yōu)化優(yōu)化模型的方法包括:網(wǎng)格搜索法隨機(jī)搜索法模型特定交叉驗(yàn)證信息準(zhǔn)則優(yōu)化等網(wǎng)格搜索法在指定的超參數(shù)空間中對(duì)每一種可能的情況進(jìn)行交叉驗(yàn)證評(píng)分并選出最好的超參數(shù)組合。具體代碼如下:fromsklearnimportsvmfromsklearn.model_selectionimportGridSearchCVsvc=svm.SVC()#定義模型param_grid=[{'C':[0.1,1,10,100,1000],'kernel':['linear']},{'C':[0.1,1,10,100,1000],'gamma':[0.001,0.01],'kernel':['rbf']}]#超參數(shù)空間scoring='accuracy'#評(píng)分函數(shù)clf=GridSearchCV(svc,param_grid,scoring=scoring,cv=10)#得到一個(gè)優(yōu)化后的分類器clf.fit(X_train,y_train)#用數(shù)據(jù)訓(xùn)練分類器print(clf.best_score_)#查看最優(yōu)得分03監(jiān)督學(xué)習(xí)Partthree3.3監(jiān)督學(xué)習(xí)回歸算法分類算法支持向量機(jī)KNN3.3.1回歸算法回歸算法線性回歸嶺回歸套索回歸彈性網(wǎng)絡(luò)回歸3.3.1回歸算法——1.線性回歸線性回歸(LinearRegression)是最為人熟知的一種建模技術(shù),是人們?cè)趯W(xué)習(xí)預(yù)測(cè)模型時(shí)首選的技術(shù)之一。線性回歸本來(lái)是統(tǒng)計(jì)學(xué)里的概念,現(xiàn)在經(jīng)常被用在機(jī)器學(xué)習(xí)中。在這種技術(shù)中,因變量是連續(xù)的,自變量可以是連續(xù)的也可以是離散的,回歸線的性質(zhì)是線性的。定義對(duì)于線性回歸而言,如果2個(gè)或者多個(gè)變量之間存在“線性關(guān)系”,那么我們就可以通過(guò)歷史數(shù)據(jù),摸清變量之間的關(guān)系,建立一個(gè)有效的模型,來(lái)預(yù)測(cè)未來(lái)的變量結(jié)果?!熬€性關(guān)系”建模速度快,不需要很復(fù)雜的計(jì)算,在數(shù)據(jù)量大的情況下依然運(yùn)行速度很快,并且可以根據(jù)系數(shù)給出每個(gè)變量的理解和解釋。它的缺點(diǎn)是不能很好地?cái)M合非線性數(shù)據(jù),所以需要先判斷變量之間是否是線性關(guān)系。優(yōu)點(diǎn)3.3.1回歸算法——1.線性回歸模型原理3.3.1回歸算法——1.線性回歸模型原理3.3.1回歸算法——1.線性回歸模型原理即找到一條直線使得它盡可能擬合數(shù)據(jù)的分布(如圖所示),從而有一個(gè)新的樣本點(diǎn)時(shí),可以利用學(xué)習(xí)到的這條直線進(jìn)行預(yù)測(cè)。線性回歸用直線擬合散點(diǎn)3.3.1回歸算法——1.線性回歸模型原理既然是用直線擬合散點(diǎn),就會(huì)存在多條直線都可以擬合數(shù)據(jù)的分布,畢竟數(shù)據(jù)不是真的落在一條直線上,而是分布在直線周圍。因此,就要找到一個(gè)評(píng)判標(biāo)準(zhǔn),用于評(píng)價(jià)哪條直線的擬合程度是最高的,這時(shí)就要用到“損失函數(shù)”。損失函數(shù)是衡量回歸模型誤差的函數(shù),也就是判斷哪條“直線”擬合效果更好的評(píng)價(jià)標(biāo)準(zhǔn)。這個(gè)函數(shù)的值越小,說(shuō)明直線越能擬合數(shù)據(jù)分布。3.3.1回歸算法——1.線性回歸模型原理3.3.1回歸算法——1.線性回歸sklearn實(shí)現(xiàn)sklearn提供了sklearn.linear_model.LinearRegression類來(lái)實(shí)現(xiàn)線性回歸,其定義如下:LinearRegression(*,fit_intercept=True,normalize=False,copy_X=True,n_jobs=None,positive=False)LinearRegression類的常用參數(shù)、方法分別如表所示。參數(shù)名稱含義fit_intercept是否計(jì)算該模型的截距。默認(rèn)為True,如果使用中心化的數(shù)據(jù),可以考慮設(shè)置為False,不考慮截距normalize默認(rèn)為False。當(dāng)fit_intercept設(shè)置為False的時(shí)候,這個(gè)參數(shù)會(huì)被自動(dòng)忽略。如果為True,模型會(huì)標(biāo)準(zhǔn)化輸入?yún)?shù)copy_X可選參數(shù),默認(rèn)值為True;如果為True,x將被復(fù)制;否則被重寫n_jobs可選參數(shù),默認(rèn)值為1;如果設(shè)為1,將啟動(dòng)所有CPUpositive默認(rèn)為False。如果positive=True,則強(qiáng)制將系數(shù)設(shè)為正數(shù)LinearRegression類的常用參數(shù)3.3.1回歸算法——1.線性回歸sklearn實(shí)現(xiàn)方法功能fit(X,y,[sample_weight])擬合線性模型,即訓(xùn)練模型predict(X)利用訓(xùn)練好的模型進(jìn)行預(yù)測(cè),返回預(yù)測(cè)的函數(shù)值score(X,y,[sample_weight])返回模型的得分,分?jǐn)?shù)不超過(guò)1,越接近1說(shuō)明模型預(yù)測(cè)效果越好LinearRegression類的常用方法3.3.1回歸算法——1.線性回歸實(shí)驗(yàn)1:使用線性回歸模型預(yù)測(cè)房?jī)r(jià)這里利用sklearn提供的LinearRegression類構(gòu)建一個(gè)簡(jiǎn)單的線性回歸模型,用于預(yù)測(cè)房?jī)r(jià)。具體代碼如下:fromsklearn.linear_modelimportLinearRegressionimportnumpyasnp#構(gòu)造樣本數(shù)據(jù)x=np.array([2014,2015,2016,2017,2018,2019,2020,2021,2022,2023])y=np.array([248000,306000,267000,312000,288000,261000,342000,331000,312000, 274000])#將樣本數(shù)據(jù)reshape為二維數(shù)組x=x.reshape((-1,1))#創(chuàng)建線性回歸模型model=LinearRegression()#將模型擬合到樣本數(shù)據(jù)上model.fit(x,y)#使用模型進(jìn)行預(yù)測(cè)x_test=np.array([2024]).reshape((-1,1))y_predict=model.predict(x_test)#輸出預(yù)測(cè)結(jié)果print("預(yù)測(cè)房?jī)r(jià)為:",y_predict)3.3.1回歸算法——1.線性回歸實(shí)驗(yàn)1:使用線性回歸模型預(yù)測(cè)房?jī)r(jià)下面我們采用繪圖的方式更加直觀地呈現(xiàn)預(yù)測(cè)結(jié)果,具體代碼如下:importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.linear_modelimportLinearRegression#生成樣本數(shù)據(jù)x=np.array([2014,2015,2016,2017,2018,2019,2020,2021,2022,2023])y=np.array([248000,306000,267000,312000,288000,261000,342000,331000,312000,274000])model=LinearRegression()#創(chuàng)建線性回歸模型model.fit(x.reshape(-1,1),y)#訓(xùn)練模型y_predict=model.predict(x.reshape(-1,1))#預(yù)測(cè)結(jié)果plt.scatter(x,y,color='blue')#繪制散點(diǎn)圖plt.plot(x,y_predict,color='red')#繪制回歸線圖plt.xlabel('Year')#設(shè)置橫軸的名稱plt.ylabel('Price')#設(shè)置縱軸的名稱plt.show()#顯示圖形,如圖所示3.3.1回歸算法——1.線性回歸實(shí)驗(yàn)2:對(duì)糖尿病數(shù)據(jù)集進(jìn)行線性回歸分析下面再給出一個(gè)稍微復(fù)雜一點(diǎn)的應(yīng)用實(shí)例,這里將使用sklearn庫(kù)中自帶的糖尿病數(shù)據(jù)集diabetes進(jìn)行線性回歸分析。這個(gè)糖尿病數(shù)據(jù)集主要包括442行數(shù)據(jù),共有10個(gè)屬性值,分別是Age(年齡)、性別(Sex)、Bodymassindex(體質(zhì)指數(shù))、AverageBloodPressure(平均血壓)、S1(一年后疾病級(jí)數(shù)指標(biāo))、S2(一年后疾病級(jí)數(shù)指標(biāo))、S3(一年后疾病級(jí)數(shù)指標(biāo))、S4(一年后疾病級(jí)數(shù)指標(biāo))、S5(一年后疾病級(jí)數(shù)指標(biāo))、S6(一年后疾病級(jí)數(shù)指標(biāo))。數(shù)據(jù)集的目標(biāo)變量是一年后患疾病的定量指標(biāo),因此,適合于線性回歸分析。3.3.1回歸算法——1.線性回歸實(shí)驗(yàn)2:對(duì)糖尿病數(shù)據(jù)集進(jìn)行線性回歸分析importnumpyasnpimportmatplotlib.pyplotaspltx=np.random.randn(10)y=x*2+1plt.plot(x,y)#繪圖plt.xlabel('X軸')#設(shè)置x軸的名稱plt.ylabel('Y軸')#設(shè)置y軸的名稱plt.xlim((-5,5))#設(shè)置x軸范圍plt.ylim((-5,10))#設(shè)置y軸范圍plt.rcParams['axes.unicode_minus']=Falseplt.show()fromsklearnimportdatasetsimportpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt3.3.1回歸算法——1.線性回歸實(shí)驗(yàn)2:對(duì)糖尿病數(shù)據(jù)集進(jìn)行線性回歸分析#導(dǎo)入diabetes數(shù)據(jù)集diabetes=datasets.load_diabetes()#將數(shù)據(jù)集轉(zhuǎn)換為DataFrame格式diabetes_df=pd.DataFrame(data=diabetes.data,columns=diabetes.feature_names)diabetes_df['target']=diabetes.target#查看數(shù)據(jù)集的前幾行print(diabetes_df.head())#準(zhǔn)備自變量和因變量X=diabetes.datay=diabetes.targetprint(X[0],'\n',y[0])#把數(shù)據(jù)集分割成訓(xùn)練集和測(cè)試集fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)#test_size=0.2指定了測(cè)試集占總數(shù)據(jù)集的20%,剩余的80%將用作訓(xùn)練集#random_state=42確保了每次代碼運(yùn)行時(shí)數(shù)據(jù)集劃分的方式都相同,這有助于實(shí)驗(yàn)的可重復(fù)性print(X_train.shape,X_test.shape,y_train.shape,y_test.shape)3.3.1回歸算法——1.線性回歸實(shí)驗(yàn)2:對(duì)糖尿病數(shù)據(jù)集進(jìn)行線性回歸分析#導(dǎo)入線性回歸模型fromsklearn.linear_modelimportLinearRegression#創(chuàng)建線性回歸模型對(duì)象model=LinearRegression()#在訓(xùn)練集上擬合模型model.fit(X_train,y_train)#在測(cè)試集上進(jìn)行預(yù)測(cè)y_predict=model.predict(X_test)print(y_predict.shape)print(y_predict[:10])#計(jì)算模型的均方誤差(MeanSquaredError)fromsklearn.metricsimportmean_squared_errormse=mean_squared_error(y_test,y_predict)print('均方誤差:',mse)plt.rcParams['font.sans-serif']=['FangSong']#設(shè)置中文字體#繪制預(yù)測(cè)值與真實(shí)值的散點(diǎn)圖plt.scatter(y_test,y_predict,color='blue')plt.plot([y_test.min(),y_test.max()],[y_test.min(),y_test.max()],'--k')plt.xlabel('真實(shí)值')plt.ylabel('預(yù)測(cè)值')plt.title('線性回歸')plt.show()#顯示圖形,如下頁(yè)圖所示3.3.1回歸算法——1.線性回歸實(shí)驗(yàn)2:對(duì)糖尿病數(shù)據(jù)集進(jìn)行線性回歸分析3.3.1回歸算法——2.嶺回歸模型原理3.3.1回歸算法——2.嶺回歸sklearn實(shí)現(xiàn)sklearn提供了sklearn.linear_model.Ridge類來(lái)實(shí)現(xiàn)嶺回歸,其定義如下:Ridge(alpha=1.0,fit_intercept=True,normalize=False,copy_X=True,max_iter=None,tol=0.001,solver='auto', random_state=None)3.3.1回歸算法——2.嶺回歸sklearn實(shí)現(xiàn)Ridge類的常用參數(shù)如表所示,并且也提供了fit、predict和score方法。參數(shù)名稱含義alpha正則化系數(shù),默認(rèn)為1.0fit_intercept是否計(jì)算該模型的截距,默認(rèn)為Truenormalize默認(rèn)為False。當(dāng)fit_intercept設(shè)置為False的時(shí)候,這個(gè)參數(shù)會(huì)被自動(dòng)忽略。如果為True,模型會(huì)標(biāo)準(zhǔn)化輸入?yún)?shù)copy_X可選參數(shù),默認(rèn)值為True;如果為True,x將被復(fù)制;否則被重寫max_iter最大的迭代次數(shù),默認(rèn)為Nonetol解的精度,默認(rèn)為0.001solver求解方法,默認(rèn)為auto??蛇x參數(shù)為:auto、svd、cholesky、lsqr、sparse_cg、sagrandom_state偽隨機(jī)數(shù)發(fā)生器種子,隨機(jī)選擇特征來(lái)更新模型。如果為int,random_state即為隨機(jī)數(shù)發(fā)生器使用的種子;如果為RandomState實(shí)例,random_state即為隨機(jī)數(shù)發(fā)生器;如果為None,隨機(jī)數(shù)發(fā)生器為np.random使用的隨機(jī)數(shù)發(fā)生器實(shí)例Ridge類的常用參數(shù)3.3.1回歸算法——2.嶺回歸實(shí)驗(yàn)3:對(duì)加利福尼亞房?jī)r(jià)數(shù)據(jù)集進(jìn)行嶺回歸分析下面使用sklearn提供的Ridge類針對(duì)加利福尼亞房?jī)r(jià)數(shù)據(jù)集進(jìn)行嶺回歸分析。加利福尼亞房?jī)r(jià)數(shù)據(jù)集是sklearn自帶的數(shù)據(jù)集,它是一個(gè)廣泛用于回歸分析的公開數(shù)據(jù)集。這個(gè)數(shù)據(jù)集最初來(lái)源于1990年美國(guó)人口普查,主要用于回歸分析任務(wù),尤其是預(yù)測(cè)房?jī)r(jià)。它包含了加利福尼亞州各區(qū)域(或街區(qū)群)的房屋信息,包含約20640個(gè)樣本點(diǎn)。數(shù)據(jù)集包含多個(gè)特征(或?qū)傩裕?,通常?個(gè),這些特征包括MedInc(街區(qū)居民的收入中位數(shù))、HouseAge(房屋年齡的中位數(shù))、AveRooms(平均房間數(shù)目)、AveBedrms(平均臥室數(shù)目)、Population(街區(qū)人口)、AveOccup(平均房屋占用率)、Latitude(街區(qū)的緯度)、Longitude(街區(qū)的經(jīng)度)。數(shù)據(jù)集的目標(biāo)變量是每個(gè)街區(qū)房屋的中位數(shù)價(jià)格,這是一個(gè)連續(xù)的數(shù)值,通常用于回歸分析。3.3.1回歸算法——2.嶺回歸實(shí)驗(yàn)3:對(duì)加利福尼亞房?jī)r(jià)數(shù)據(jù)集進(jìn)行嶺回歸分析下面是嶺回歸分析的具體代碼:importmatplotlib.pyplotaspltimportnumpyasnpfromsklearn.datasetsimportfetch_california_housingfromsklearn.linear_modelimportRidgefromsklearn.metricsimportmean_squared_error,r2_scorefromsklearn.model_selectionimporttrain_test_split,GridSearchCVfromsklearn.preprocessingimportStandardScalerplt.rcParams['font.sans-serif']=['KaiTi']#設(shè)置中文字體plt.rcParams["axes.unicode_minus"]=False#此設(shè)置可以讓坐標(biāo)軸上的負(fù)數(shù)正常顯示#加載數(shù)據(jù)集housing=fetch_california_housing()X,y=housing.data,housing.target#數(shù)據(jù)預(yù)處理,特征標(biāo)準(zhǔn)化scaler=StandardScaler()X_scaled=scaler.fit_transform(X)3.3.1回歸算法——2.嶺回歸實(shí)驗(yàn)3:對(duì)加利福尼亞房?jī)r(jià)數(shù)據(jù)集進(jìn)行嶺回歸分析下面是嶺回歸分析的具體代碼:#把數(shù)據(jù)集劃分成訓(xùn)練集和測(cè)試集X_train,X_test,y_train,y_test=train_test_split(X_scaled,y,test_size=0.3,random_state=42)#test_size=0.3指定了測(cè)試集占總數(shù)據(jù)集的30%,剩余的70%將用作訓(xùn)練集#random_state=42確保了每次代碼運(yùn)行時(shí)劃分的方式都相同,這有助于實(shí)驗(yàn)的可重復(fù)性model=Ridge()#定義嶺回歸模型#嶺回歸通過(guò)引入所謂的L2正則化項(xiàng)來(lái)解決共線性問(wèn)題。L2正則化項(xiàng)是對(duì)模型系數(shù)的平方和進(jìn)行懲罰,其強(qiáng)度由參數(shù)alpha控制。較大的alpha值意味著更強(qiáng)的正則化,有助于減少過(guò)擬合,但同時(shí)也可能導(dǎo)致欠擬合。因此,選擇一個(gè)適當(dāng)?shù)腶lpha值對(duì)于模型的性能至關(guān)重要#定義參數(shù)網(wǎng)格param_grid={'alpha':[0.1,1,10,100]#正則化強(qiáng)度}3.3.1回歸算法——2.嶺回歸實(shí)驗(yàn)3:對(duì)加利福尼亞房?jī)r(jià)數(shù)據(jù)集進(jìn)行嶺回歸分析下面是嶺回歸分析的具體代碼:#網(wǎng)格搜索,將嘗試這四個(gè)不同的alpha值來(lái)找出最優(yōu)的一個(gè)#使用GridSearchCV類來(lái)設(shè)置網(wǎng)格搜索,這個(gè)類是sklearn提供的一個(gè)強(qiáng)大工具,用于系統(tǒng)地遍歷多種參數(shù)組合,通過(guò)交叉驗(yàn)證找到最佳的參數(shù)設(shè)置grid_search=GridSearchCV(model,param_grid,cv=5,return_train_score=True)#調(diào)用grid_search.fit(X_train,y_train),讓網(wǎng)格搜索在訓(xùn)練數(shù)據(jù)上執(zhí)行,嘗試所有可能的alpha值組合,以找出最佳參數(shù)設(shè)置。在這個(gè)過(guò)程中,它將使用交叉驗(yàn)證來(lái)評(píng)估每種參數(shù)組合的性能grid_search.fit(X_train,y_train)#網(wǎng)格搜索后的最佳參數(shù)和模型print("最佳參數(shù):",grid_search.best_params_)best_model=grid_search.best_estimator_#打印訓(xùn)練集和測(cè)試集的模型評(píng)估指標(biāo)train_predictions=best_model.predict(X_train)test_predictions=best_model.predict(X_test)train_rmse=np.sqrt(mean_squared_error(y_train,train_predictions))test_rmse=np.sqrt(mean_squared_error(y_test,test_predictions))3.3.1回歸算法——2.嶺回歸實(shí)驗(yàn)3:對(duì)加利福尼亞房?jī)r(jià)數(shù)據(jù)集進(jìn)行嶺回歸分析下面是嶺回歸分析的具體代碼:#計(jì)算決定系數(shù)R2。R2是一種用于評(píng)估回歸模型擬合優(yōu)度的指標(biāo),它表示模型能夠解釋數(shù)據(jù)方差的比例,通常用于比較不同模型的表現(xiàn)。R2的取值范圍為[0,1],當(dāng)R2為1時(shí),表示模型完美預(yù)測(cè)了數(shù)據(jù);當(dāng)R2為0時(shí),表示模型無(wú)法解釋數(shù)據(jù)方差。在實(shí)際應(yīng)用中,R2通常用于比較不同模型的表現(xiàn),取值越接近1,表示模型解釋的數(shù)據(jù)方差越多,表現(xiàn)越好。需要分別針對(duì)訓(xùn)練集和測(cè)試集計(jì)算R2,得到train_r2和test_r2train_r2=r2_score(y_train,train_predictions)test_r2=r2_score(y_test,test_predictions)print(f"訓(xùn)練集RMSE:{train_rmse:.4f},R2:{train_r2:.4f}")print(f"測(cè)試集RMSE:{test_rmse:.4f},R2:{test_r2:.4f}")3.3.1回歸算法——2.嶺回歸實(shí)驗(yàn)3:對(duì)加利福尼亞房?jī)r(jià)數(shù)據(jù)集進(jìn)行嶺回歸分析下面是嶺回歸分析的具體代碼:#繪制模型的訓(xùn)練曲線cv_results=grid_search.cv_results_mean_train_score=cv_results['mean_train_score']mean_test_score=cv_results['mean_test_score']plt.figure(figsize=(10,6))plt.plot(mean_train_score,label='訓(xùn)練得分')plt.plot(mean_test_score,label='測(cè)試得分')plt.title('模型性能曲線')plt.xlabel('參數(shù)組合編號(hào)')plt.ylabel('得分')plt.legend()plt.show()#顯示圖形,如圖3-4所示#可視化真實(shí)值與預(yù)測(cè)值的關(guān)系plt.figure(figsize=(10,6))plt.scatter(y_test,test_predictions)plt.xlabel('真實(shí)值')plt.ylabel('預(yù)測(cè)值')plt.title('真實(shí)值vs預(yù)測(cè)值')plt.plot([y.min(),y.max()],[y.min(),y.max()],'k--',lw=4)plt.show()#顯示圖形,如下頁(yè)圖所示3.3.1回歸算法——2.嶺回歸實(shí)驗(yàn)3:對(duì)加利福尼亞房?jī)r(jià)數(shù)據(jù)集進(jìn)行嶺回歸分析模型性能曲線3.3.1回歸算法——2.嶺回歸實(shí)驗(yàn)3:對(duì)加利福尼亞房?jī)r(jià)數(shù)據(jù)集進(jìn)行嶺回歸分析真實(shí)值與預(yù)測(cè)值的關(guān)系3.3.1回歸算法——3.套索回歸模型原理嶺回歸在不拋棄任何一個(gè)變量的情況下,縮小了回歸系數(shù),使得模型相對(duì)而言比較穩(wěn)定,但這會(huì)使得模型的變量特別多,模型解釋性差。有沒(méi)有折中一點(diǎn)的辦法呢?也就是說(shuō),是否可以做到既可以防止過(guò)擬合、同時(shí)又可以克服回歸模型變量多的缺點(diǎn)呢?套索回歸(LassoRegression)就可以做到。3.3.1回歸算法——3.套索回歸sklearn實(shí)現(xiàn)sklearn提供了sklearn.linear_model.Lasso類來(lái)實(shí)現(xiàn)套索回歸,其定義如下:Lasso(alpha=1.0,fit_intercept=True,normalize=False,precompute=False,copy_X=True,max_iter=1000,tol=0.0001,warm_start=False,positive=False,random_state=None,selection='cyclic')3.3.1回歸算法——3.套索回歸sklearn實(shí)現(xiàn)Lasso類的常用參數(shù)如表所示,并且也提供了fit、predict和score方法。參數(shù)名稱含義alpha正則化系數(shù),默認(rèn)為1.0fit_intercept是否計(jì)算該模型的截距,默認(rèn)為Truenormalize默認(rèn)為False。當(dāng)fit_intercept設(shè)置為False的時(shí)候,這個(gè)參數(shù)會(huì)被自動(dòng)忽略。如果為True,模型會(huì)標(biāo)準(zhǔn)化輸入?yún)?shù)precompute是否使用事先計(jì)算好的Gram矩陣來(lái)加速模型計(jì)算。如果precompute='auto',讓程序自動(dòng)決定。Gram矩陣可以作為參數(shù)被傳遞。對(duì)于稀疏數(shù)據(jù),通常令precompute=True,保留稀疏性copy_X可選參數(shù),默認(rèn)值為True;如果為True,x將被復(fù)制;否則被重寫max_iter最大的迭代次數(shù),默認(rèn)為Nonetol解的精度,默認(rèn)為0.001warm_start如果warm_start=True,使用上次的解作為初始化;如果warm_start=False,清除之前的解positive默認(rèn)為False。如果positive=True,則強(qiáng)制將系數(shù)設(shè)為正數(shù)random_state偽隨機(jī)數(shù)發(fā)生器種子,隨機(jī)選擇特征來(lái)更新模型。如果為int,random_state即為隨機(jī)數(shù)發(fā)生器使用的種子;如果為RandomState實(shí)例,random_state即為隨機(jī)數(shù)發(fā)生器;如果為None,隨機(jī)數(shù)發(fā)生器為np.random使用的隨機(jī)數(shù)發(fā)生器實(shí)例selection如果為'random',每次迭代都會(huì)更新隨機(jī)系數(shù),而不是按順序遍歷每個(gè)特征。該參數(shù)值可以使得算法更快收斂Lasso類的常用參數(shù)3.3.1回歸算法——3.套索回歸sklearn實(shí)現(xiàn)下面是套索回歸的具體應(yīng)用實(shí)例:fromsklearn.linear_modelimportLassoimportnumpyasnp#生成數(shù)據(jù)x=np.array([list(range(100)),[i*4+3foriinrange(100)]]).transpose()y=x.dot([2,3])#套索回歸模型訓(xùn)練alpha=0.3#設(shè)置正則化系數(shù)lasso=Lasso(alpha=alpha,fit_intercept=True,tol=1e-4,max_iter=1000)lasso.fit(x,y)#用數(shù)據(jù)訓(xùn)練模型sim_y=lasso.predict(x)#預(yù)測(cè)#=================打印結(jié)果=======================print('權(quán)重:'+str(lasso.coef_))print('截距:'+str(ercept_))print('均方誤差:'+str(((y-sim_y)*(y-sim_y)).sum()))print('損失函數(shù)loss 值:'+str(((y-sim_y)*(y-sim_y)).sum()/(2*x.shape[0])+alpha*(abs(lasso.coef_.sum()))))print('迭代次數(shù):'+str(lasso.n_iter_))print('對(duì)偶間隙:'+str(lasso.dual_gap_))3.3.1回歸算法——4.彈性網(wǎng)絡(luò)回歸模型原理使用這種方式所得到的模型就像純粹的套索回歸一樣稀疏,但同時(shí)具有與嶺回歸一樣的正則化能力。彈性網(wǎng)絡(luò)回歸在很多特征互相聯(lián)系的情況下是非常有用的。3.3.1回歸算法——4.彈性網(wǎng)絡(luò)回歸sklearn實(shí)現(xiàn)sklearn提供了sklearn.linear_model.ElasticNet類來(lái)實(shí)現(xiàn)彈性網(wǎng)絡(luò)回歸,其定義如下:ElasticNet(alpha=1.0,*,l1_ratio=0.5,fit_intercept=True,normalize=False,precompute=False,max_iter=1000,copy_X=True,tol=0.0001,warm_start=False,positive=False,random_state=None,selection='cyclic')3.3.1回歸算法——4.彈性網(wǎng)絡(luò)回歸sklearn實(shí)現(xiàn)ElasticNet類的常用參數(shù)和屬性如表所示,并且也提供了fit、predict和score方法。參數(shù)名稱含義alpha正則化系數(shù),默認(rèn)為1.0l1_ratioElasticNet混合參數(shù),當(dāng)l1_ratio=0時(shí),是L2正則化。當(dāng)l1_ratio=1時(shí),是L1正則化。當(dāng)0<l1_ratio<1時(shí),是L1和L2的組合fit_intercept是否計(jì)算該模型的截距,默認(rèn)為Truenormalize默認(rèn)為False。當(dāng)fit_intercept設(shè)置為False的時(shí)候,這個(gè)參數(shù)會(huì)被自動(dòng)忽略。如果為True,模型會(huì)標(biāo)準(zhǔn)化輸入?yún)?shù)precompute是否使用事先計(jì)算好的Gram矩陣來(lái)加速模型計(jì)算。如果precompute='auto',讓程序自動(dòng)決定。Gram矩陣可以作為參數(shù)被傳遞。對(duì)于稀疏數(shù)據(jù),通常令precompute=True,保留稀疏性max_iter最大的迭代次數(shù),默認(rèn)為Nonecopy_X可選參數(shù),默認(rèn)值為True;如果為True,x將被復(fù)制;否則被重寫tol解的精度,默認(rèn)為0.001warm_start如果warm_start=True,使用上次的解作為初始化;如果warm_start=False,清除之前的解positive默認(rèn)為False。如果positive=True,則強(qiáng)制將系數(shù)設(shè)為正數(shù)random_state偽隨機(jī)數(shù)發(fā)生器種子,隨機(jī)選擇特征來(lái)更新模型。如果為int,random_state即為隨機(jī)數(shù)發(fā)生器使用的種子;如果為RandomState實(shí)例,random_state即為隨機(jī)數(shù)發(fā)生器;如果為None,隨機(jī)數(shù)發(fā)生器為np.random使用的隨機(jī)數(shù)發(fā)生器實(shí)例selection如果為'random',每次迭代都會(huì)更新隨機(jī)系數(shù),而不是按順序遍歷每個(gè)特征。該參數(shù)值可以使得算法更快收斂ElasticNet類的常用參數(shù)3.3.1回歸算法——4.彈性網(wǎng)絡(luò)回歸sklearn實(shí)現(xiàn)ElasticNet類的常用參數(shù)和屬性如表所示,并且也提供了fit、predict和score方法。ElasticNet類的常用屬性方法功能coef_參數(shù)向量sparse_coef_擬合系數(shù)的稀疏表示intercept_決策函數(shù)中的獨(dú)立項(xiàng)n_iter_坐標(biāo)下降求解器為達(dá)到指定容差而運(yùn)行的迭代次數(shù)3.3.1回歸算法——4.彈性網(wǎng)絡(luò)回歸實(shí)驗(yàn)5:使用彈性網(wǎng)絡(luò)回歸分析數(shù)據(jù)下面是彈性網(wǎng)絡(luò)回歸的一個(gè)具體應(yīng)用實(shí)例,在這個(gè)實(shí)例中,我們對(duì)套索回歸和彈性網(wǎng)絡(luò)回歸進(jìn)行了性能比較,具體代碼如下:importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.metricsimportr2_score#產(chǎn)生一些稀疏數(shù)據(jù)np.random.seed(42)n_samples,n_features=50,200X=np.random.randn(n_samples,n_features)#randn()產(chǎn)生的是正態(tài)分布的數(shù)據(jù)coef=3*np.random.randn(n_features)#每個(gè)特征對(duì)應(yīng)一個(gè)系數(shù)inds=np.arange(n_features)np.random.shuffle(inds)coef[inds[10:]]=0#稀疏化系數(shù),隨機(jī)地把系數(shù)向量(1x200)的其中190個(gè)值變?yōu)?y=np.dot(X,coef)#線性運(yùn)算,y=X*w#添加標(biāo)準(zhǔn)差為0.01的高斯噪聲y+=0.01*np.random.normal(size=n_samples)3.3.1回歸算法——4.彈性網(wǎng)絡(luò)回歸實(shí)驗(yàn)5:使用彈性網(wǎng)絡(luò)回歸分析數(shù)據(jù)#把數(shù)據(jù)劃分成訓(xùn)練集和測(cè)試集n_samples=X.shape[0]X_train,y_train=X[:n_samples//2],y[:n_samples//2]X_test,y_test=X[n_samples//2:],y[n_samples//2:]#訓(xùn)練套索回歸模型fromsklearn.linear_modelimportLassoalpha=0.1lasso=Lasso(alpha=alpha)y_pred_lasso=lasso.fit(X_train,y_train).predict(X_test)r2_score_lasso=r2_score(y_test,y_pred_lasso)print(lasso)print("R2ontestdata:%f"%r2_score_lasso)#訓(xùn)練彈性網(wǎng)絡(luò)回歸模型fromsklearn.linear_modelimportElasticNetenet=ElasticNet(alpha=alpha,l1_ratio=0.7)y_pred_enet=enet.fit(X_train,y_train).predict(X_test)r2_score_enet=r2_score(y_test,y_pred_enet)print(enet)print("R2ontestdata:%f"%r2_score_enet)3.3.1回歸算法——4.彈性網(wǎng)絡(luò)回歸實(shí)驗(yàn)5:使用彈性網(wǎng)絡(luò)回歸分析數(shù)據(jù)plt.plot(enet.coef_,color='lightgreen',linewidth=2,label='ElasticNetcoefficients')plt.plot(lasso.coef_,color='gold',linewidth=2,label='Lassocoefficients')plt.plot(coef,'--',color='navy',label='Originalcoefficients')plt.legend(loc='best')plt.title("LassoR2:%f,ElasticNetR2:%f"%(r2_score_lasso,r2_score_enet))plt.xlabel('feature')plt.ylabel('coefficient')plt.show()#顯示圖形,如圖所示系數(shù)曲線3.3.1回歸算法——4.彈性網(wǎng)絡(luò)回歸實(shí)驗(yàn)5:使用彈性網(wǎng)絡(luò)回歸分析數(shù)據(jù)下面我們?cè)購(gòu)木礁`差(rootmeansquareerror,縮寫為RMSE)的角度來(lái)比較嶺回歸、套索回歸和彈性網(wǎng)絡(luò)回歸的性能。importpandasaspdimportnumpyasnpfromsklearn.datasetsimportload_irisfromsklearnimportlinear_modeliris=load_iris()#導(dǎo)入鳶尾花數(shù)據(jù)集X=iris.data#特征矩陣y=iris.target#目標(biāo)向量fromsklearn.model_selectionimporttrain_test_split#導(dǎo)入數(shù)據(jù)劃分包#以20%的數(shù)據(jù)構(gòu)建測(cè)試樣本,剩余作為訓(xùn)練樣本X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.20,random_state=42)enet=linear_model.ElasticNet(alpha=0.1,l1_ratio=0.5)3.3.1回歸算法——4.彈性網(wǎng)絡(luò)回歸實(shí)驗(yàn)5:使用彈性網(wǎng)絡(luò)回歸分析數(shù)據(jù)enet.fit(X_train,y_train)#使用訓(xùn)練數(shù)據(jù)訓(xùn)練模型y_pred_enet=enet.predict(X_test)#對(duì)測(cè)試集的預(yù)測(cè)print("RMSEofenet:",np.sqrt(metrics.mean_squared_error(y_test,y_pred_enet)))#打印結(jié)果為RMSEofenet:0.25057612001892754ridge=linear_model.Ridge(alpha=0.1)ridge.fit(X_train,y_train)#使用訓(xùn)練數(shù)據(jù)訓(xùn)練模型y_pred_ridge=ridge.predict(X_test)#對(duì)測(cè)試集的預(yù)測(cè)fromsklearnimportmetrics#導(dǎo)入metrics評(píng)價(jià)模塊print("RMSEofridge:",np.sqrt(metrics.mean_squared_error(y_test,y_pred_ridge)))#打印結(jié)果為RMSEofridge:0.193213757422206lasso=linear_model.Lasso(alpha=0.1)lasso.fit(X_train,y_train)#使用訓(xùn)練數(shù)據(jù)訓(xùn)練模型y_pred_lasso=lasso.predict(X_test)#對(duì)測(cè)試集的預(yù)測(cè)print("RMSEoflasso:",np.sqrt(metrics.mean_squared_error(y_test,y_pred_lasso)))#打印結(jié)果為RMSEoflasso:0.258405589595852643.3.1回歸算法——4.彈性網(wǎng)絡(luò)回歸實(shí)驗(yàn)5:使用彈性網(wǎng)絡(luò)回歸分析數(shù)據(jù)但是我們可以調(diào)整彈性網(wǎng)絡(luò)回歸的l1_ratio值,來(lái)改進(jìn)模型的預(yù)測(cè)效果,具體代碼如下:enet2=linear_model.ElasticNet(alpha=0.1,l1_ratio=0.4)#設(shè)置l1_ratio值為0.4enet2.fit(X_train,y_train)#使用訓(xùn)練數(shù)據(jù)訓(xùn)練模型y_pred_enet2=enet2.predict(X_test)#對(duì)測(cè)試集的預(yù)測(cè)print("RMSEofenet2:",np.sqrt(metrics.mean_squared_error(y_test,y_pred_enet2)))#打印結(jié)果為RMSEofenet2:0.240409536832193463.3.2分類算法分類算法邏輯回歸01樸素貝葉斯04決策樹02隨機(jī)森林033.3.2分類算法——1.邏輯回歸模型原理定義邏輯回歸(LogisticRegression)雖然名字叫回歸,但是更多用于分類問(wèn)題。既然邏輯回歸用于解決分類問(wèn)題,邏輯回歸為什么不叫做“邏輯分類”呢?主要是因?yàn)檫壿嫽貧w應(yīng)用了回歸的思想去解決分類問(wèn)題。二分類算法邏輯回歸是一種二分類算法,一般用來(lái)解決二分類問(wèn)題,但是,它也可以用來(lái)解決多分類問(wèn)題。當(dāng)使用它來(lái)解決多分類問(wèn)題的時(shí)候,由于邏輯回歸的特點(diǎn),我們一般將多分類問(wèn)題轉(zhuǎn)化為二分類問(wèn)題。原理邏輯回歸的原理是用邏輯函數(shù)(即sigmoid函數(shù))把線性回歸的結(jié)果從(-∞,∞)映射到(0,1)。邏輯回歸是通過(guò)判斷數(shù)據(jù)屬于某一類的概率值大小來(lái)決定要將該數(shù)據(jù)判為哪一類。這里需要引入sigmoid函數(shù)sigmoid(x)=1/(1+e-x),而sigmoid函數(shù)有一個(gè)很特殊的性質(zhì),那就是它可以將任意的輸入值都轉(zhuǎn)為(0,1)上的輸出。邏輯回歸通過(guò)sigmoid函數(shù)來(lái)逼近后驗(yàn)概率p(y=1|x),一般地,會(huì)將sigmoid函數(shù)輸出值大于0.5的判為正例(即1),將輸出值小于0.5的判為反例(即0)。3.3.2分類算法——1.邏輯回歸模型原理邏輯回歸的優(yōu)點(diǎn)是:計(jì)算代價(jià)不高,容易理解實(shí)現(xiàn)適合用于分類場(chǎng)景不僅預(yù)測(cè)出類別,還可以得到近似概率預(yù)測(cè)不用事先假設(shè)數(shù)據(jù)分布,這樣避免了假設(shè)分布不準(zhǔn)確所帶來(lái)的問(wèn)題目標(biāo)函數(shù)任意階可導(dǎo)3.3.2分類算法——1.邏輯回歸模型原理邏輯回歸的缺點(diǎn)是:容易欠擬合,分類精度不高數(shù)據(jù)特征有缺失或者特征空間很大時(shí),表現(xiàn)效果并不好01023.3.2分類算法——1.邏輯回歸sklearn實(shí)現(xiàn)sklearn提供了sklearn.linear_model.LogisticRegression類來(lái)實(shí)現(xiàn)邏輯回歸,其定義如下:LogisticRegression(penalty='l2',dual=False,tol=0.0001,C=1.0,fit_intercept=True,intercept_scaling=1,class_weight=None,random_state=None,solver='lbfgs',max_iter=100,multi_class='auto',verbose=0,warm_start=False,n_jobs=None,l1_ratio=None)3.3.2分類算法——1.邏輯回歸sklearn實(shí)現(xiàn)LogisticRegression類的常用參數(shù)如表所示,并且也提供了fit、predict和score方法。參數(shù)名稱含義penalty采用L1或L2正則化,str類型,可選參數(shù)為'l1'和'l2',默認(rèn)為'l2',表示采用L2正則化dual對(duì)偶或原始方法,bool類型,默認(rèn)為False。當(dāng)樣本數(shù)量>樣本特征的時(shí)候,dual通常設(shè)置為Falsetol求解精度C正則化系數(shù)的倒數(shù),float類型,默認(rèn)為1.0。必須是正浮點(diǎn)型數(shù),越小的數(shù)值表示越強(qiáng)的正則化fit_intercept是否存在截距或偏差,bool類型,默認(rèn)為Trueintercept_scaling僅在正則化項(xiàng)為'liblinear',且fit_intercept設(shè)置為True時(shí)有用。float類型,默認(rèn)為1class_weight用于標(biāo)示分類模型中各種類型的權(quán)重random_state隨機(jī)數(shù)種子,int類型,可選參數(shù),默認(rèn)為無(wú),僅在正則化優(yōu)化算法為sag和liblinear時(shí)有用solver優(yōu)化算法選擇參數(shù),只有五個(gè)可選參數(shù),即newton-cg、lbfgs、liblinear、sag和saga。默認(rèn)為liblinearmax_iter算法收斂最大迭代次數(shù),int類型,默認(rèn)為10multi_class分類方式選擇參數(shù),str類型,可選參數(shù)為ovr和multinomial,默認(rèn)為ovrverbose日志冗長(zhǎng)度,int類型。默認(rèn)為0,就是不輸出訓(xùn)練過(guò)程。當(dāng)取值為1的時(shí)候,偶爾輸出結(jié)果。當(dāng)取值大于1時(shí),對(duì)于每個(gè)子模型都輸出結(jié)果warm_start熱啟動(dòng)參數(shù),bool類型。默認(rèn)為Falsen_jobs并行數(shù)。int類型,默認(rèn)為1。取值為1的時(shí)候,用CPU的一個(gè)內(nèi)核運(yùn)行程序。取值為2的時(shí)候,用CPU的2個(gè)內(nèi)核運(yùn)行程序。取值為-1的時(shí)候,用所有CPU的內(nèi)核運(yùn)行程序l1_ratio可選參數(shù),默認(rèn)值是None。當(dāng)l1_ratio=0時(shí),是L2正則化。當(dāng)l1_ratio=1時(shí),是L1正則化。當(dāng)0<l1_ratio<1時(shí),是L1和L2的組合LogisticRegression類的常用參數(shù)3.3.2分類算法——1.邏輯回歸實(shí)驗(yàn)6:使用邏輯回歸模型進(jìn)行預(yù)測(cè)下面是使用邏輯回歸模型進(jìn)行預(yù)測(cè)的一個(gè)簡(jiǎn)單實(shí)例:fromsklearn.linear_modelimportLogisticRegressionfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score#創(chuàng)建數(shù)據(jù)集X=[[2.7810836,2.550537003],[1.465489372,2.362125076],[3.396561688,4.400293529],[1.38807019,1.850220317],[3.06407232,3.005305973],[7.627531214,2.759262235],[5.332441248,2.088626775],[6.922596716,1.77106367],[8.675418651,-0.242068655],[7.673756466,3.508563011]]y=[0,0,0,0,0,1,1,1,1,1]3.3.2分類算法——1.邏輯回歸實(shí)驗(yàn)6:使用邏輯回歸模型進(jìn)行預(yù)測(cè)下面是使用邏輯回歸模型進(jìn)行預(yù)測(cè)的一個(gè)簡(jiǎn)單實(shí)例:#劃分訓(xùn)練集和測(cè)試集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)model=LogisticRegression()#創(chuàng)建邏輯回歸模型model.fit(X_train,y_train)#在訓(xùn)練集上訓(xùn)練模型y_pred=model.predict(X_test)#在測(cè)試集上進(jìn)行預(yù)測(cè)accuracy=accuracy_score(y_test,y_pred)#計(jì)算準(zhǔn)確率print("準(zhǔn)確率:",accuracy)3.3.2分類算法——1.邏輯回歸實(shí)驗(yàn)6:使用邏輯回歸模型進(jìn)行預(yù)測(cè)下面使用邏輯回歸模型對(duì)sklearn自帶的乳腺癌數(shù)據(jù)集進(jìn)行分析,具體代碼如下:fromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegressioncancer=datasets.load_breast_cancer()#加載sklearn中的乳腺癌數(shù)據(jù)集cancer_X=cancer.data#cancer_X為衡量是否為乳腺癌的各項(xiàng)指標(biāo)數(shù)據(jù)cancer_y=cancer.target#cancer_y為標(biāo)簽數(shù)據(jù)#把數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集X_train,X_test,y_train,y_test=train_test_split(cancer_X,cancer_y,test_size=0.3)clf=LogisticRegression(max_iter=3000)#構(gòu)建邏輯回歸模型clf.fit(X_train,y_train)#使用訓(xùn)練集訓(xùn)練模型clf_y_predict=clf.predict(X_test)#對(duì)測(cè)試集進(jìn)行預(yù)測(cè)score=clf.score(X_test,y_test)#模型的準(zhǔn)確率print(score)#打印結(jié)果為0.94152046783625733.3.2分類算法——2.決策樹模型原理決策樹學(xué)習(xí)通常包括3個(gè)步驟:特征選擇特征選擇的目的在于選取對(duì)訓(xùn)練數(shù)據(jù)具有分類能力的特征,這樣可以提高決策樹學(xué)習(xí)的效率。通常特征選擇的準(zhǔn)則是信息增益(或信息增益比、基尼指數(shù)等),每次計(jì)算每個(gè)特征的信息增益,并比較它們的大小,選擇信息增益最大(信息增益比最大、基尼指數(shù)最?。┑奶卣鳌?1決策樹的生成從根節(jié)點(diǎn)開始,對(duì)節(jié)點(diǎn)計(jì)算所有可能的特征的信息增益,選擇信息增益最大的特征作為節(jié)點(diǎn)的特征,由該特征的不同取值建立子節(jié)點(diǎn),再對(duì)子節(jié)點(diǎn)遞歸地調(diào)用以上方法,構(gòu)建決策樹;直到所有特征的信息增均很小或沒(méi)有特征可以選擇為止,最后得到一棵決策樹。決策樹的剪枝決策樹生成算法遞歸地產(chǎn)生決策樹,直到不能繼續(xù)下去為止。這樣產(chǎn)生的樹往往對(duì)訓(xùn)練數(shù)據(jù)的分類很準(zhǔn)確,但對(duì)未知的測(cè)試數(shù)據(jù)的分類卻沒(méi)有那么準(zhǔn)確,即出現(xiàn)過(guò)擬合現(xiàn)象。解決這個(gè)問(wèn)題的辦法是考慮決策樹的復(fù)雜度,對(duì)已生成的決策樹進(jìn)行簡(jiǎn)化,這個(gè)過(guò)程稱為剪枝。02033.3.2分類算法——2.決策樹skearn實(shí)現(xiàn)sklearn提供了sklearn.tree.DecisionTreeClassifier類來(lái)實(shí)現(xiàn)決策樹,其定義如下:DecisionTreeClassifier(criterion='gini',splitter='best',max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features=None,random_state=None,max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None,class_weight=None,presort=False)3.3.2分類算法——2.決策樹skearn實(shí)現(xiàn)DecisionTreeClassifier類的常用參數(shù)如表所示,并且也提供了fit、predict和score方法。參數(shù)名稱含義criterion特征選擇標(biāo)準(zhǔn),可選參數(shù),默認(rèn)是'gini'splitter特征劃分點(diǎn)選擇標(biāo)準(zhǔn),可選參數(shù),默認(rèn)是'best',可以設(shè)置為'random'max_depth決策樹最大深度,可選參數(shù),默認(rèn)是Nonemin_samples_split內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù),可選參數(shù),默認(rèn)是2min_samples_leaf葉節(jié)點(diǎn)所需的最小樣本數(shù),默認(rèn)值是1min_weight_fraction_leaf葉子節(jié)點(diǎn)最小的樣本權(quán)重和,可選參數(shù),默認(rèn)是0max_features劃分時(shí)考慮的最大特征數(shù),可選參數(shù),默認(rèn)是Nonerandom_state偽隨機(jī)數(shù)發(fā)生器種子,隨機(jī)選擇特征來(lái)更新模型。如果為int,random_state即為隨機(jī)數(shù)發(fā)生器使用的種子;如果為RandomState實(shí)例,random_state即為隨機(jī)數(shù)發(fā)生器;如果為None,隨機(jī)數(shù)發(fā)生器為np.random使用的隨機(jī)數(shù)發(fā)生器實(shí)例max_leaf_nodes最大葉子節(jié)點(diǎn)數(shù),可選參數(shù),默認(rèn)是Nonemin_impurity_decrease如果分裂指標(biāo)的減少量大于該值,則進(jìn)行分裂,默認(rèn)是0.0min_impurity_split節(jié)點(diǎn)劃分最小不純度,可選參數(shù),默認(rèn)是Noneclass_weight類別權(quán)重,可選參數(shù),默認(rèn)是Nonepresort數(shù)據(jù)是否預(yù)排序,可選參數(shù),默認(rèn)為FalseDecisionTreeClassifier類的常用參數(shù)3.3.2分類算法——2.決策樹skearn實(shí)現(xiàn)可以借助于第三方工具Graphviz繪制決策樹。需要在Python環(huán)境和Windows中都安裝Graphviz。首先,需要在Windows的cmd窗口中執(zhí)行如下命令安裝Graphviz:>pipinstallgraphviz然后,訪問(wèn)Graphviz官網(wǎng)(/download/),下載Graphviz安裝包graphviz-10.0.1(64-bit)EXEinstaller,下載后的文件是windows_10_cmake_Release_graphviz-install-10.0.1-win64.exe,運(yùn)行該安裝文件執(zhí)行安裝過(guò)程。在安裝過(guò)程中,會(huì)彈出如下頁(yè)圖所示界面,需要選擇“AddGraphviztothesystemPATHforallusers”,然后按照提示完成后續(xù)安裝過(guò)程3.3.2分類算法——2.決策樹skearn實(shí)現(xiàn)3.3.2分類算法——2.決策樹實(shí)驗(yàn)7:使用決策樹對(duì)紅酒數(shù)據(jù)集進(jìn)行分析下面使用sklearn自帶的紅酒數(shù)據(jù)集進(jìn)行分析,具體代碼如下:fromsklearnimporttreefromsklearn.model_selectionimporttrain_test_splitfromsklearn.datasetsimportload_winewine=load_wine()#紅酒數(shù)據(jù)集#劃分訓(xùn)練集和測(cè)試集X_train,X_test,Y_train,Y_test=train_test_split(wine.data,wine.target,test_size=0.3)dtc=tree.DecisionTreeClassifier(criterion='entropy')#創(chuàng)建模型dtc.fit(X_train,Y_train)#訓(xùn)練模型score=dtc.score(X_test,Y_test)#返回預(yù)測(cè)的準(zhǔn)確度print(score)3.3.2分類算法——2.決策樹skearn實(shí)現(xiàn)importgraphviz#畫出決策樹feature_name=['酒精','蘋果酸','灰','灰的堿性','鎂','總酚','類黃酮','非黃烷類酚類','花青素','顏色強(qiáng)度','色調(diào)','od280/od315稀釋葡萄酒','脯氨酸']dot=tree.export_graphviz(decision_tree=dtc,out_file=None,feature_names=feature_name,class_names=["琴酒","雪莉","貝爾摩德"],filled=True,#填充顏色rounded=True#鈍化角)graph=graphviz.Source(dot.replace('helvetica','MicrosoftYaHei'),encoding='utf-8').render(view=True)#會(huì)出現(xiàn)提示選擇一個(gè)應(yīng)用打開PDF文件,決策樹會(huì)顯示在一個(gè)PDF文件中,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論