數(shù)據(jù)分析與管理決策課程設(shè)計(jì)_第1頁(yè)
數(shù)據(jù)分析與管理決策課程設(shè)計(jì)_第2頁(yè)
數(shù)據(jù)分析與管理決策課程設(shè)計(jì)_第3頁(yè)
數(shù)據(jù)分析與管理決策課程設(shè)計(jì)_第4頁(yè)
數(shù)據(jù)分析與管理決策課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------線---------------------訂

廣東財(cái)經(jīng)大學(xué)答題紙(格式二)課程數(shù)據(jù)分析與管理決策-2021學(xué)年第2學(xué)期成績(jī)?cè)u(píng)閱人評(píng)語(yǔ)意:未參加辯及未交設(shè)報(bào)告視缺考評(píng)優(yōu)良一差評(píng)標(biāo)項(xiàng)秀好般選題有現(xiàn)實(shí)意義,自己獲取數(shù)據(jù)、使用競(jìng)賽數(shù)據(jù)等,規(guī)定的期限內(nèi)獨(dú)立完成(20分)選題有意義,選題有較強(qiáng)的現(xiàn)實(shí)意義,使用公開(kāi)的數(shù)據(jù)源,多種方式獲規(guī)定的期限前獨(dú)立完成)取數(shù)據(jù),按時(shí)選題有一定的現(xiàn)實(shí)意義,使用等帶的數(shù)據(jù),完成(20分規(guī)定的期限前完成(13+分)選題陳舊或無(wú)意義,---------------------裝-----------------------

號(hào)學(xué)名姓級(jí)班

-

用種數(shù)分析方法(算法)(20分分析過(guò)程規(guī)范有可視化表示(20分設(shè)計(jì)報(bào)告撰寫(xiě)規(guī)范(20)陳和辯(20)總成績(jī)

采用實(shí)驗(yàn)或課堂用過(guò)的數(shù)據(jù)(10分以下4以上分析方法(算法)3分析方法(算法)2分析方法(算法)(13+分)1數(shù)據(jù)分析方法(10以下)分析過(guò)程詳細(xì)、完整,可視化詳細(xì)(分分析過(guò)程較完整,有可視化(16+分)分析過(guò)程不夠完整,有簡(jiǎn)單的可視化()分析過(guò)程不完整,可視化非常簡(jiǎn)單(分下)符合格式規(guī)范,圖文并茂;排版美觀分基本符合格式規(guī)范,有圖表,排版較美觀分)基本符合格式規(guī)范,有圖表,排版一般。分報(bào)告撰寫(xiě)不符合格式規(guī)范,排版混亂分下)陳述清楚,邏輯性強(qiáng),能很好地回答問(wèn)題。分陳述較流暢、邏輯性較強(qiáng),能較好地回答問(wèn)題()陳述內(nèi)容尚清楚,基本能答出問(wèn)題()陳述不清楚,不能正確回答基本問(wèn)題(分下)

《數(shù)據(jù)分析與理決策課程設(shè)計(jì)=========================================汽車產(chǎn)分一課設(shè)的務(wù)求選擇你感興趣的社會(huì)經(jīng)濟(jì)問(wèn)題,確定研究問(wèn)題所需要的指標(biāo),搜集各指標(biāo)數(shù)據(jù),說(shuō)明數(shù)據(jù)來(lái)源。利用學(xué)過(guò)的統(tǒng)計(jì)分析、數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)知識(shí)進(jìn)行分類或預(yù)測(cè)分析,并撰寫(xiě)數(shù)據(jù)分析報(bào),自擬報(bào)告的題目。分類模型有:分類樹(shù)樹(shù)、邏輯回歸、隨機(jī)森林KNN、神經(jīng)網(wǎng)絡(luò)、樸素貝葉斯AdaBoosting等。預(yù)分析模型有:線性回分析(統(tǒng)計(jì)方法、機(jī)器學(xué)習(xí)的方法、機(jī)森林等二需提的果提交課程設(shè)計(jì)報(bào)告,報(bào)告要求包括完整的數(shù)據(jù)分析過(guò)程:提出問(wèn)題、獲取數(shù)據(jù)、數(shù)據(jù)預(yù)處理和探索性分析、建模和評(píng)價(jià)模型(可視化型用,包括完整的說(shuō)明和代碼,注意關(guān)鍵變量和模塊等用注釋說(shuō)明。三基要:1.不于3000字,圖文并茂;2.綜多種數(shù)據(jù)分析方法,分析有一定深度。分析過(guò)程完整。3.分工具python4.附錄:原始數(shù)據(jù)、完整代碼

汽車產(chǎn)分一提問(wèn)數(shù)據(jù)準(zhǔn)備,數(shù)據(jù)來(lái)自于汽車數(shù)據(jù)/ml/datasets/Automobile,是阿里天池比賽的數(shù)據(jù)。課程設(shè)計(jì)以汽車競(jìng)品分析為背景,通過(guò)數(shù)據(jù)的處理,為汽車提供分類。對(duì)于指定的車型,可以通過(guò)多種分類算法進(jìn)行分析,并找到其競(jìng)品車型,利用車型數(shù)據(jù),進(jìn)行車型畫(huà)像的分析,為產(chǎn)品定位,競(jìng)品分析提供數(shù)據(jù)決策。1

二獲數(shù)1、讀取數(shù)據(jù),并查看數(shù)據(jù)前五,數(shù)據(jù)文件為car_data.csvdata=pd.read_csv('car_data.csv')data.head()圖2.1汽車數(shù)據(jù)2

三數(shù)預(yù)理探性析()據(jù)處1、查看數(shù)據(jù)維度,汽車數(shù)據(jù)共205行,列數(shù)據(jù)。data.shape(205,27)2、查看數(shù)據(jù)信息27列數(shù)均205,數(shù)據(jù)類型為int、float和object類型,沒(méi)有空值。()3、缺失值檢查行27列非空,沒(méi)有缺失值因此不需要進(jìn)行缺失值處理。data.isnull().sum()4、描述性數(shù)據(jù)統(tǒng)計(jì)data.describe()圖3.1描述性數(shù)據(jù)統(tǒng)計(jì)3

()索數(shù)分、衡量變量相關(guān)性我們一般都是計(jì)算變量?jī)蓛芍g的皮爾遜相關(guān)系數(shù)。了能夠更好展現(xiàn)變量之間的相關(guān)性,下面畫(huà)出變量之間的相關(guān)系數(shù)熱力圖,顏色越深表示相關(guān)系數(shù)越大,說(shuō)明變量間存在著重共線性。一般認(rèn)為相關(guān)系數(shù)大于0.7可以認(rèn)為變量間存在明顯的線性相關(guān)。從熱力圖可以看出來(lái)wheelbase(軸距),carwidth(寬度),carlength(車長(zhǎng)度)和curbweight(重量)之呈現(xiàn)出線性相關(guān),相關(guān)系數(shù)均大于0.7而horsepower馬力)enginesize(引大?。┖蚿rice(格)之間存在線性相關(guān)。圖3.2熱力圖2、刪除同類變量,如果變量之存在較強(qiáng)的線性關(guān)系,能夠相互替代,那么在計(jì)算距離時(shí)同類變量會(huì)重復(fù)“貢獻(xiàn)距中占有較高的權(quán)重,從而影響分類的結(jié)果。因此應(yīng)當(dāng)去除多重共線性。這選擇刪除同類的變量來(lái)去除多重共線性。在第一類中,刪除carwidth,carlength,curbweight保留wheelbase,在第二類中刪除horsepowerenginesize保留price。圖3.3刪除變量4

3、刪除變量后的變量圖,可以出來(lái)變量之間的相關(guān)系數(shù)均小于,可以認(rèn)為變量間不存在嚴(yán)重的多重共線性。圖3.4刪除后的熱力圖4、連續(xù)變量異常值判斷。通過(guò)制直方圖和箱線圖來(lái)判斷數(shù)據(jù)是否存在異常值。從下圖可以看出,變量符號(hào)、軸距、車高度、博雷拉蒂奧、發(fā)動(dòng)機(jī)內(nèi)體積、汽車峰值轉(zhuǎn)速、高速公路里程基本符合正分布,沒(méi)有或者只有少量的異常值,因此不需要進(jìn)行異常值處理。而變量汽車壓縮比和價(jià)格不符合態(tài)分布,存在大量明顯的異常值,因此需要進(jìn)行下一步異常值處理圖符號(hào)

圖3.5.2軸距5

圖車高度

圖博雷拉蒂奧圖發(fā)動(dòng)機(jī)內(nèi)體積

圖汽車壓縮比圖汽車峰值轉(zhuǎn)速

圖3.5.8高速公路里程圖價(jià)格5、異常值處理。對(duì)于價(jià)格,高格可能是因?yàn)槠嚻放菩?yīng)等因素的影響導(dǎo)致的高價(jià)格,應(yīng)當(dāng)當(dāng)作正常值而不是離群點(diǎn)處理,而汽車壓縮比的差異也可以同等處理,因此下面將使用對(duì)數(shù)轉(zhuǎn)換的方法離群點(diǎn)進(jìn)行處理。經(jīng)過(guò)處理后的價(jià)格基本服從正態(tài)分布。從圖可以出來(lái),經(jīng)過(guò)對(duì)數(shù)處理后的汽車縮比仍然存在大量的離群點(diǎn),所以應(yīng)當(dāng)進(jìn)行下一步處理。圖對(duì)數(shù)轉(zhuǎn)換后的價(jià)格

圖對(duì)數(shù)轉(zhuǎn)換后的汽車壓縮比6

6、填充均值的方法處理異常值對(duì)于對(duì)數(shù)處理后的汽車壓縮比變量,仍不服從正態(tài)分布,因此使用均值填充的方法對(duì)其進(jìn)行處理異值替換前的數(shù)據(jù)統(tǒng)計(jì)特征:均值為0.1判異常值的上限臨:10.6。用以替換異常值的數(shù):異常值替換后的數(shù)據(jù)統(tǒng)計(jì)特征:均值為8.97。圖3.7異常值處理、將非數(shù)值字段轉(zhuǎn)化為數(shù)值,采用將簽轉(zhuǎn)換為歸一化的編碼。圖歸一化7

、對(duì)數(shù)據(jù)進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理MinMaxScaler()將個(gè)要素縮放到給定范圍,擬合據(jù),然后對(duì)其進(jìn)行轉(zhuǎn)換。圖3.9數(shù)據(jù)標(biāo)準(zhǔn)化8

四建和價(jià)型可化本次課程設(shè)計(jì)將使用五種分類方法,分別為KNN分AdaBoost分、決策樹(shù)分類和隨機(jī)森林分類。()分模、數(shù)據(jù)分割,劃分?jǐn)?shù)據(jù)集與訓(xùn)練集。使用,利用隨機(jī)種子random_state采樣25%的數(shù)據(jù)作為測(cè)試集。圖4.1數(shù)據(jù)分割2數(shù)標(biāo)準(zhǔn)化處理與建立模型。從sklearn.preprocessing里選擇導(dǎo)入數(shù)據(jù)標(biāo)準(zhǔn)化模塊,對(duì)訓(xùn)練測(cè)試的特征數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。使用網(wǎng)格搜索GridSearchCV方對(duì)模型參數(shù)進(jìn)行調(diào)優(yōu),得出最優(yōu)模型KNeighborsClassifier(n_neighbors=9,p=1,,使用最優(yōu)模型對(duì)數(shù)據(jù)集進(jìn)訓(xùn)練。圖4.2.1數(shù)據(jù)標(biāo)準(zhǔn)化圖4.2.3模型訓(xùn)練圖網(wǎng)格搜索9

3、模型評(píng)估。使用模型自帶的評(píng)估函數(shù)進(jìn)行準(zhǔn)確性測(cè)評(píng),模型準(zhǔn)確率為.94,明分類效果良好。圖KNN模型評(píng)估??梢暬箯较蜃鴺?biāo)可視化方法對(duì)模型進(jìn)行可視化Radviz可化原理是將一系多維空間的點(diǎn)通過(guò)非線性方法映射到二維空間的可視化技術(shù),是基于圓形平行坐標(biāo)系的設(shè)計(jì)思想而提出的維可視化方法。圖KNN模型可視化10

