機器學習 習題4答案_第1頁
機器學習 習題4答案_第2頁
機器學習 習題4答案_第3頁
機器學習 習題4答案_第4頁
機器學習 習題4答案_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

VIP免費下載

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

文檔簡介

習題4一簡答題1.聚類是一種無監督的學習算法,就是按照某個特定標準(如距離準則)把一個數據集分割成不同的簇(簇也稱為類),使得同一個簇內的數據對象的相似性盡可能_____,同時不在同一個簇中的數據對象的差異性也盡可能地______。(回答大或小)答:大;大。2.閔可夫斯基距離公式d=pk=1n|x1k-x2k|p,當p=1答:曼哈頓距離;歐幾里得距離;切比雪夫距離3.對于高維空間的任意2個坐標點,歐幾里得距離、曼哈頓距離、切比雪夫距離三者的大小關系是:______>=_______>=________答:曼哈頓距離>=歐幾里得距離>=切比雪夫距離4.哪一種距離指標是衡量兩個向量夾角的余弦,只考慮向量的方向,不考慮向量的大小?答:余弦相似度二計算題1.計算x(1,2)和y(3,4)之間的曼哈頓距離、歐幾里得距離、切比雪夫距離、余弦相似度。解:(1)曼哈頓距離d=2+2=4(2)歐幾里得距離d=sqrt(4+4)=2.828(3)切比雪夫距離d=max(2,2)=2(4)余弦相似度cosθ=(3+8)/(sqrt(1+4)*sqrt(9+16))=0.9842.聚類1有2個點x1(0,1)、x2(1,0)。聚類2有2個點y1(5,6)和y2(6,5)。計算輪廓系數。距離指標用曼哈頓距離。解:a_x1=1+1=2b_x1=((5+5)+(6+4))/2=10s_x1=(b_x1-a_x1)/max(a_x1,b_x1)=0.8a_x2=2;b_x2=10;s_x2=0.8a_y1=2;b_y1=10;s_y1=0.8a_y2=2;b_y2=10;s_y2=0.8SC=0.8*4/4=0.8三編程題1.用Python進行聚類編程,完成以下要求:(1)導入sklearn自帶數據集breast_cancer,顯示相關信息,然后將數據集分為訓練集和測試集。#將sklearn自帶數據集breast_cance分為訓練集和測試儀集#將sklearn自帶數據集breast_cance分為訓練集和測試儀集fromsklearn.datasetsimportload_breast_cancer#導入數據breast_cancer=load_breast_cancer()X=breast_cancer.datay=breast_cancer.targetprint('數據集的長度:',len(breast_cancer))print('數據集的類型:',type(breast_cancer))#查看數據集信息print('數據集的數據為:','\n',X)print('數據集的數據:\n',X)print('數據集的標簽:\n',y)#取出數據集的特征名breast_cancer_names=breast_cancer['feature_names']print('數據集的特征名:\n',breast_cancer_names)print('原始數據集數據的形狀:',X.shape)print('原始數據集標簽的形狀:',y.shape)#將數據集劃分為訓練集和測試集fromsklearn.model_selectionimporttrain_test_splitbreast_cancer_data_train,breast_cancer_data_test,breast_cancer_target_train,\breast_cancer_target_test=train_test_split(X,y,test_size=0.2,random_state=42)print('訓練集數據的形狀:',breast_cancer_data_train.shape)print('訓練集標簽的形狀:',breast_cancer_target_train.shape)print('測試集數據的形狀:',breast_cancer_data_test.shape)print('測試集標簽的形狀:',breast_cancer_target_test.shape)(2)對breast_cancer數據集進行標準化和歸一化操作。#對breast_cancer數據集進行標準化和歸一化fromsklearn.datasetsimportload_breast_cancer#導入數據breast_cancer=load_breast_cancer()X=breast_cancer.datay=breast_cancer.targetprint('數據集的長度:',len(breast_cancer))print('數據集的類型:',type(breast_cancer))#查看數據集信息print('數據集的數據:\n',X)print('數據集的標簽:\n',y)#取出數據集的特征名breast_cancer_names=breast_cancer['feature_names']print('數據集的特征名:\n',breast_cancer_names)print('原始數據集數據的形狀:',X.shape)print('原始數據集標簽的形狀:',y.shape)fromsklearnimportpreprocessingprint('原數據:\n',X)print('原數據均值:',X.mean(axis=0))print('原數據方差:',X.std(axis=0))X_scaled=preprocessing.scale(X)print('標準化后數據:\n',X_scaled)print('標準化數據均值:',X_scaled.mean(axis=0))print('標準化數據方差:',X_scaled.std(axis=0))min_max_scaler=preprocessing.MinMaxScaler()X_train_minmax=min_max_scaler.fit_transform(X)print('歸一化后數據:\n',X_train_minmax)print('歸一化數據均值:',X_train_minmax.mean(axis=0))print('歸一化數據方差:',X_train_minmax.std(axis=0))(3)對breast_cancer數據集進行PCA降維和IncrementalPCA降維操作。#對breast_cancer數據集進行PCA降維和IncrementalPCA降維操作fromsklearn.datasetsimportload_breast_cancerfromsklearn.decompositionimportPCA,IncrementalPCA#導入數據breast_cancer=load_breast_cancer()X=breast_cancer.datay=breast_cancer.targetprint('原始數據集數據的形狀:',X.shape)#IPCA降維ipca=IncrementalPCA(n_components=3,batch_size=10)X_ipca=ipca.fit_transform(X)print('原始數據集數據的形狀:',X_ipca.shape)#PCA降維pca=PCA(n_components=3)X_pca=pca.fit_transform(X)print('原始數據集數據的形狀:',X_pca.shape)(4)使用基于Python的Kmeans方法對PCA降維后的breast_cancer數據集進行聚類操作,對比原始數據與降維后數據的聚類結果。#使用基Kmeans方法對PCA降維后的breast_cancer數據集進行聚類操作importosos.environ["OMP_NUM_THREADS"]="3"fromsklearn.datasetsimportload_breast_cancerfromsklearn.decompositionimportPCA,IncrementalPCAfromsklearnimportmetricsfromsklearn.clusterimportKMeansimportmatplotlib.pyplotasplt#防止亂碼plt.rcParams['font.sans-serif']='SimHei'plt.rcParams['axes.unicode_minus']=False#導入數據breast_cancer=load_breast_cancer()X=breast_cancer.datay=breast_cancer.targetprint(breast_cancer.target_names)print('原始數據集數據的形狀為:',X.shape)#劃分子圖figure=plt.figure()axes1=figure.add_subplot(2,1,1)axes2=figure.add_subplot(2,1,2)#對原數據進行Kmeans聚類,創建聚類器并且訓練KMeans1=KMeans(n_clusters=3)#KMeans1.fit(X)#聚類y_pred=KMeans1.fit_predict(X)#獲取聚類標簽label_pred=KMeans1.labels_#繪圖x0=X[label_pred==0]x1=X[label_pred==1]axes1.scatter(x0[:,0],x0[:,1],c="r",marker='D',label=breast_cancer.target_names[0])axes1.scatter(x1[:,0],x1[:,1],c="g",marker='*',label=breast_cancer.target_names[1])axes1.legend()axes1.set_title('原數據直接K均值聚類')plt.show()#PCA降維pca=PCA(n_components=2)X_pca=pca.fit_transform(X)#對PCA降維后數據進行Kmeans聚類,創建聚類器并且訓練KMeans2=KMeans(n_clusters=3)#KMeans2.fit(X_pca)#聚類y_pred_pca=KMeans2.fit_predict(X_pca)#獲取聚類標簽label_pred=KMeans2.labels_#繪圖x0=X_pca[label_pred==0]x1=X_pca[label_pred==1]axes2.scatter(x0[:,0],x0[:,1],c='r',marker='D',label=breast_cancer.target_names[0])axes2.scatter(x1[:,0],x1[:,1],c='g',marker='*',label=breast_cancer.target_names[1])axes2.legend()axes2.set_title('PCA降維后K均值聚類')plt.show()#計算Calinski-Harabasz指數得分print('原始數據聚類得分:',metrics.calinski_harabasz_score(X,y_pred))print('降維后數據聚類得分:',metrics.calinski_harabasz_score(X_pca,y_pred_pca))(5)使用基于Python的Kmeans方法對IPCA降維后的breast_cancer數據集進行聚類操作,對比原始數據與降維后數據的聚類結果。#使用基Kmeans方法對IPCA降維后的breast_cancer數據集進行聚類操作importosos.environ["OMP_NUM_THREADS"]="3"fromsklearn.datasetsimportload_breast_cancerfromsklearn.decompositionimportPCA,IncrementalPCAfromsklearnimportmetricsfromsklearn.clusterimportKMeansimportmatplotlib.pyplotasplt#防止亂碼plt.rcParams['font.sans-serif']='SimHei'plt.rcParams['axes.unicode_minus']=False#導入數據breast_cancer=load_breast_cancer()X=breast_cancer.datay=breast_cancer.targetprint(breast_cancer.target_names)print('原始數據集數據的形狀為:',X.shape)#劃分子圖figure=plt.figure()axes1=figure.add_subplot(2,1,1)axes2=figure.add_subplot(2,1,2)#對原數據進行Kmeans聚類,創建聚類器并且訓練KMeans1=KMeans(n_clusters=3)#KMeans1.fit(X)#聚類y_pred=KMeans1.fit_predict(X)#獲取聚類標簽label_pred=KMeans1.labels_#繪圖x0=X[label_pred==0]x1=X[label_pred==1]axes1.scatter(x0[:,0],x0[:,1],c='r',marker='D',label=breast_cancer.target_names[0])axes1.scatter(x1[:,0],x1[:,1],c='g',marker='*',label=breast_cancer.target_names[1])axes1.legend()axes1.set_title('原數據直接K均值聚類')plt.show()#IPCA降維ipca=IncrementalPCA(n_components=2,batch_size=10)X_ipca=ipca.fit_transform(X)#對IPCA降維后數據進行Kmeans聚類,創建聚類器并且訓練KMeans2=KMeans(n_clusters=3)#KMeans2.fit(X_pca)#聚類y_pred_ipca=KMeans2.fit_predict(X_ipca)#獲取聚類標簽label_pred=KMeans2.labels_#繪圖x0=X_ipca[label_pred==0]x1=X_ipca[label_pred==1]axes2.scatter(x0[:,0],x0[:,1],c='r',marker='D',label=breast_cancer.target_names[0])axes2.scatter(x1[:,0],x1[:,1],c='g',marker='*',label=breast_cancer.target_names[1])axes2.legend()axes2.set_title('IPCA降維后K均值聚類')plt.show()#計算Calinski-Harabasz指數得分print('原始數據聚類得分:',metrics.calinski_harabasz_score(X,y_pred))print('降維后數據聚類得分:',metrics.calinski_harabasz_score(X_ipca,y_pred_ipca))2.使用Sparkk-means聚類方法分析足球隊的實力,該數據共16條,包含1個隊名和6個特征數據,數據樣式如圖所示。/*k-means足球隊實力分析*/importorg.apache.spark.sql.SparkSessionimportorg.apache.spark.ml.linalg.Vectorsimportorg.apache.spark.ml.clustering.KMeansobjectSpark4_1{defmain(args:Array[String]):Unit={//創建spark接入點valspark=SparkSession.builder().master("local[*]").appName("KMeans").getOrCreate()//讀取數據valdf=spark.read//設置源數據格式.format("com.databricks.spark.csv")//一次只讀一行數據.option("inferschema","true").option("header","true").load("C:\\Users\\Administrator\\Desktop\\unit4\\attack.txt")//注冊一個udf來將數據轉換為向量spark.udf.register("toVector",(a:Double,b:Double,c:Double,d:Double,e:Double,f:Double)=>Vectors.dense(a,b,c,d,e,f))//創建特征向量valfeatures=df.selectExpr("toVector(score,goal,shoot,straight,violated,offside)asfeature","team")//創建K-Means模型,分類3,設定特征列、預測列valkMeans=newKMeans().setK(3).setFeaturesCol("feature").setPredictionCol("prediction")//訓練模型valmodel=kMeans.fit(features)//進行聚類計算,生成帶有預測簇標簽的DataFrame數據集,即計算聚合中心點valpredicted=model.transform(features)//predicted.show(30,false)predicted.createTempView("predicted")//分組顯示結果valsql="""|SELECT*|FROMpredicted|ORDERBYpredictionDESC|""".stripMarginvalgroup=spark.sql(sql)group.show(30,truncate=false)//關閉sparkspark.stop()}}3.加載spark自帶的文件\spark-2.4.8-bin-hadoop2.7\data\mllib\sample_lda_libsvm_data.txt,使用ml庫下的LDA算法完成模型訓練、對數據的主題進行聚類、模型評價和模型描述。/*LDA*/importorg.apache.spark.sql.SparkSessionimportorg.apache.spark.ml.clustering.LDAobjectSpark4_2{defmain(args:Array[String]):Unit={//創建spark接入點valspark=SparkSession.builder().appName("LDA").master("local").getOrCreate()valdf=spark.read.format("libsvm").load("C:\\Users\\Administrator\\Desktop\\unit4\\sample_lda_libsvm_data.txt")//k主題數或者聚類中心數,DocConcentration文章分布的超參數,必需>1.0,值越大推斷出的分布越平滑//TopicConcentration主題分布的超參數,必需>1.0,值越大推斷出的分布越平滑//MaxIt

溫馨提示

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

評論

0/150

提交評論