版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1.6習(xí)題答案1.單項(xiàng)選擇題1)B
2)C
3)B
4)D
5)A
6)A
7)B(最低),D(最高)
8)C
9)D
10)C2.應(yīng)用題1)答:特點(diǎn):1簡單易學(xué);2解釋型語言;3面向?qū)ο螅?免費(fèi)和開源;5跨平臺(tái)和可移植性;6豐富的標(biāo)準(zhǔn)庫;7可擴(kuò)展性和可嵌入性;
應(yīng)用領(lǐng)域:1操作系統(tǒng)管理與維護(hù);2科學(xué)計(jì)算與數(shù)據(jù)可視化;3圖形用戶界面開發(fā);4文本處理;5網(wǎng)絡(luò)編程及web開發(fā);6數(shù)據(jù)庫編程;7游戲開發(fā);2)
答:1代碼縮進(jìn):同一個(gè)級(jí)別的代碼塊縮進(jìn)量必須相同;
2適當(dāng)?shù)淖⑨專簡涡凶⑨尶梢圆捎谩?”開頭;多行注釋可以采用一對(duì)三引號(hào)將需注釋內(nèi)容括起來;3清晰的模塊導(dǎo)入:import語句導(dǎo)入一個(gè)模塊,盡量避免一次導(dǎo)入多個(gè)模塊;
4代碼過長折行處理;
5必要的空格和空行;
6常量名中所有字母大寫,由下劃線連接各個(gè)單詞,類名中首字母大寫;
3.編程題1)a=float(input("請(qǐng)輸入第一個(gè)學(xué)生成績:"))b=float(input("請(qǐng)輸入第二個(gè)學(xué)生成績:"))c=float(input("請(qǐng)輸入第三個(gè)學(xué)生成績:"))avg=(a+b+c)/3print("平均分為:",avg)2)ch=input("請(qǐng)輸入一個(gè)字符:")ifch.isdigit():print("數(shù)字")elifch.isalpha():print("字母")else:print("其他字符")3)s=0foriinrange(1,101):if'8'instr(i):s+=iprint("含8的數(shù)之和為:",s)4)計(jì)算1+2!+3!+...+20!的和sum=0
x=1
foriinrange(1,21):
x=x*i
sum=sum+x
print('1+2!+3!+......+20!的和=',sum)2.6習(xí)題答案1.單項(xiàng)選擇題1)A.
2)B.
3)C.
4)C.
5)A.
6)A.
7)C.
8)D.
9)A.2.編程題1)
元組與列表的主要區(qū)別:元組(tuple)是不可變類型,其中的元素不能增刪改;列表(list)是可變類型,其中的元素可以增刪改。判斷是否能向s=(9,7,8,3,2,1,55,6)中添加元素:不能添加,因?yàn)樵M是不可變對(duì)象。2)s=[9,7,8,3,2,1,55,6]print("元素個(gè)數(shù):",len(s))print("最大數(shù):",max(s))print("最小數(shù):",min(s))s.append(10)s.remove(55)print("最終列表:",s)3)b=(1,2,3,4,5,6,7,8,9)print("元素和為:",sum(b))3.8習(xí)題答案1.單項(xiàng)選擇題1)242)1493)404)None5)<class'tuple'>(2,3,4,5)2.簡答題1)答:在Python語言中使用def語句定義函數(shù),具體語法格式如下:def函數(shù)名([參數(shù)列表]):函數(shù)體2)答:lambda語句創(chuàng)建匿名函數(shù),lambda語句中,冒號(hào)前是函數(shù)參數(shù),若有多個(gè)參數(shù)須使用逗號(hào)分隔;冒號(hào)后是返回值。lambda為定義匿名函數(shù)時(shí)的關(guān)鍵字,arguments為傳入函數(shù)的參數(shù),expression為返回值。3)答:遞歸函數(shù)是指在函數(shù)的定義中使用函數(shù)自身的方法。即一個(gè)函數(shù)在內(nèi)部調(diào)用當(dāng)前函數(shù)本身。設(shè)置遞歸終止條件就是為了當(dāng)遞歸調(diào)用滿足這個(gè)終止條件時(shí),遞歸便結(jié)束調(diào)用不再繼續(xù),如果不設(shè)置終止條件,將會(huì)導(dǎo)致無限遞歸函數(shù)調(diào)用,其最終結(jié)果會(huì)系統(tǒng)耗盡內(nèi)存,造成棧溢出。4)答:包是一種使用“.模塊名”來組織Python模塊名稱空間的方式。具體來講就是:包就是一個(gè)包含有__init__.py文件的文件夾。模塊往往對(duì)應(yīng)著Python的腳本文件(.py),包含了所有該模塊定義的函數(shù)、變量和類。模塊是最高級(jí)別的程序組織單元,它能夠?qū)⒊绦虼a和數(shù)據(jù)封裝以便重用。模塊是一個(gè)包含所有你定義的函數(shù)和變量的文件,其后綴名是.py。模塊可以被別的程序引入,使用import語句可以導(dǎo)入模塊,使用該模塊中的函數(shù)等功能。包的導(dǎo)入與模塊的導(dǎo)入相似,使用import語句導(dǎo)入包中模塊時(shí),需要指定對(duì)應(yīng)的包名。包的導(dǎo)入與模塊的導(dǎo)入相似,使用import語句導(dǎo)入包中模塊時(shí),需要指定對(duì)應(yīng)的包名。使用方法:import模塊名from包名import模塊5)答:正則表達(dá)式語言就是用于描述這些規(guī)則的語言,正則表達(dá)式是由普通字符(如字符a到z)及特殊字符(稱為元字符,包括:.^$*+?{}[]\|())組成的文字模式。正則表達(dá)式的模式可以包含普通字符(包括轉(zhuǎn)義字符)、字符類和預(yù)定義的字符類、邊界匹配符、重復(fù)限定符、選擇分支、分組和引用等。3.編程題1)
deffact(n):ifn==0:return1returnn*fact(n-1)n=int(input("請(qǐng)輸入整數(shù)n:"))print(fact(n))2)deffiber(n):ifn<=2:return1returnfiber(n-1)+fiber(n-2)foriinrange(1,21):print(fiber(i),end='')3)defmin_num(a,b,*c):
ifc:
r=min(c)
returnmin(a,b,r)
else:
returnmin(a,b)
print('最小值為:',min_num(8,2))
print('最小值為:',min_num(16,1,7,4,15))4)importre
tel_numb=input("請(qǐng)輸入一個(gè)電話號(hào)碼:")
post_num=input("請(qǐng)輸入一個(gè)郵政編碼:")
net_add=input("請(qǐng)輸入一個(gè)網(wǎng)絡(luò)地址:")
ifre.match(r'^(\(\d{3}\)|\d{3}-)?\d{8}$',tel_numb):
print("您輸入的電話號(hào)碼是:\n",tel_numb)
else:
print("請(qǐng)輸入正確的電話號(hào)碼")
ifre.match(r'^\d{6}$',post_num):
print("您輸入的郵政編碼是:\n",post_num)
else:
print("請(qǐng)輸入正確的郵政編碼")
ifre.match(r'^https?://\w+(?:\.[^\.]+)+(?:/.+)*$',net_add):
print("您輸入的網(wǎng)址是:\n",net_add)
else:
print("請(qǐng)輸入正確網(wǎng)址")4.6習(xí)題答案1.單項(xiàng)選擇題1)D2)D3)B4)B5)A6)D7)C8)B2.編程題1)importnumpyasnparr=np.arange(20).reshape(4,5)print("創(chuàng)建的(4,5)數(shù)組:\n",arr)print("\n=====數(shù)組基本屬性=====")print(f"數(shù)組維度數(shù)(軸的個(gè)數(shù))ndim:{arr.ndim}")#輸出2(二維)print(f"數(shù)組形狀shape:{arr.shape}")#輸出(4,5)print(f"數(shù)組元素總數(shù)size:{arr.size}")#輸出20print(f"數(shù)組數(shù)據(jù)類型dtype:{arr.dtype}")#輸出int64(視環(huán)境)print(f"每個(gè)元素字節(jié)數(shù)itemsize:{arr.itemsize}")#輸出8(int64占8字節(jié))print(f"數(shù)組總字節(jié)數(shù)nbytes:{arr.nbytes}")#輸出160(20*8)print(f"數(shù)組是否為連續(xù)內(nèi)存布局flags.c_contiguous:{arr.flags.c_contiguous}")2)importnumpyasnp#1.創(chuàng)建隨機(jī)數(shù)組(5行3列,取值0~9的整數(shù))np.random.seed(42)#固定隨機(jī)種子,結(jié)果可復(fù)現(xiàn)arr=np.random.randint(0,10,size=(5,3))print("原始隨機(jī)數(shù)組:\n",arr)#2.替換操作:將數(shù)組中大于7的元素替換為0arr_replace=arr.copy()arr_replace[arr_replace>7]=0print("\n替換后(>7→0):\n",arr_replace)#3.排序操作:按每行升序排序(axis=1)arr_sorted=arr.copy()arr_sorted.sort(axis=1)print("\n每行升序排序后:\n",arr_sorted)#4.重塑操作:將5x3數(shù)組重塑為3x5arr_reshape=arr.reshape(3,5)print("\n重塑為3x5數(shù)組:\n",arr_reshape)#5.轉(zhuǎn)置操作:原數(shù)組轉(zhuǎn)置(5x3→3x5)arr_transpose=arr.Tprint("\n原數(shù)組轉(zhuǎn)置后:\n",arr_transpose)#6.合并操作:創(chuàng)建另一個(gè)同結(jié)構(gòu)隨機(jī)數(shù)組,與原數(shù)組合并arr2=np.random.randint(0,10,size=(5,3))arr_hstack=np.hstack((arr,arr2))#水平合并(5x6)arr_vstack=np.vstack((arr,arr2))#垂直合并(10x3)print("\n另一個(gè)隨機(jī)數(shù)組:\n",arr2)print("\n水平合并(hstack)后(5x6):\n",arr_hstack)print("\n垂直合并(vstack)后(10x3):\n",arr_vstack)3)importmatplotlib.pyplotaspltimportnumpyasnp#設(shè)置中文顯示(避免亂碼)plt.rcParams["font.family"]="SimHei"plt.rcParams["axes.unicode_minus"]=False#1.準(zhǔn)備數(shù)據(jù)x=[-3.00,-2.50,-1.75,-1.15,-0.50,0.15,0.75,1.25,1.85,2.45]y=[4,12,50,120,205,255,170,100,20,14]#2.創(chuàng)建畫布并繪制條形圖plt.figure(figsize=(10,6))#設(shè)置畫布大小plt.bar(x,y,width=0.15,color="skyblue",edgecolor="black")#繪制條形圖#3.添加圖表標(biāo)簽和標(biāo)題plt.xlabel("X值",fontsize=12)plt.ylabel("Y值",fontsize=12)plt.title("條形圖示例(表4-6數(shù)據(jù))",fontsize=14)plt.grid(axis="y",linestyle="--",alpha=0.7)#添加水平網(wǎng)格線#4.顯示圖表plt.show()4)importpandasaspd#1.構(gòu)建員工數(shù)據(jù)(對(duì)應(yīng)表4-8)data={"姓名":["張偉","李強(qiáng)","王磊","劉洋","陳婷","楊勇","趙敏","孫娜","周晨","吳靜"],"職位":["經(jīng)理","開發(fā)工程師","開發(fā)工程師","經(jīng)理","開發(fā)工程師","經(jīng)理","開發(fā)工程師","經(jīng)理","開發(fā)工程師","開發(fā)工程師"],"部門":["人力資源","信息技術(shù)","信息技術(shù)","人力資源","信息技術(shù)","人力資源","信息技術(shù)","人力資源","信息技術(shù)","信息技術(shù)"],"工資":[75000,85000,80000,90000,70000,95000,65000,88000,72000,78000],"入職年份":[2015,2017,2018,2016,2019,2014,2020,2013,2021,2017]}df=pd.DataFrame(data)print("員工原始數(shù)據(jù):\n",df)#任務(wù)a:計(jì)算每個(gè)部門的平均工資dept_avg_salary=df.groupby("部門")["工資"].mean()print("\n=====任務(wù)a:各部門平均工資=====")print(dept_avg_salary)#任務(wù)b:找出每個(gè)部門入職最早的員工#步驟:按部門分組,找到入職年份最小的行(保留所有列)dept_earliest_emp=df.loc[df.groupby("部門")["入職年份"].idxmin()]print("\n=====任務(wù)b:各部門入職最早的員工=====")print(dept_earliest_emp[["部門","姓名","入職年份"]])#任務(wù)c:找出每個(gè)部門工資高于平均工資的員工,按工資降序排列#步驟1:將部門平均工資合并到原數(shù)據(jù)df["部門平均工資"]=df["部門"].map(dept_avg_salary)#步驟2:篩選工資>部門平均的員工high_salary_emp=df[df["工資"]>df["部門平均工資"]]#步驟3:按工資降序排列high_salary_emp_sorted=high_salary_emp.sort_values(by="工資",ascending=False)print("\n=====任務(wù)c:各部門工資高于均值的員工(降序)=====")print(high_salary_emp_sorted[["部門","姓名","工資","部門平均工資"]])5.5習(xí)題答案1.填空題1)多領(lǐng)域交叉、概率論、統(tǒng)計(jì)學(xué)、逼近論、凸分析、算法復(fù)雜度理論、模擬、實(shí)現(xiàn)2)樣本、實(shí)例、特征或?qū)傩?)分類、回歸、聚類、降維4)sklearn.classification、sklearn.regression、sklearn.cluster、sklearn.datasets2.簡答題1)答:機(jī)器學(xué)習(xí)核心應(yīng)用領(lǐng)域包括:·計(jì)算機(jī)視覺:人臉識(shí)別、醫(yī)療影像診斷、自動(dòng)駕駛目標(biāo)檢測、工業(yè)質(zhì)檢;·自然語言處理(NLP):機(jī)器翻譯、情感分析、智能客服、文本生成;·推薦系統(tǒng):電商商品推薦、視頻/音樂推薦、廣告精準(zhǔn)投放;·金融領(lǐng)域:信用風(fēng)控、量化交易、反欺詐識(shí)別;·醫(yī)療健康:疾病輔助診斷、藥物研發(fā)、患者預(yù)后分析;·其他:語音識(shí)別、農(nóng)業(yè)病蟲害識(shí)別、教育個(gè)性化推薦。2)答:機(jī)器學(xué)習(xí)核心分類維度及結(jié)果如下:·按學(xué)習(xí)方式(核心維度):監(jiān)督學(xué)習(xí)(含分類、回歸)、無監(jiān)督學(xué)習(xí)(含聚類、降維)、半監(jiān)督學(xué)習(xí)、強(qiáng)化學(xué)習(xí);·按模型類型:生成模型(如樸素貝葉斯)、判別模型(如邏輯回歸);·按算法復(fù)雜度:傳統(tǒng)機(jī)器學(xué)習(xí)(決策樹、SVM)、深度學(xué)習(xí)(神經(jīng)網(wǎng)絡(luò)/Transformer);·按功能:分類、回歸、聚類、降維、推薦、排序等。3)答:各概念定義如下:·數(shù)據(jù)集:用于機(jī)器學(xué)習(xí)任務(wù)的所有數(shù)據(jù)集合,是后續(xù)劃分的基礎(chǔ)(行=樣本,列=特征);·訓(xùn)練集:占比60%~80%,用于模型擬合數(shù)據(jù)規(guī)律、調(diào)整參數(shù),是訓(xùn)練核心數(shù)據(jù);·測試集:占比10%~20%,不參與訓(xùn)練,用于評(píng)估模型泛化能力,避免過擬合;·驗(yàn)證集:占比10%~20%,用于超參數(shù)調(diào)優(yōu)和模型選擇,數(shù)據(jù)量小時(shí)可用k折交叉驗(yàn)證替代。4)答:機(jī)器學(xué)習(xí)核心流程為:①需求與目標(biāo)分析:明確業(yè)務(wù)問題、定義任務(wù)類型(分類/回歸等)、確定評(píng)估指標(biāo);②數(shù)據(jù)收集:從數(shù)據(jù)庫、API、公開數(shù)據(jù)集等渠道獲取原始數(shù)據(jù);③數(shù)據(jù)預(yù)處理:含數(shù)據(jù)清洗(缺失/異常值處理)、特征工程(選擇/轉(zhuǎn)換/構(gòu)造)、格式轉(zhuǎn)換;④數(shù)據(jù)集劃分:分為訓(xùn)練集、驗(yàn)證集、測試集;⑤模型選擇與訓(xùn)練:根據(jù)任務(wù)選擇算法,用訓(xùn)練集訓(xùn)練模型;⑥模型評(píng)估:用驗(yàn)證集/測試集評(píng)估性能,分析過擬合/欠擬合;⑦超參數(shù)調(diào)優(yōu):通過網(wǎng)格搜索等優(yōu)化參數(shù),提升性能;⑧模型部署:將最優(yōu)模型部署到生產(chǎn)環(huán)境;⑨監(jiān)控與迭代:持續(xù)監(jiān)控效果,用新數(shù)據(jù)更新模型。5)答:常用數(shù)據(jù)集獲取接口/渠道如下:·Python庫內(nèi)置接口:sklearn.datasets(經(jīng)典數(shù)據(jù)集)、torchvision.datasets(視覺數(shù)據(jù)集)、tensorflow_datasets(TF專用)、huggingface.datasets(NLP/視覺/語音數(shù)據(jù)集);·公開數(shù)據(jù)集平臺(tái)/API:UCI機(jī)器學(xué)習(xí)倉庫、KaggleDatasets(支持API調(diào)用)、阿里云/百度AI開放平臺(tái)、ImageNet/COCO(視覺標(biāo)桿數(shù)據(jù)集)、政府/科研機(jī)構(gòu)開放API;·自定義接口:爬蟲、SQL數(shù)據(jù)庫查詢、企業(yè)內(nèi)部RESTfulAPI。6.6習(xí)題答案1.單項(xiàng)選擇題1)A2)D3)A4)C
5)A6)A7)A8)A2.簡答題1)答:線性回歸基于最小二乘法,核心是最小化預(yù)測值與真實(shí)值的殘差平方和以擬合自變量與因變量的線性關(guān)系,目標(biāo)是找到最優(yōu)權(quán)重使殘差最小;正則化回歸則在線性回歸損失函數(shù)中加入L1、L2或L1+L2正則化懲罰項(xiàng),通過限制權(quán)重大小控制模型復(fù)雜度,解決過擬合問題,兩者的區(qū)別在于線性回歸損失函數(shù)僅含殘差平方和、過擬合風(fēng)險(xiǎn)高、無特征選擇能力,適用于特征少且無多重共線性場景,而正則化回歸因懲罰項(xiàng)降低了過擬合風(fēng)險(xiǎn),其中Lasso和彈性網(wǎng)還具備特征選擇能力,適用于特征多、有多重共線性的場景。2)答:三者均為正則化線性回歸算法,核心目標(biāo)是解決普通線性回歸的過擬合和多重共線性問題,均基于最小二乘法并通過加入懲罰項(xiàng)限制權(quán)重大小,且都需調(diào)整正則化強(qiáng)度參數(shù)α;不同之處在于嶺回歸用L2范數(shù)懲罰項(xiàng),無特征選擇能力但能緩解多重共線性,適用于特征多、多重共線性強(qiáng)的場景,Lasso回歸用L1范數(shù)懲罰項(xiàng),能實(shí)現(xiàn)特征稀疏化但可能在高相關(guān)特征中僅選一個(gè),適用于需篩選核心特征的場景,ElasticNet回歸融合L1+L2范數(shù)懲罰項(xiàng),兼顧稀疏化和穩(wěn)定性,解決了Lasso高相關(guān)特征選擇的缺陷,適用于特征多且高相關(guān)、樣本少的場景。3.編程題1)importnumpyasnpimportpandasaspdfromsklearn.linear_modelimportLinearRegression,Ridge,Lassofromsklearn.preprocessingimportStandardScalerfromsklearn.metricsimportr2_score#1.構(gòu)建數(shù)據(jù)集(表6-1)data={"X1":[7,1,11,11,7,11,3,1,2,21,1,11,10],"X2":[26,29,56,31,52,55,71,31,54,47,40,66,68],"X3":[6,15,8,8,6,9,17,22,18,4,23,9,8],"X4":[60,52,20,47,33,22,6,44,22,26,34,12,12],"Y":[78.5,74.3,104.3,87.6,95.9,109.2,102.7,72.5,93.1,115.9,83.8,113.3,109.4]}df=pd.DataFrame(data)#2.劃分特征(X)和目標(biāo)(Y),標(biāo)準(zhǔn)化(正則化回歸需標(biāo)準(zhǔn)化)X=df[["X1","X2","X3","X4"]]y=df["Y"]scaler=StandardScaler()X_scaled=scaler.fit_transform(X)#均值0,方差1#3.訓(xùn)練普通線性回歸lr=LinearRegression()lr.fit(X_scaled,y)y_pred_lr=lr.predict(X_scaled)print("=====普通線性回歸=====")print(f"權(quán)重系數(shù)(X1,X2,X3,X4):{lr.coef_}")print(f"截距:{ercept_}")print(f"R2得分:{r2_score(y,y_pred_lr):.4f}")#4.訓(xùn)練嶺回歸(α=1,可調(diào)整)ridge=Ridge(alpha=1.0)ridge.fit(X_scaled,y)y_pred_ridge=ridge.predict(X_scaled)print("\n=====嶺回歸=====")print(f"權(quán)重系數(shù)(X1,X2,X3,X4):{ridge.coef_}")print(f"截距:{ercept_}")print(f"R2得分:{r2_score(y,y_pred_ridge):.4f}")#5.訓(xùn)練Lasso回歸(α=0.1,可調(diào)整)lasso=Lasso(alpha=0.1)lasso.fit(X_scaled,y)y_pred_lasso=lasso.predict(X_scaled)print("\n=====Lasso回歸=====")print(f"權(quán)重系數(shù)(X1,X2,X3,X4):{lasso.coef_}")print(f"截距:{ercept_}")print(f"R2得分:{r2_score(y,y_pred_lasso):.4f}")#6.特征重要性分析(基于Lasso稀疏性)print("\n=====特征重要性(Lasso篩選)=====")important_features=[f"X{i+1}"fori,coefinenumerate(lasso.coef_)ifabs(coef)>0.1]print(f"核心特征:{important_features}")#構(gòu)建最終線性回歸方程(以Lasso篩選的核心特征為例)final_X=df[important_features]final_lr=LinearRegression()final_lr.fit(final_X,y)print(f"最終回歸方程:Y={final_ercept_:.2f}+"+"+".join([f"{final_lr.coef_[i]:.2f}*{feat}"fori,featinenumerate(important_features)]))2)importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromsklearn.linear_modelimportRidgefromsklearn.preprocessingimportStandardScalerfromsklearn.metricsimportmean_squared_error,r2_score#設(shè)置中文顯示plt.rcParams["font.family"]="SimHei"plt.rcParams["axes.unicode_minus"]=False#1.構(gòu)建數(shù)據(jù)集(表6-2)data={"月份":[1,2,3,4,5,6,7,8,9,10,11,12],"交通流量":[3100,2000,2100,700,700,1200,500,1100,1000,1200,500,1200]}df=pd.DataFrame(data)#2.預(yù)處理:特征(月份)需轉(zhuǎn)為二維數(shù)組,標(biāo)準(zhǔn)化X=df[["月份"]].values#嶺回歸要求X為二維y=df["交通流量"].valuesscaler_X=StandardScaler()X_scaled=scaler_X.fit_transform(X)scaler_y=StandardScaler()#可選:對(duì)y標(biāo)準(zhǔn)化(提升收斂速度)y_scaled=scaler_y.fit_transform(y.reshape(-1,1)).ravel()#3.訓(xùn)練嶺回歸模型ridge=Ridge(alpha=0.5)#正則化強(qiáng)度α=0.5ridge.fit(X_scaled,y_scaled)#4.預(yù)測(還原標(biāo)準(zhǔn)化結(jié)果)y_pred_scaled=ridge.predict(X_scaled)y_pred=scaler_y.inverse_transform(y_pred_scaled.reshape(-1,1)).ravel()#5.模型評(píng)估m(xù)se=mean_squared_error(y,y_pred)r2=r2_score(y,y_pred)print("=====嶺回歸模型評(píng)估=====")print(f"均方誤差(MSE):{mse:.2f}")print(f"R2得分:{r2:.4f}")print(f"回歸方程(標(biāo)準(zhǔn)化):y_scaled={ercept_:.4f}+{ridge.coef_[0]:.4f}*X_scaled")#6.可視化結(jié)果plt.figure(figsize=(10,6))plt.scatter(df["月份"],y,color="red",label="實(shí)際流量",s=80)#實(shí)際值plt.plot(df["月份"],y_pred,color="blue",label="嶺回歸預(yù)測",linewidth=2)#預(yù)測值plt.xlabel("月份",fontsize=12)plt.ylabel("交通流量",fontsize=12)plt.title("交通流量-月份嶺回歸擬合",fontsize=14)plt.xticks(range(1,13))plt.grid(linestyle="--",alpha=0.7)plt.legend()plt.show()#7.輸出各月份預(yù)測值df["預(yù)測流量"]=y_pred.round(0)print("\n=====各月份實(shí)際/預(yù)測流量=====")print(df[["月份","交通流量","預(yù)測流量"]])7.9習(xí)題答案一、單項(xiàng)選擇題1)A2)A3)C4)A5)D6)A7)A8)D9)A10)D二、問答題1)答:近鄰算法思想:這是一種“惰性學(xué)習(xí)”算法,其核心思想是“物以類聚”。對(duì)于一個(gè)新的待分類樣本,算法會(huì)在訓(xùn)練集中找出與之在特征空間中最相似的k個(gè)已知類別的樣本(即“最近鄰”),然后通過投票(分類問題)或取平均(回歸問題)的方式來決定該新樣本的類別。其關(guān)鍵在于距離度量(如歐氏距離)和k值的選擇。樸素貝葉斯算法思想:這是一種基于貝葉斯定理和特征條件獨(dú)立性假設(shè)的概率分類算法。其思想是先計(jì)算在給定特征條件下,樣本屬于各個(gè)類別的后驗(yàn)概率。具體來說,它利用訓(xùn)練數(shù)據(jù)來估計(jì):a)每個(gè)類別的先驗(yàn)概率(P(Y));b)每個(gè)特征在給定類別下的條件概率(P(XiY))。對(duì)于新樣本,算法通過貝葉斯公式計(jì)算其屬于每個(gè)類別的概率,并將概率最大的類別作為預(yù)測結(jié)果。2)答:支持向量機(jī)的核心目標(biāo)是找到一個(gè)最優(yōu)的分隔超平面,該平面不僅能將不同類別的樣本正確分開,而且要使兩類樣本中離該平面最近的樣本點(diǎn)(即支持向量)到平面的距離(即間隔)最大化。這個(gè)最大化間隔的過程等價(jià)于求解一個(gè)凸二次規(guī)劃問題。對(duì)于線性不可分的數(shù)據(jù),SVM通過引入松弛變量容忍部分錯(cuò)誤分類,并通過核技巧將原始數(shù)據(jù)映射到更高維的特征空間,使得在高維空間中變得線性可分,從而避免了直接在高維空間中進(jìn)行復(fù)雜計(jì)算。常用核函數(shù)及其特點(diǎn):a)線性核:K(特點(diǎn):參數(shù)少,計(jì)算速度快。適用于特征維數(shù)高、樣本量大的情況,或當(dāng)問題本身近似線性可分時(shí)。b)多項(xiàng)式核:K(特點(diǎn):`d`為多項(xiàng)式次數(shù)。當(dāng)次數(shù)`d`較高時(shí),計(jì)算復(fù)雜度會(huì)顯著增加,且容易過擬合。c)高斯核:K(特點(diǎn):也稱為徑向基函數(shù)核。是最常用、最靈活的核函數(shù)。`γ`參數(shù)控制模型的復(fù)雜度,`γ`越大,模型越復(fù)雜,越容易過擬合;`γ`越小,模型越平滑。適用于大多數(shù)非線性問題。d)Sigmoid核:K(特點(diǎn):其形狀類似于神經(jīng)網(wǎng)絡(luò)中的Sigmoid激活函數(shù),在某些特定場景下有效,但并非總是正定,使用不如高斯核普遍。三、編程題1)importnumpyasnpfromsklearn.preprocessingimportLabelEncoderfromsklearn.naive_bayesimportCategoricalNB#使用適合離散特征的分類器#1.定義數(shù)據(jù)集(對(duì)應(yīng)表7-1)data=[['≤30','高','否','中','否'],['≤30','高','否','優(yōu)','否'],['31-40','高','否','中','是'],['>40','中','否','中','是'],['>40','低','是','中','是'],['>40','低','是','優(yōu)','否'],['31-40','低','是','優(yōu)','是'],['≤30','中','否','中','否'],['≤30','低','是','中','是'],['>40','中','是','中','是'],['≤30','中','是','優(yōu)','是'],['31-40','中','否','優(yōu)','是'],['31-40','高','是','中','是'],['>40','中','否','優(yōu)','否']]#轉(zhuǎn)換為NumPy數(shù)組data=np.array(data)X=data[:,:-1]#特征:年齡、收入、是否學(xué)生、信譽(yù)y=data[:,-1]#標(biāo)簽:購買計(jì)算機(jī)#2.將類別標(biāo)簽編碼為數(shù)字(樸素貝葉斯需要數(shù)值輸入)encoders=[LabelEncoder()for_inrange(X.shape[1])]X_encoded=np.zeros(X.shape,dtype=int)foriinrange(X.shape[1]):X_encoded[:,i]=encoders[i].fit_transform(X[:,i])label_encoder_y=LabelEncoder()y_encoded=label_encoder_y.fit_transform(y)#3.訓(xùn)練樸素貝葉斯模型(這里使用CategoricalNB,適用于分類特征)model=CategoricalNB()model.fit(X_encoded,y_encoded)#4.預(yù)測新樣本(例如:年齡≤30,收入中,是學(xué)生,信譽(yù)優(yōu))new_sample=['≤30','中','是','優(yōu)']new_sample_encoded=[encoders[i].transform([new_sample[i]])[0]foriinrange(len(new_sample))]new_sample_encoded=np.array(new_sample_encoded).reshape(1,-1)prediction=model.predict(new_sample_encoded)prediction_proba=model.predict_proba(new_sample_encoded)print(f"新樣本{new_sample}的預(yù)測結(jié)果:{'購買'ifprediction[0]==1else'不購買'}")print(f"預(yù)測概率:[不購買:{prediction_proba[0][0]:.3f},購買:{prediction_proba[0][1]:.3f}]")2)importnumpyasnpimportpandasaspdfromsklearn.preprocessingimportLabelEncoderfromsklearn.treeimportDecisionTreeClassifier,plot_treeimportmatplotlib.pyplotaspltimportwarningswarnings.filterwarnings("ignore")#設(shè)置中文字體plt.rcParams['font.sans-serif']=['SimHei','MicrosoftYaHei','DejaVuSans']#用來正常顯示中文標(biāo)簽plt.rcParams['axes.unicode_minus']=False#用來正常顯示負(fù)號(hào)#1.定義數(shù)據(jù)集(對(duì)應(yīng)表7-2)data_dict={'序號(hào)':list(range(1,15)),'數(shù)量':['多','少','多','多','多','多','少','少','多','少','多','少','多','多'],'頁數(shù)':[100,50,50,120,40,140,130,50,160,50,30,170,60,100],'是否促銷':['是','是','是','否','否','是','是','是','是','否','否','是','否','否'],'評(píng)價(jià)':['B','A','B','B','A','A','B','A','B','B','B','B','A','A'],'銷量':['高','低','低','低','高','高','低','高','高','低','高','低','高','高']}df=pd.DataFrame(data_dict)#2.數(shù)據(jù)預(yù)處理:將分類變量編碼,數(shù)值變量保留X=df[['數(shù)量','頁數(shù)','是否促銷','評(píng)價(jià)']].copy()y=df['銷量']#編碼分類特征cat_columns=['數(shù)量','是否促銷','評(píng)價(jià)']label_encoders={}forcolincat_columns:le=LabelEncoder()X[col]=le.fit_transform(X[col])label_encoders[col]=le#編碼目標(biāo)變量le_y=LabelEncoder()y_encoded=le_y.fit_transform(y)#高->1,低->0#3.訓(xùn)練決策樹模型model=DecisionTreeClassifier(criterion='entropy',random_state=42)#使用信息熵model.fit(X,y_encoded)#4.評(píng)估模型(在訓(xùn)練集上,實(shí)際應(yīng)劃分測試集)train_score=model.score(X,y_encoded)print(f"決策樹模型在訓(xùn)練集上的準(zhǔn)確率:{train_score:.3f}")#5.可視化決策樹plt.figure(figsize=(15,10))feature_names=['數(shù)量(0:少,1:多)','頁數(shù)','是否促銷(0:否,1:是)','評(píng)價(jià)(0:A,1:B)']class_names=['低','高']plot_tree(model,feature_names=feature_names,class_names=class_names,filled=True,rounded=True,fontsize=10)plt.title("圖書銷量預(yù)測決策樹")plt.tight_layout()plt.show()#6.預(yù)測一個(gè)新樣本(例如:數(shù)量多,頁數(shù)80,促銷是,評(píng)價(jià)A)#注意:需要先將分類值轉(zhuǎn)化為編碼new_sample={'數(shù)量':'多','頁數(shù)':80,'是否促銷':'是','評(píng)價(jià)':'A'}new_sample_encoded=[]forcolin['數(shù)量','頁數(shù)','是否促銷','評(píng)價(jià)']:ifcolinlabel_encoders:new_sample_encoded.append(label_encoders[col].transform([new_sample[col]])[0])else:new_sample_encoded.append(new_sample[col])prediction=model.predict([new_sample_encoded])print(f"\n新樣本{new_sample}的預(yù)測銷量:{le_y.inverse_transform(prediction)[0]}")8.7習(xí)題答案一、單項(xiàng)選擇題1)B2)A3)B4)D5)B6)D7)D8)B二、問答題1)答:算法思想:k均值是一種迭代求解的質(zhì)心聚類算法。首先,隨機(jī)選擇k個(gè)點(diǎn)作為初始的聚類中心。然后,將每個(gè)樣本點(diǎn)分配到距離它最近的聚類中心所在的簇中。接著,根據(jù)每個(gè)簇中所有樣本點(diǎn)重新計(jì)算該簇的聚類中心(即各維度特征的均值)。重復(fù)步驟前兩個(gè)步驟,直到聚類中心的位置不再發(fā)生顯著變化或達(dá)到預(yù)設(shè)的迭代次數(shù)。優(yōu)點(diǎn):原理簡單,易于理解和實(shí)現(xiàn)。對(duì)于近似球形分布且簇間分離度較好的數(shù)據(jù),聚類效果較好。當(dāng)簇間區(qū)別明顯時(shí),收斂速度快。缺點(diǎn):需要預(yù)先指定簇?cái)?shù)k,而k值的選擇通常比較困難,需要經(jīng)驗(yàn)或多次嘗試。對(duì)初始質(zhì)心的選擇敏感,不同的初始值可能導(dǎo)致不同的聚類結(jié)果。對(duì)噪聲和異常點(diǎn)敏感,因?yàn)樗鼈儠?huì)顯著影響質(zhì)心的計(jì)算。不適合發(fā)現(xiàn)非凸形狀的簇(如環(huán)形、半月形)或大小差別很大的簇。主要適用于數(shù)值型數(shù)據(jù)。2)答:算法思想:DBSCAN是一種基于密度的聚類算法。其核心思想是:一個(gè)簇是由密度可達(dá)關(guān)系連接起來的最大樣本點(diǎn)集合。它定義了三個(gè)關(guān)鍵概念:核心點(diǎn):在給定半徑(eps)的鄰域內(nèi),包含至少一定數(shù)量(min_samples)樣本的點(diǎn)。邊界點(diǎn):在核心點(diǎn)的鄰域內(nèi),但自身不滿足核心點(diǎn)條件的點(diǎn)。噪聲點(diǎn):既不是核心點(diǎn)也不是邊界點(diǎn)的點(diǎn)。算法從任意一個(gè)核心點(diǎn)出發(fā),尋找所有從它出發(fā)密度可達(dá)的樣本(包括其他核心點(diǎn)和邊界點(diǎn)),這些樣本形成一個(gè)簇。重復(fù)此過程,直到所有核心點(diǎn)都被訪問過。優(yōu)點(diǎn):不需要預(yù)先指定簇的個(gè)數(shù)k。能夠識(shí)別并過濾噪聲點(diǎn)(異常值)??梢园l(fā)現(xiàn)任意形狀的聚類(非球形),對(duì)簇的形狀沒有假設(shè)。聚類結(jié)果對(duì)輸入樣本的順序不敏感(核心思想決定)。缺點(diǎn):對(duì)參數(shù)(eps和min_samples)非常敏感,參數(shù)設(shè)置不當(dāng)可能導(dǎo)致聚類效果很差。當(dāng)數(shù)據(jù)集的密度不均勻或簇間密度相差較大時(shí),聚類效果不佳。處理高維數(shù)據(jù)時(shí),由于“維度災(zāi)難”,距離度量可能失效,效果下降。樣本量很大時(shí),盡管有索引優(yōu)化,計(jì)算復(fù)雜度仍然較高。三、編程題1)fromsklearn.datasetsimportmake_blobsfromsklearn.clusterimportKMeansimportmatplotlib.pyplotaspltimportwarningswarnings.filterwarnings("ignore",category=UserWarning)#1.生成數(shù)據(jù)集centers=[[5,2],[-3,2],[-2,-4],[2,-3]]X,y_true=make_blobs(n_samples=2000,centers=centers,n_features=2,cluster_std=1.0,random_state=42)#2.使用KMeans進(jìn)行聚類kmeans=KMeans(n_clusters=4,init='k-means++',n_init=10,random_state=42)y_pred=kmeans.fit_predict(X)#3.獲取聚類中心和標(biāo)簽cluster_centers=kmeans.cluster_centers_labels=kmeans.labels_#4.可視化聚類結(jié)果plt.figure(figsize=(8,6))#繪制所有樣本點(diǎn),按聚類結(jié)果著色scatter=plt.scatter(X[:,0],X[:,1],c=y_pred,cmap='viridis',s=20,alpha=0.6,edgecolors='k',linewidths=0.5)#繪制聚類中心plt.scatter(cluster_centers[:,0],cluster_centers[:,1],c='red',marker='X',s=200,label='Centroids',edgecolors='k',linewidths=1.5)plt.title('K-MeansClusteringonBlobData(k=4)')plt.xlabel('Feature1')plt.ylabel('Feature2')plt.legend()plt.colorbar(scatter,label='ClusterLabel')plt.grid(True,linestyle='--',alpha=0.5)plt.axis('equal')plt.show()print(f"聚類中心坐標(biāo):\n{cluster_centers}")print(f"輪廓系數(shù)(僅供參考,需要導(dǎo)入metrics):")#若要計(jì)算輪廓系數(shù),可取消以下注釋#fromsklearn.metricsimportsilhouette_score#score=silhouette_score(X,labels)#print(f"SilhouetteScore:{score:.3f}")2)fromsklearn.datasetsimportmake_moonsfromsklearn.clusterimportDBSCANimportmatplotlib.pyplotaspltimportnumpyasnp#1.生成半月狀數(shù)據(jù)集X,y_true=make_moons(n_samples=2000,noise=0.15,random_state=42)#2.使用DBSCAN進(jìn)行聚類dbscan=DBSCAN(eps=0.2,min_samples=20)y_pred=dbscan.fit_predict(X)#3.識(shí)別核心點(diǎn)、邊界點(diǎn)和噪聲點(diǎn)core_sample_mask=np.zeros_like(dbscan.labels_,dtype=bool)core_sample_mask[dbscan.core_sample_indices_]=Truelabels=dbscan.labels_#統(tǒng)計(jì)聚類情況n_clusters=len(set(labels))-(1if-1inlabelselse0)n_noise=list(labels).count(-1)print(f'估計(jì)的簇?cái)?shù)量:{n_clusters}')print(f'估計(jì)的噪聲點(diǎn)數(shù)量:{n_noise}')#4.可視化聚類結(jié)果plt.figure(figsize=(10,8))#分離核心點(diǎn)和噪聲點(diǎn)core_points=X[core_sample_mask]core_labels=labels[core_sample_mask]noise_points=X[labels==-1]#繪制核心點(diǎn)(按簇著色)unique_labels=set(core_labels)colors=plt.cm.Spectral(np.linspace(0,1,len(unique_labels)))fori,(label,color)inenumerate(zip(sorted(unique_labels),colors)):iflabel==-1:continue#跳過噪聲點(diǎn),噪聲點(diǎn)單獨(dú)繪制#繪制該簇的核心點(diǎn)mask=core_labels==labelplt.scatter(core_points[mask,0],core_points[mask,1],c=[color],marker='o',s=30,edgecolors='k',linewidths=0.5,label=f'Cluster{label}'ifi==0else"")#繪制噪聲點(diǎn)(如果有)iflen(noise_points)>0:plt.scatter(noise_points[:,0],noise_points[:,1],c='black',marker='x',s=20,linewidths=0.5,label='Noise')plt.title(f'DBSCANClusteringonMoonData\n(Estimatedclusters:{n_clusters},Noise:{n_noise})')plt.xlabel('Feature1')plt.ylabel('Feature2')plt.legend(loc='upperright')plt.grid(True,linestyle='--',alpha=0.3)plt.axis('equal')plt.tight_layout()plt.show()9.6習(xí)題答案一、單項(xiàng)選擇題1)A2)B3)C4)A5)B6)C7)A8)B9)D10)B11)C二、問答題1)答:中心化(使每個(gè)特征的均值為0)是PCA標(biāo)準(zhǔn)預(yù)處理步驟。原因如下:簡化計(jì)算與解釋:協(xié)方差矩陣的計(jì)算公式在數(shù)據(jù)已中心化時(shí)簡化為1m第一主成分將直接通過數(shù)據(jù)方差最大的方向,而非數(shù)據(jù)的“重心”方向。去除偏差:如果數(shù)據(jù)未中心化,第一個(gè)主成分可能會(huì)強(qiáng)烈地指向數(shù)據(jù)的均值方向,這通常不是我們關(guān)心的最大方差方向。中心化能確保PCA尋找的是數(shù)據(jù)變異的主要方向,而不是其位置。未中心化的影響:如果未進(jìn)行中心化,PCA的主成分方向?qū)⑹艿綌?shù)據(jù)原始均值的嚴(yán)重影響。第一個(gè)主成分可能主要反映了數(shù)據(jù)的整體偏移,而非數(shù)據(jù)結(jié)構(gòu)本身的最大方差方向,從而導(dǎo)致降維效果變差,難以捕捉數(shù)據(jù)真正的變化模式。2)答:貢獻(xiàn)率定義:第i個(gè)主成分的貢獻(xiàn)率是指該主成分所解釋的方差占原始數(shù)據(jù)總方差的比例。累計(jì)貢獻(xiàn)率則是前k個(gè)主成分的貢獻(xiàn)率之和,表示降維后保留了多少原始信息。剩余方差的意義:剩余的5%方差可能包含以下信息:噪聲:大部分可能是測量誤差、隨機(jī)波動(dòng)等無關(guān)信息。細(xì)微結(jié)構(gòu):可能包含一些對(duì)整體模式影響甚微的細(xì)節(jié)或特異性信息。高階非線性關(guān)系:PCA是線性方法,可能無法捕獲數(shù)據(jù)中存在的復(fù)雜非線性結(jié)構(gòu),這部分信息會(huì)丟失在剩余方差中。在實(shí)際應(yīng)用中,如果累計(jì)貢獻(xiàn)率達(dá)到95%(90%+5%),通常認(rèn)為降維后的數(shù)據(jù)已經(jīng)保留了絕大部分有價(jià)值的信息,剩余的5%可以酌情舍棄以簡化模型。3)答:與特征選擇的區(qū)別:特征選擇:從原始特征集中挑選一個(gè)子集,保留的是原始特征本身。它依賴于特征的重要性評(píng)估(如過濾法、包裹法、嵌入法)。PCA降維:通過線性變換創(chuàng)建一組全新的特征(主成分),這些特征是原始特征的線性組合。它不保留任何原始特征,而是保留數(shù)據(jù)的全局方差結(jié)構(gòu)。PCA保留的信息:PCA保留的是數(shù)據(jù)在特征空間中的全局方差信息,即數(shù)據(jù)點(diǎn)分布的主要方向。它試圖用盡可能少的主成分來最大化地解釋原始數(shù)據(jù)的總體變異。處理強(qiáng)相關(guān)特征的表現(xiàn):PCA非常擅長處理特征間強(qiáng)相關(guān)的數(shù)據(jù)。因?yàn)閺?qiáng)相關(guān)性意味著數(shù)據(jù)存在冗余,PCA可以通過尋找少數(shù)幾個(gè)不相關(guān)的方向(主成分)來捕捉這些相關(guān)特征背后的共同模式,從而有效去除冗余,實(shí)現(xiàn)高效的降維。4)答:數(shù)據(jù)變化:原始二維空間中的每個(gè)樣本點(diǎn)(x1,分布特點(diǎn):在投影后的一維空間中:類內(nèi)緊致:屬于同一類別的樣本點(diǎn),其投影值會(huì)緊密地聚集在一起(方差小)。類間分離:屬于不同類別的樣本點(diǎn),其投影值的中心(均值)會(huì)盡可能遠(yuǎn)離。最大判別性:投影方向是經(jīng)過優(yōu)化選擇的,使得上述“類內(nèi)緊致、類間分離”的程度達(dá)到最大。因此,降維后的數(shù)據(jù)非常有利于后續(xù)的分類任務(wù)(例如,只需設(shè)置一個(gè)簡單的閾值即可區(qū)分兩類)。三、操作題1)importnumpyasnpfromsklearn.decompositionimportPCAfromsklearn.datasetsimportmake_classificationfromsklearn.preprocessingimportStandardScaler#生成示例數(shù)據(jù)集:100個(gè)樣本,10個(gè)特征X,_=make_classification(n_samples=100,n_features=10,random_state=42)#通常建議先標(biāo)準(zhǔn)化(特別是特征量綱不一時(shí))scaler=StandardScaler()X_scaled=scaler.fit_transform(X)#應(yīng)用PCA,降至3維pca=PCA(n_components=3)X_pca=pca.fit_transform(X_scaled)print("原始數(shù)據(jù)形狀:",X.shape)print("降維后數(shù)據(jù)形狀:",X_pca.shape)print("各主成分貢獻(xiàn)率:",pca.explained_variance_ratio_)print("累計(jì)貢獻(xiàn)率:",np.cumsum(pca.explained_variance_ratio_))2)importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.decompositionimportPCAfromsklearn.preprocessingimportStandardScaler#模擬不同量綱的數(shù)據(jù):身高(cm)、體重(kg)、收入(萬元)np.random.seed(42)height=np.random.normal(170,10,100)#均值170cm,標(biāo)準(zhǔn)差10weight=np.random.normal(70,15,100)#均值70kg,標(biāo)準(zhǔn)差15income=np.random.normal(15,8,100)#均值15萬元,標(biāo)準(zhǔn)差8X=np.column_stack((height,weight,income))#不進(jìn)行標(biāo)準(zhǔn)化pca_raw=PCA(n_components=2)X_pca_raw=pca_raw.fit_transform(X)#進(jìn)行標(biāo)準(zhǔn)化scaler=StandardScaler()X_scaled=scaler.fit_transform(X)pca_scaled=PCA(n_components=2)X_pca_scaled=pca_scaled.fit_transform(X_scaled)#比較結(jié)果print("===未標(biāo)準(zhǔn)化===")print("主成分貢獻(xiàn)率:",pca_raw.explained_variance_ratio_)print("主成分方向(特征向量):\n",pca_ponents_)print("\n===標(biāo)準(zhǔn)化后===")print("主成分貢獻(xiàn)率:",pca_scaled.explained_variance_ratio_)print("主成分方向(特征向量):\n",pca_ponents_)3)fromsklearn.datasetsimportload_digitsfromsklearn.discriminant_analysisimportLinearDiscriminantAnalysisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.svmimportSVCfromsklearn.metricsimportaccuracy_score#1.加載數(shù)據(jù)(10類,每類約180個(gè)樣本)digits=load_digits()X,y=digits.data,digits.target#2.劃分訓(xùn)練集和測試集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)#3.應(yīng)用LDA降維(最多可降至min(特征數(shù),類別數(shù)-1)維)#這里特征數(shù)64>類別數(shù)10-1=9,所以最多降至9維lda=LinearDiscriminantAnalysis(n_components=9)X_train_lda=lda.fit_transform(X_train,y_train)X_test_lda=lda.transform(X_test)print("原始特征維度:",X_train.shape[1])print("LDA降維后維度:",X_train_lda.shape[1])#4.在降維后的數(shù)據(jù)上訓(xùn)練分類器(例如SVM)svm_clf=SVC(kernel='rbf',random_state=42)svm_clf.fit(X_train_lda,y_train)#5.評(píng)估y_pred=svm_clf.predict(X_test_lda)accuracy=accuracy_score(y_test,y_pred)print(f"LDA降維后SVM分類準(zhǔn)確率:{accuracy:.4f}")#解釋:LDA利用標(biāo)簽信息找到最具判別性的投影方向,降維后的特征更利于分類。#與PCA等無監(jiān)督降維相比,LDA在分類任務(wù)上通常能獲得更好或相當(dāng)?shù)男阅?,且維度更低。4)importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.decompositionimportDictionaryLearningfromsklearn.feature_extraction.imageimportextract_patches_2d,reconstruct_from_patches_2d#1.生成合成圖像(棋盤格)defgenerate_checkerboard(size=256,square_size=16):"""生成棋盤格圖像"""image=np.zeros((size,size))foriinrange(0,size,square_size*2):forjinrange(0,size,square_size*2):image[i:i+square_size,j:j+square_size]=1image[i+square_size:i+2*square_size,j+square_size:j+2*square_size]=1returnimage#生成圖像image=generate_checkerboard(size=256,square_size=16)#添加高斯噪聲np.random.seed(42)noise=np.random.normal(0,0.2,image.shape)image_noisy=image+noiseimage_noisy=np.clip(image_noisy,0,1)#2.提取圖像塊作為樣本patch_size=(8,8)patches=extract_patches_2d(image_noisy,patch_size,max_patches=1000,random_state=42)patches=patches.reshape(patches.shape[0],-1)#展平#3.使用字典學(xué)習(xí)(稀疏編碼)學(xué)習(xí)字典n_components=100#字典大小dict_learner=DictionaryLearning(n_components=n_components,alpha=1,max_iter=1000,random_state=42)dict_learner.fit(patches)dictionary=dict_ponents_#4.對(duì)噪聲圖像塊進(jìn)行稀疏編碼(去噪)patches_noisy=extract_patches_2d(image_noisy,patch_size)patches_noisy_flat=patches_noisy.reshape(patches_noisy.shape[0],-1)#獲取稀疏編碼(transform)codes=dict_learner.transform(patches_noisy_flat)#用字典和稀疏編碼重構(gòu)圖像塊(去噪)patches_denoised_flat=codes@dictionarypatches_denoised=patches_denoised_flat.reshape(patches_noisy.shape)#5.從塊重建整張圖像image_denoised=reconstruct_from_patches_2d(patches_denoised,image.shape)#6.可視化結(jié)果fig,axes=plt.subplots(1,3,figsize=(12,4))axes[0].imshow(image,cmap='gray')axes[0].set_title('原始圖像(棋盤格)')axes[1].imshow(image_noisy,cmap='gray')axes[1].set_title('噪聲圖像')axes[2].imshow(image_denoised,cmap='gray')axes[2].set_title('字典學(xué)習(xí)去噪后')foraxinaxes:ax.axis('off')plt.tight_layout()plt.show()print("去噪完成!")10.6習(xí)題答案單項(xiàng)選擇題1)B2)D3)A4)A5)D6)C7)D問答題1)隨機(jī)森林通過以下步驟實(shí)現(xiàn):①從原始訓(xùn)練集中有放回地隨機(jī)抽取N個(gè)樣本(Bootstrap采樣),形成多個(gè)子訓(xùn)練集;②對(duì)每個(gè)子訓(xùn)練集,在每次節(jié)點(diǎn)分裂時(shí),從全部特征中隨機(jī)選取m個(gè)特征(m<總特征數(shù)),從中選擇最優(yōu)分裂特征;③基于上述子集和特征子集,構(gòu)建多棵決策樹,每棵樹完全生長(通常不剪枝);④預(yù)測時(shí),分類任務(wù)采用多數(shù)投票,回歸任務(wù)采用平均值,綜合所有樹的結(jié)果作為最終輸出。2)決策樹是隨機(jī)森林的基本組成單元(基學(xué)習(xí)器);隨機(jī)森林通過集成多棵決策樹,引入樣本隨機(jī)性(Bootstrap)和特征隨機(jī)性,降低模型方差,提高泛化能力;單棵決策樹容易過擬合,而隨機(jī)森林通過“集體智慧”有效緩解這一問題;因此,隨機(jī)森林可看作是基于決策樹的Bagging集成方法。編程題1)fromsklearn.datasetsimportload_digitsfromsklearn.ensembleimportRandomForestClassifierfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score#加載數(shù)據(jù)digits=load_digits()X,y=digits.data,digits.targetX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)#測試不同n_estimatorsfornin[10,50,100,200]:rf=RandomForestClassifier(n_estimators=n,random_state=42)rf.fit(X_train,y_train)acc=accuracy_score(y_test,rf.predict(X_test))print(f"n_estimators={n},Accuracy:{acc:.4f}")#測試不同max_featuresformfin['sqrt','log2',None]:rf=RandomForestClassifier(n_estimators=100,max_features=mf,random_state=42)rf.fit(X_train,y_train)acc=accuracy_score(y_test,rf.predict(X_test))print(f"max_features={mf},Accuracy:{acc:.4f}")2)fromsklearn.datasetsimportload_winefromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimportAdaBoostClassifier,GradientBoostingClassifierfromsklearn.treeimportDecisionTreeClassifierfromsklearn.metricsimportaccuracy_score#加載數(shù)據(jù)wine=load_wine()X,y=wine.data,wine.targetX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)#AdaBoo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 煙臺(tái)東方威思頓電氣有限公司2026屆校園招聘200人備考題庫完整參考答案詳解
- 2025年天津渤海集團(tuán)財(cái)務(wù)有限責(zé)任公司校園招聘備考題庫及1套完整答案詳解
- 2025年博羅縣惠博小學(xué)音樂教師招聘備考題庫及一套參考答案詳解
- 四川省第二地質(zhì)大隊(duì)2025年下半年公開考核招聘工作人員備考題庫及答案詳解參考
- 2025年中共寧德市委黨校招聘勞務(wù)派遣人員7人備考題庫含答案詳解
- 風(fēng)車的課件引導(dǎo)
- 風(fēng)車擺件旋轉(zhuǎn)課件
- 沃得機(jī)電集團(tuán)校招筆試題目及答案
- 魏橋創(chuàng)業(yè)集團(tuán)秋招面試題及答案
- 唯品會(huì)秋招題庫及答案
- 孤立性漿細(xì)胞瘤影像診斷
- 建筑設(shè)計(jì)防火規(guī)范-實(shí)施指南
- 汾酒營銷活動(dòng)方案
- 口腔科職業(yè)暴露與防護(hù)
- 咨詢公司文檔管理制度
- CJ/T 511-2017鑄鐵檢查井蓋
- 智能采血管理系統(tǒng)功能需求
- 團(tuán)體標(biāo)準(zhǔn)解讀及臨床應(yīng)用-成人經(jīng)鼻高流量濕化氧療技術(shù)規(guī)范2025
- 石材廢渣處理協(xié)議書
- 資產(chǎn)移交使用協(xié)議書
- 醫(yī)用化學(xué)(第三版)課件 -第11章 鏈烴
評(píng)論
0/150
提交評(píng)論