()類類型1

、建立模型,網(wǎng)格搜索調(diào)參。使用網(wǎng)格搜索方法對(duì)模型參數(shù)進(jìn)行調(diào)優(yōu),得出最優(yōu)模為AdaBoostClassifier(base_estimator=DecisionTreeClassifier(criterion='entropy',max_depth=4,splitter='random'),n_estimators=10)并使用最優(yōu)模型對(duì)數(shù)據(jù)集進(jìn)行訓(xùn)練。圖網(wǎng)格搜索圖4.5.2最優(yōu)模型、模型評(píng)估。使用模型自帶的評(píng)估函數(shù)進(jìn)行準(zhǔn)確性測(cè)評(píng),模型準(zhǔn)確率為0.96,明類效果良好。圖4.6輪廓系數(shù)11

使徑向坐標(biāo)可化方法對(duì)模型進(jìn)行可視化Radviz可視化原理是將一系列多維間的點(diǎn)通過(guò)非線性方法映射到二維空間的可視化技術(shù),是基于圓形平行坐標(biāo)系的設(shè)計(jì)思想而提出的多維可視化方。圖4.7可視化()策分模1、數(shù)據(jù)劃分。劃分?jǐn)?shù)據(jù)集與訓(xùn)練集使用上一步分模型的,因此,在此步驟省略。2、建立模型,并對(duì)使用模型進(jìn)行預(yù)測(cè)。使用網(wǎng)格搜索方對(duì)模型參數(shù)進(jìn)行調(diào)優(yōu),得出最優(yōu)模型為DecisionTreeClassifier(criterion='entropy',min_samples_leaf=2),使用最優(yōu)模型對(duì)數(shù)據(jù)集進(jìn)行訓(xùn)練。圖

決策樹(shù)分類模型12

3、模型可視化,使用決策樹(shù)進(jìn)行可視化,并且保存為圖片形式。圖4.10

可視化代碼圖4.9決策樹(shù)可視化、決策樹(shù)分類模型評(píng)估,由圖可知,決策樹(shù)分類模型的準(zhǔn)確率為2,分類效果較好。圖4.10決策樹(shù)模型評(píng)估13

5、分類結(jié)果可視化圖決策樹(shù)分類結(jié)果()機(jī)林類型、數(shù)據(jù)集劃分,直接使用劃分,此步驟省略。2、使用十折交叉驗(yàn)證獲取子樹(shù)最大深度的最優(yōu)取值,當(dāng)子樹(shù)最大深度取值1-5,對(duì)應(yīng)的準(zhǔn)確率分別為0.7,,,0.94和,因此子樹(shù)最大深度取為最優(yōu)。圖4.12最優(yōu)子樹(shù)深度、使用十折交叉驗(yàn)證獲取子樹(shù)個(gè)數(shù)最優(yōu)取值,由圖可知,當(dāng)子樹(shù)個(gè)數(shù)為1時(shí)到最優(yōu)。圖4.13子樹(shù)個(gè)數(shù)最優(yōu)取值14

、建立模型。使用RandomForestClassifier對(duì)型進(jìn)行訓(xùn)練。圖4.14隨機(jī)森林模型、模型評(píng)估,使用模型對(duì)測(cè)試集進(jìn)行預(yù)測(cè),由圖可知,模型準(zhǔn)確率為0,類效果較好。圖4.15模型評(píng)估15

、隨森林可視化循環(huán)打印每棵樹(shù)。圖4.16隨機(jī)森林打印代碼圖4.17隨機(jī)森林、分結(jié)果可視化圖4.18隨機(jī)森林分類可視化16

五模應(yīng)本次課程設(shè)計(jì)的模型應(yīng)用為從數(shù)據(jù)中抽取出10個(gè)本數(shù)據(jù)行預(yù)測(cè)應(yīng)用,由于本次課程設(shè)計(jì)的五個(gè)分類模型應(yīng)用的分析步驟過(guò)程是相似的此在第一個(gè)分類模型應(yīng)用中步驟過(guò)程詳細(xì)寫(xiě)面?zhèn)€分類模型應(yīng)用則只給出結(jié)果。()分模應(yīng)1、隨機(jī)從數(shù)據(jù)集中抽取出個(gè)本數(shù)據(jù),并且數(shù)據(jù)標(biāo)準(zhǔn)化處理,調(diào)用模型進(jìn)行訓(xùn)練得出分類。圖5.1抽取數(shù)據(jù)2、合并分類類結(jié)果到樣本數(shù)據(jù)中,先對(duì)樣本數(shù)據(jù)索引進(jìn)修改,之后將預(yù)測(cè)值插入到樣本數(shù)據(jù)中。圖5.2KNN類結(jié)果3、截取應(yīng)用數(shù)據(jù)。圖5.3分類模型車ID名稱17

()Adaboost類型用1、Adaboost分模型應(yīng)用,截取應(yīng)用數(shù)據(jù)。圖5.4型車ID與名稱()策分模應(yīng)1、決策樹(shù)分類模型應(yīng)用,截取應(yīng)用數(shù)據(jù)。圖5.5

決策樹(shù)模型車ID與名稱18

()機(jī)林類型用1、隨機(jī)森林分類模型應(yīng)用,截取應(yīng)用數(shù)據(jù)。圖

隨機(jī)森林模型車ID與稱19

六五分模應(yīng)結(jié)的較本次課程設(shè)計(jì)使用的是有監(jiān)督學(xué)習(xí)算法,在、、策樹(shù)和隨機(jī)森林中,使用精確率回率和準(zhǔn)確率進(jìn)行模型評(píng)里要對(duì)三者的準(zhǔn)確率進(jìn)行模型評(píng)估圖可以看出Adaboost模型準(zhǔn)確率為,模、隨機(jī)林的準(zhǔn)確率均為0.94,而決策樹(shù)的準(zhǔn)確率為,因此可以認(rèn)為Adaboost模分類效果最好,KNN模與隨機(jī)森林模型次之,決策樹(shù)模型相對(duì)較差。圖6.1準(zhǔn)確率直方圖20

七附(一)變量SymbolingcarCompanyfueltypeaspirationdoornumbercarbodydrivewheelenginelocationwheelbasecarlengthcarwidthcarheightcurbweightenginetypecylindernumberenginesizefuelsystemboreratiostrokecompressionratiohorsepowerpeakrpmcitympghighwaympgprice(Dependentvariable)

符號(hào)汽車公司燃料類型使用意愿門(mén)數(shù)車身驅(qū)動(dòng)發(fā)動(dòng)機(jī)位置軸距車長(zhǎng)車寬車重限制重量發(fā)動(dòng)機(jī)類型缸數(shù)發(fā)動(dòng)機(jī)化燃料系統(tǒng)汽車的博雷拉蒂奧(數(shù)發(fā)動(dòng)機(jī)體積汽車壓縮比(數(shù)字馬力汽車峰值轉(zhuǎn)速城市里程(數(shù)字)高速公路里程價(jià)格(依賴變量)(二)代碼##第:獲取數(shù)據(jù)#導(dǎo)關(guān)的庫(kù)importseabornassnsimportpandasaspdimportmatplotlib.pyplotaspltfromsklearn.clusterimportKMeansfromsklearnimportpreprocessingimportnumpyasnpfromsklearn.preprocessingimportLabelEncoderplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=#數(shù)加載data=pd.read_csv('car_data.csv')#隨rs數(shù)據(jù)集中抽0.05%的數(shù)sample=data.sample(frac=0.05,axis=0)data.head()#查據(jù)維度data.shape21

#查據(jù)信息()#統(tǒng)數(shù)據(jù)描述數(shù)據(jù)data.describe()#缺值檢查data.isnull().sum()matrix=data.corr()f,=plt.subplots(figsize=(8,sns.heatmap(matrix,vmax=.8,square=True,cmap="BuPu",annot=True)data=data.drop('carwidth',axis=1)data=data.drop('carlength',axis=1)data=data.drop('curbweight',axis=1)data=data.drop('horsepower',axis=1)data=data.drop('enginesize',axis=1)data=data.drop('citympg',axis=1)matrix=data.corr()f,=plt.subplots(figsize=(8,sns.heatmap(matrix,vmax=.8,square=True,cmap="BuPu",annot=True)wheelbase,carwidth,carlength,curbweighthorsepowerenginesize()##第:探索性分析#連量特征值分析是有異常值#符據(jù)plt.figure()plt.subplot(121)sns.distplot(data['symboling']);plt.subplot(122)data['symboling'].plot.box(figsize=(16,5))plt.show()plt.figure()plt.subplot(121)sns.distplot(data['wheelbase']);plt.subplot(122)data['wheelbase'].plot.box(figsize=(16,5))plt.show()plt.figure()plt.subplot(121)sns.distplot(data['carheight']);plt.subplot(122)data['carheight'].plot.box(figsize=(16,5))plt.show()plt.figure()plt.subplot(121)sns.distplot(data['boreratio']);plt.subplot(122)data['boreratio'].plot.box(figsize=(16,5))plt.show()plt.figure()plt.subplot(121)sns.distplot(data['stroke']);plt.subplot(122)data['stroke'].plot.box(figsize=(16,5))plt.show()plt.figure()plt.subplot(121)sns.distplot(data['compressionratio']);plt.subplot(122)data['compressionratio'].plot.box(figsize=(16,5))plt.show()plt.figure()plt.subplot(121)sns.distplot(data['peakrpm']);plt.subplot(122)data['peakrpm'].plot.box(figsize=(16,5))plt.show()plt.figure()plt.subplot(121)sns.distplot(data['highwaympg']);22

plt.subplot(122)data['highwaympg'].plot.box(figsize=(16,5))plt.show()plt.figure()plt.subplot(121)sns.distplot(data['price']);plt.subplot(122)data['price'].plot.box(figsize=(16,5))plt.show()##去常值#priceLog異常值處理importseabornassnsdata['compressionratioLog']=np.log(data['compressionratio'])plt.figure()plt.subplot(121)sns.distplot(data['compressionratioLog']);plt.subplot(122)data['compressionratioLog'].plot.box(figsize=(16,5))plt.show()#異箱線圖法Q1=data['compressionratio'].quantile(q=0.25)Q3=data['compressionratio'].quantile(q=0.75)IQR=Q3-Q1print('異常值替換前的據(jù)統(tǒng)計(jì)特征\n',data['compressionratio'].describe())UL=Q3+*IQRprint('判別異常值的上臨界:\n',UL)replace_vaule=data['compressionratio'][data['compressionratio']<UL].max()print('用以替換異常值數(shù):\n',replace_vaule)data['compressionratio'][data['compressionratio']>UL]=replace_vauleprint('異常值替換后的據(jù)統(tǒng)計(jì)特征\n',data['compressionratio'].describe())plt.figure()plt.subplot(121)sns.distplot(data['compressionratio']);plt.subplot(122)data['compressionratio'].plot.box(figsize=(16,5))plt.show()#priceLog異常值處理importseabornassnsdata['priceLog']=np.log(data['price'])plt.figure()plt.subplot(121)sns.distplot(data['priceLog']);plt.subplot(122)data['priceLog'].plot.box(figsize=(16,5))plt.show()data=data.drop('price',axis=1)data_new=data.drop('label',axis=1)#將值字段轉(zhuǎn)化為數(shù)le=LabelEncoder()columns

=['CarName','fueltype','aspiration','doornumber','carbody','drivewheel','enginelocation','enginetype','cylindernumber','fuelsystem']forcolumnincolumns:#LabelEncoder().transform將標(biāo)簽轉(zhuǎn)換為歸化的編碼fit_transform裝標(biāo)簽編碼器并回編碼的標(biāo)簽。data_new[column]=le.fit_transform(data_new[column])#使KMeans進(jìn)行聚,導(dǎo)入庫(kù)fromsklearn.clusterimportKMeans#預(yù)fromsklearnimportpreprocessingfromsklearn.preprocessingimportLabelEncodertrain_x=data[["car_ID","symboling","CarName","fueltype","aspiration","doornumber","carbody","drivewheel","enginelocation","wheelbase","carheight","enginetype","cylindernumber","fuelsystem","boreratio","stroke","compressionratio","peakrpm","highwaympg","priceLog"]]#將值字段轉(zhuǎn)化為數(shù)le=LabelEncoder()columns

=['CarName','fueltype','aspiration','doornumber','carbody','drivewheel','enginelocation','enginetype','cylindernumber','fu23

elsystem']forcolumnincolumns:#LabelEncoder().transform將標(biāo)簽轉(zhuǎn)換為歸化的編碼fit_transform裝標(biāo)簽編碼器并回編碼的標(biāo)簽。train_x[column]=le.fit_transform(train_x[column])#數(shù)標(biāo)準(zhǔn)化min_max_scaler=preprocessing.MinMaxScaler()#MinMaxScaler()每個(gè)要素縮放到給定范圍,合數(shù)據(jù),然后對(duì)其進(jìn)行轉(zhuǎn)換。train_x=min_max_scaler.fit_transform(train_x)pd.DataFrame(train_x).to_csv('temp.csv',index=False)train_x##建:將用聚類分KNN分、決策樹(shù)分類、隨機(jī)森林分類PCA+聚類分析##1、聚類分類#手確定分幾類importmatplotlib.pyplotaspltsse=[]forkinrange(1,11):kmeans=KMeans(n_clusters=k)kmeans.fit(train_x)#計(jì)inertia簇誤平方和sse.append(kmeans.inertia_)x=range(1,11)#將嵌入在結(jié)果中g(shù)et_ipython().run_line_magic('matplotlib','inline')plt.xlabel('K')plt.ylabel('SSE')plt.plot(x,sse,#輪數(shù)判定分幾類fromsklearn.clusterimportKMeansfromsklearn.metricsimportsilhouette_samples,silhouette_scorerange_n_clusters=[2,3,4,5,6]fornum_clustersinrange_n_clusters:kmeans=KMeans(n_clusters=num_clusters,max_iter=50)kmeans.fit(train_x)cluster_labels=kmeans.labels_silhouette_avg=silhouette_score(train_x,cluster_labels)print('Forn_clusters={0},thesilhouettescore{1}'.format(num_clusters,silhouette_avg))#使KMeans聚類,分成3類kmeans=KMeans(n_clusters=3)kmeans_model=kmeans.fit(train_x)#也可以直接fit+predict#predict計(jì)類中心并預(yù)測(cè)每個(gè)樣本的聚類引。predict_y1=kmeans.predict(train_x)predict_y1#模估labels=kmeans_model.labels_#評(píng)聚類結(jié)果的輪廓系數(shù)#輪數(shù)的區(qū)間為[-1,。-1代分類效差1代表分類效果好。0代聚類重疊,有很好的劃分聚類。fromsklearnimportmetricsmetrics.silhouette_score(train_x,labels,metric='cosine')#合聚類結(jié)果,插入到原數(shù)據(jù),axis:需合并鏈接的軸0是,是result1=pd.concat((data_new,pd.DataFrame(predict_y1)),axis=1)#將果列重命名'聚類結(jié)果result1.rename({0:u'聚類結(jié)果},axis=1,inplace=True)result1#聚果可視化importmatplotlib.pyplotaspltfrompandas.plottingimportradvizplt.title('聚類結(jié)')radviz(result1,聚結(jié)果',color=['blue','green','red','yellow'])plt.show()###模用#隨rs數(shù)據(jù)集中抽50%的行數(shù)據(jù)sample=data_new.sample(frac=0.05,axis=0)#數(shù)標(biāo)準(zhǔn)化min_max_scaler=preprocessing.MinMaxScaler()#MinMaxScaler()每個(gè)要素縮放到給定范圍,合數(shù)據(jù),然后對(duì)其進(jìn)行轉(zhuǎn)換。sample1=min_max_scaler.fit_transform(sample)sam_pred1=kmeans.predict(sample1)sam_pred124

#合聚類結(jié)果,插入到原數(shù)據(jù),axis:需合并鏈接的軸0是,是sample.index=[0,1,2,3,4,5,6,7,8,9]sam_result1=pd.concat((sample,pd.DataFrame(sam_pred1)),axis=1)#將果列重命名'聚類結(jié)果sam_result1.rename({0:u'聚結(jié)'},axis=1,inplace=True)sampel_1=sam_result1[['car_ID','聚類結(jié)']]sampel_1##2、KNN類X=data_newy=data['label']#從sklearn.cross_validation里選入train_test_split用于據(jù)分割。fromsklearn.model_selectionimporttrain_test_split#從用train_test_split,用隨機(jī)種子random_state確保結(jié)果能重現(xiàn),采樣25%的數(shù)據(jù)作為測(cè)試集。X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33)#從sklearn.preprocessing里導(dǎo)入數(shù)據(jù)準(zhǔn)化模塊。fromsklearn.preprocessingimportStandardScaler#從sklearn.neighbors里擇導(dǎo)入KNeighborsClassifier,近分類器。fromsklearn.neighborsimportKNeighborsClassifier#對(duì)練和測(cè)試的特征數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。ss=StandardScaler()X_train=ss.fit_transform(X_train)X_test=ss.transform(X_test)x_train=ss.fit_transform(data_new)#使GridSearchCV對(duì)進(jìn)行調(diào)優(yōu)fromsklearn.neighborsimportKNeighborsClassifierfromsklearn.model_selectionimportGridSearchCVknn_clf=KNeighborsClassifier()param_grid=[{'weights':['uniform'],'n_neighbors':[iforiinrange(1,11)]},{'weights':['distance'],'n_neighbors':[iforiinrange(1,11)],'p':[iforiinrange(1,6)]}]grid_search=GridSearchCV(knn_clf,param_grid,n_jobs=-1,verbose=2)grid_search.fit(X_train,y_train)#選優(yōu)訓(xùn)練參數(shù)grid_search.best_estimator_knc2=KNeighborsClassifier(n_neighbors=9,p=1,weights='distance')knc2.fit(X_train,y_train)predict_result2=knc2.predict(X_test)#計(jì)precision、recall、f1-score的fromsklearn.metricsimportclassification_reportprint(classification_report(y_test,predict_result2))predict_y2=knc2.predict(x_train)predict_y2#合KNN類結(jié)果,入到原數(shù)據(jù),axis:需并鏈接的軸0是,1是列result2=pd.concat((data_new,pd.DataFrame(predict_y2)),axis=1)#將果列重命名'KNN分結(jié)果'result2.rename({0:u'KNN分果},axis=1,inplace=True)result2#聚果可視化importmatplotlib.pyplotaspltfrompandas.plottingimportradvizplt.title('KNN分結(jié)')radviz(result2,類結(jié)果,color=['blue','green','red','yellow','black'])plt.show()##KNN型應(yīng)用#隨rs數(shù)據(jù)集中抽50%的行數(shù)據(jù)sample2=data_new.sample(frac=0.05,axis=0)#數(shù)標(biāo)準(zhǔn)化25

min_max_scaler=preprocessing.MinMaxScaler()#MinMaxScaler()每個(gè)要素縮放到給定范圍,合數(shù)據(jù),然后對(duì)其進(jìn)行轉(zhuǎn)換。sample_2=min_max_scaler.fit_transform(sample2)sam_pred2=knc2.predict(sample_2)sam_pred2#合聚類結(jié)果,插入到原數(shù)據(jù),axis:需合并鏈接的軸0是,是sample2.index=[0,1,2,3,4,5,6,7,8,9]sam_result2=pd.concat((sample2,pd.DataFrame(sam_pred2)),axis=1)#將果列重命名'聚類結(jié)果sam_result2.rename({0:u'KNN分類結(jié)果},axis=1,inplace=True)sampel_2=sam_result2[['car_ID','KNN類結(jié)果']]sampel_2##3、決策樹(shù)分類fromsklearn.treeimportDecisionTreeClassifier#dt_model=DecisionTreeClassifier()#所數(shù)均置為默認(rèn)狀態(tài)#dt_model.fit(X_train,y_train)#使訓(xùn)練集訓(xùn)練模型#predict_result3=dt_model.predict(X_test)#使用模型對(duì)測(cè)試集進(jìn)行預(yù)測(cè)#模估#fromsklearn.metricsimportaccuracy_score#print(accuracy_score(predict_result3,y_test))這里是分界線#用GridSearchCV尋找參數(shù)(列表)param={'max_depth':[30,50,60,100],'min_samples_leaf':[2,3,5,10],'min_impurity_decrease':[0.1,0.2,0.5],'criterion':['gini','entropy'],}grid1=GridSearchCV(DecisionTreeClassifier(),param_grid=param,cv=6)grid1.fit(X_train,y_train)grid1.best_estimator_dt_model=DecisionTreeClassifier(criterion='entropy',max_depth=50,min_impurity_decrease=0.1,min_samples_leaf=2)dt_model.fit(X_train,y_train)#使用訓(xùn)練集訓(xùn)練模型predict_result3=dt_model.predict(X_test)#使用模型對(duì)測(cè)試集進(jìn)行預(yù)測(cè)#計(jì)precision、recall、f1-score的fromsklearn.metricsimportclassification_reportprint(classification_report(y_test,predict_result3))#模視化importgraphvizfromsklearnimporttreedot_data=tree.export_graphviz(dt_model,feature_names=["car_ID","symboling","CarName","fueltype","aspiration","doornumber","carbody","drivewheel","enginelocation","wheelbase","carheight","enginetype","cylindernumber","fuelsystem","boreratio","stroke","compressionratio","peakrpm","highwaympg","priceLog"],#特名class_names=['0','1','2','3','4'],#目變量的類別名filled=True,rounded=True,special_characters=True)graph=graphviz.Source(source=dot_data,filename=r'C:\Users\13673\Desktop\cars.gv',format='png',)graph.render(cleanup=True)#保型可視為png圖#應(yīng)predict_y3=dt_model.predict(x_train)predict_y3#合決策樹(shù)分類結(jié)果,插入到原數(shù)據(jù),axis:需要合并鏈接的軸是,1是result3=pd.concat((data_new,pd.DataFrame(predict_y3)),axis=1)#將果列重命名'決策樹(shù)分類結(jié)果'result3.rename({0:u'決策樹(shù)分類結(jié)'},axis=1,inplace=True)result3#聚果可視化importmatplotlib.pyplotaspltfrompandas.plottingimportradvizplt.title('決策樹(shù)分類結(jié)')radviz(result3,決樹(shù)分類結(jié)',color=['blue','green','red','yellow','black'])plt.show()##應(yīng)#隨rs數(shù)據(jù)集中抽50%的行數(shù)據(jù)sample3=data_new.sample(frac=0.05,axis=0)26

#數(shù)標(biāo)準(zhǔn)化min_max_scaler=preprocessing.MinMaxScaler()#MinMaxScaler()每個(gè)要素縮放到給定范圍,合數(shù)據(jù),然后對(duì)其進(jìn)行轉(zhuǎn)換。sample_3=min_max_scaler.fit_transform(sample3)sam_pred3=dt_model.predict(sample_3)sam_pred3#合聚類結(jié)果,插入到原數(shù)據(jù),axis:需合并鏈接的軸0是,是sample3.index=[0,1,2,3,4,5,6,7,8,9]sam_result3=pd.concat((sample3,pd.DataFrame(sam_pred3)),axis=1)#將果列重命名'聚類結(jié)果sam_result3.rename({0:u'決樹(shù)類果'},axis=1,inplace=True)sampel_3=sam_result3[['car_ID','決策樹(shù)分類結(jié)果]]sampel_3##隨機(jī)森林分類#導(dǎo)關(guān)的庫(kù)fromsklearn.model_selectionimportGridSearchCVfromsklearn.treeimportDecisionTreeClassifierfromsklearn.preprocessingimportLabelEncoderfromsklearn.model_selectionimportShuffleSplitfromsklearn.model_selectionimportcross_val_scorefromsklearn.ensembleimportRandomForestClassifierfromsklearn.metricsimportaccuracy_scorefromsklearn.treeimportexport_graphvizimport#使折交叉驗(yàn)證獲取max_depth(樹(shù)的最大深度)的最優(yōu)取值d_scores=[]foriinrange(1,6):model=RandomForestClassifier(n_estimators=10,criterion='entropy',max_depthi,oob_score=True)scores=cross_val_score(model,X_train,y_train,scoring='accuracy')d_scores.append(scores.mean())print('max_depth別,2,3,5時(shí)到的準(zhǔn)確:print(d_scores)print('最優(yōu)值為:',max(d_scores))print('最優(yōu)max_depth值為',d_scores.index(max(d_scores))+1)#使十折交叉驗(yàn)證獲?。ㄗ訕?shù)個(gè)數(shù))的最優(yōu)取值n_scores=[]foriinrange(1,21):model=RandomForestClassifier(n_estimators=criterion='entropy',max_depth=3,oob_score=True)scores=cross_val_score(model,X_train,y_train,scoring='accuracy')n_scores.append(scores.mean())print('n_estimators分取時(shí)得到的準(zhǔn)確:')print(n_scores)print('最優(yōu)值為:',max(n_scores))print('最優(yōu)n_estimators值',n_scores.index(max(n_scores))+1)RF_model=RandomForestClassifier(n_estimators=13,max_depth=5)RF_model.fit(X_train,y_train)#使用訓(xùn)練集訓(xùn)練模型#模驗(yàn)predict_result4=RF_model.predict(X_test)#使模型對(duì)測(cè)試集進(jìn)行預(yù)測(cè)#計(jì)precision、recall、f1-score的fromsklearn.metricsimportclassification_reportprint(classification_report(y_test,predict_result4))predict_y4=RF_model.predict(x_train)predict_y4#合隨機(jī)森林分類結(jié)果,插入到原數(shù)據(jù),axis需要并鏈接的0是,是result4=pd.concat((data_new,pd.DataFrame(predict_y4)),axis=1)#將果列重命名'隨機(jī)森林分類結(jié)'result4.rename({0:u'隨機(jī)森林分類結(jié)},axis=1,inplace=True)result4#聚果可視化importmatplotlib.pyplotaspltfrompandas.plottingimportradvizplt.title('隨機(jī)森林分類結(jié)')radviz(result4,隨森林分類結(jié)',color=['blue','green','red','yellow','black'])plt.show()#循打印每棵樹(shù)data_feat=result4.drop('隨森分結(jié),axis=1)data_label=result4['隨機(jī)森林分類結(jié)]foridx,estimatorenumerate(RF_model.estimators_):#導(dǎo)dot件27

export_graphviz(estimator,out_file='tree{}.dot'.format(idx),#feature_names=data_feat_names,#class_names=data_label_names,rounded=True,proportion=False,precision=2,filled=True)#轉(zhuǎn)為png文件os.system('dot-Tpngtree{}.dot-otree{}.png'.format(idx,idx))##應(yīng)#隨rs數(shù)據(jù)集中抽50%的行數(shù)據(jù)sample4=data_new.sample(frac=0.05,axis=0)#數(shù)標(biāo)準(zhǔn)化min_max_scaler=preprocessing.MinMaxScaler()#MinMaxScaler()每個(gè)要素縮放到給定范圍,合數(shù)據(jù),然后對(duì)其進(jìn)行轉(zhuǎn)換。sample_4=min_max_scaler.fit_transform(sample4)sam_pred4=RF_model.predict(sample_4)sam_pred4#合聚類結(jié)果,插入到原數(shù)據(jù),axis:需合并鏈接的軸0是,是sample4.index=[0,1,2,3,4,5,6,7,8,9]sam_result4=pd.concat((sample4,pd.DataFrame(sam_pred4)),axis=1)#將果列重命名'聚類結(jié)果sam_result4.rename({0:u'隨森分結(jié)},axis=1,inplace=True)sampel_4=sam_result4[['car_ID','隨機(jī)森林分類結(jié)']]sampel_4##5、PCA聚類分類fromsklearn.decompositionimportPCAimportmatplotlib.pyplotaspltpca=PCA(n_components=10)pca=pca.fit(train_x)PCA_X=pca.transform(train_x)pca.explained_variance_ratio_print((pca.explained_variance_ratio_).sum())#手確定分幾類importmatplotlib.pyplotaspltsse=[]forkinrange(1,11):kmeans1=KMeans(n_clusters=k)kmeans1.fit(PCA_X)#計(jì)inertia簇誤平方和sse.append(kmeans1.inertia_)x=range(1,11)#將嵌入在結(jié)果中g(shù)et_ipython().run_line_magic('matplotlib','inline')plt.xlabel('K')plt.ylabel('SSE')plt.plot(x,sse,froms

溫馨提示

  • 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)論