Python數據分析實驗四:數據分析綜合應用開發

目錄

    • 一、實驗目的與要求
    • 二、主要實驗過程
      • 1、加載數據集
      • 2、數據預處理
      • 3、劃分數據集
      • 4、創建模型估計器
      • 5、模型擬合
      • 6、模型性能評估
    • 三、主要程序清單和運行結果
    • 四、實驗體會


一、實驗目的與要求

1、目的:

??綜合運用所學知識,選取有實際背景的應用問題進行數據分析方案的設計與實現。要求明確目標和應用需求,涵蓋數據預處理、建模分析、模型評價和結果展示等處理階段,完成整個分析流程。

2、要求:

(1)應用Scikit-Learn庫中的邏輯回歸、SVM和kNN算法對Scikit-Learn自帶的乳腺癌(from sklearn.datasets import load_breast_cancer)數據集進行分類,并分別評估每種算法的分類性能。
(2)為了進一步提升算法的分類性能,能否嘗試使用網格搜索和交叉驗證找出每種算法較優的超參數。

二、主要實驗過程

1、加載數據集

from sklearn.datasets import load_breast_cancer
cancer=load_breast_cancer()
cancer.keys()
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])

將數據集轉換為DataFram:

import pandas as pd
cancer_data=pd.DataFrame(cancer.data,columns=cancer.feature_names)
cancer_data['target']=cancer.target_names[cancer.target]
cancer_data.head(3).append(cancer_data.tail(3))
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimensiontarget
017.9910.38122.801001.00.118400.277600.300100.147100.24190.07871...17.33184.602019.00.162200.665600.71190.26540.46010.11890malignant
120.5717.77132.901326.00.084740.078640.086900.070170.18120.05667...23.41158.801956.00.123800.186600.24160.18600.27500.08902malignant
219.6921.25130.001203.00.109600.159900.197400.127900.20690.05999...25.53152.501709.00.144400.424500.45040.24300.36130.08758malignant
56616.6028.08108.30858.10.084550.102300.092510.053020.15900.05648...34.12126.701124.00.113900.309400.34030.14180.22180.07820malignant
56720.6029.33140.101265.00.117800.277000.351400.152000.23970.07016...39.42184.601821.00.165000.868100.93870.26500.40870.12400malignant
5687.7624.5447.92181.00.052630.043620.000000.000000.15870.05884...30.3759.16268.60.089960.064440.00000.00000.28710.07039benign

6 rows × 31 columns

2、數據預處理

進行數據標準化:

from sklearn.preprocessing import StandardScaler
X=StandardScaler().fit_transform(cancer.data)
y=cancer.target

3、劃分數據集

將數據集劃分為訓練集和測試集:

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33) 

4、創建模型估計器

(1)創建邏輯回歸模型估計器:

#創建邏輯回歸模型估計器
from sklearn.linear_model import LogisticRegression
lgr=LogisticRegression()

(2)創建SVM算法模型估計器:

#創建SVM算法模型估計器
from sklearn.svm import SVC
svc=SVC()

(3)創建kNN算法模型估計器:

#創建kNN算法模型估計器
from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier()

5、模型擬合

用訓練集訓練模型估計器estimator:

#訓練邏輯回歸模型估計器
lgr.fit(X_train,y_train)
#訓練SVM算法模型估計器
svc.fit(X_train,y_train)
#訓練kNN算法模型估計器
knn.fit(X_train,y_train)

6、模型性能評估

(1)邏輯回歸模型性能評估:

#用模型估計器對測試集數據做預測
y_pred=lgr.predict(X_test)#對模型估計器的學習效果進行評價
print("測試集的分類準確率為:",lgr.score(X_test,y_test))

(2)SVM算法模型性能評估:

#用模型估計器對測試集數據做預測
y_pred=svc.predict(X_test)#對模型估計器的學習效果進行評價
print("測試集的分類準確率為:",svc.score(X_test,y_test))

(3)kNN算法模型性能評估:

#用模型估計器對測試集數據做預測
y_pred=knn.predict(X_test)#對模型估計器的學習效果進行評價
print("測試集的分類準確率為:",knn.score(X_test,y_test))

三、主要程序清單和運行結果

1、邏輯回歸用于分類

#加載數據集
from sklearn.datasets import load_breast_cancer
cancer=load_breast_cancer()#對數據集進行預處理,實現數據標準化
from sklearn.preprocessing import StandardScaler
X=StandardScaler().fit_transform(cancer.data)
y=cancer.target#將數據集劃分為訓練集和測試集(要求測試集占25%,隨機狀態random state設置為33)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33) #創建模型估計器estimator
from sklearn.linear_model import LogisticRegression
lgr=LogisticRegression()#用訓練集訓練模型估計器estimator
lgr.fit(X_train,y_train)#用模型估計器對測試集數據做預測
y_pred=lgr.predict(X_test)#對模型估計器的學習效果進行評價
#最簡單的評估方法:就是調用估計器的score(),該方法的兩個參數要求是測試集的特征矩陣和標簽向量
print("測試集的分類準確率為:",lgr.score(X_test,y_test))
from sklearn import metrics
#對于多分類問題,還可以使用metrics子包中的classification_report
print(metrics.classification_report(y_test,y_pred,target_names=cancer.target_names)) #網格搜索與交叉驗證相結合的邏輯回歸算法分類:
from sklearn.model_selection import GridSearchCV,KFold
params_lgr={'C':[0.01,0.1,1,10,100],'max_iter':[100,200,300],'solver':['liblinear','lbfgs']}
kf=KFold(n_splits=5,shuffle=False)grid_search_lgr=GridSearchCV(lgr,params_lgr,cv=kf)
grid_search_lgr.fit(X_train,y_train)
grid_search_y_pred=grid_search_lgr.predict(X_test)
print("Accuracy:",grid_search_lgr.score(X_test,y_test))
print("best params:",grid_search_lgr.best_params_)

在這里插入圖片描述

2、支持向量用于分類

#加載數據集
from sklearn.datasets import load_breast_cancer
cancer=load_breast_cancer()#對數據集進行預處理,實現數據標準化
from sklearn.preprocessing import StandardScaler
X=StandardScaler().fit_transform(cancer.data)
y=cancer.target#將數據集劃分為訓練集和測試集(要求測試集占25%,隨機狀態random state設置為33)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33) #創建模型估計器estimator
from sklearn.svm import SVC
svc=SVC()#用訓練集訓練模型估計器estimator
svc.fit(X_train,y_train)#用模型估計器對測試集數據做預測
y_pred=svc.predict(X_test)#對模型估計器的學習效果進行評價
#最簡單的評估方法:就是調用估計器的score(),該方法的兩個參數要求是測試集的特征矩陣和標簽向量
print("測試集的分類準確率為:",svc.score(X_test,y_test))
from sklearn import metrics
#對于多分類問題,還可以使用metrics子包中的classification_report
print(metrics.classification_report(y_test,y_pred,target_names=cancer.target_names))#網格搜索與交叉驗證相結合的SVM算法分類:
from sklearn.model_selection import GridSearchCV,KFold
params_svc={'C':[0.1,1,10],'gamma':[0.1,1,10],'kernel':['linear','rbf']}
kf=KFold(n_splits=5,shuffle=False)
grid_search_svc=GridSearchCV(svc,params_svc,cv=kf)
grid_search_svc.fit(X_train,y_train)
grid_search_y_pred=grid_search_svc.predict(X_test)
print("Accuracy:",grid_search_svc.score(X_test,y_test))
print("best params:",grid_search_svc.best_params_)

在這里插入圖片描述

3、kNN用于分類

#加載數據集
from sklearn.datasets import load_breast_cancer
cancer=load_breast_cancer()#對數據集進行預處理,實現數據標準化
from sklearn.preprocessing import StandardScaler
X=StandardScaler().fit_transform(cancer.data)
y=cancer.target#將數據集劃分為訓練集和測試集(要求測試集占25%,隨機狀態random state設置為33)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33) #創建模型估計器estimator
from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier()#用訓練集訓練模型估計器estimator
knn.fit(X_train,y_train)#用模型估計器對測試集數據做預測
y_pred=knn.predict(X_test)#對模型估計器的學習效果進行評價
#最簡單的評估方法:就是調用估計器的score(),該方法的兩個參數要求是測試集的特征矩陣和標簽向量
print("測試集的分類準確率為:",knn.score(X_test,y_test))
from sklearn import metrics
#對于多分類問題,還可以使用metrics子包中的classification_report
print(metrics.classification_report(y_test,y_pred,target_names=cancer.target_names))#網格搜索與交叉驗證相結合的kNN算法分類:
from sklearn.model_selection import GridSearchCV,KFold
params_knn={'algorithm':['auto','ball_tree','kd_tree','brute'],'n_neighbors':range(3,10,1),'weights':['uniform','distance']}
kf=KFold(n_splits=5,shuffle=False)
grid_search_knn=GridSearchCV(knn,params_knn,cv=kf)
grid_search_knn.fit(X_train,y_train)
grid_search_y_pred=grid_search_knn.predict(X_test)
print("Accuracy:",grid_search_knn.score(X_test,y_test))
print("best params:",grid_search_knn.best_params_)

在這里插入圖片描述

四、實驗體會

??在本次實驗中,我使用了Scikit-Learn庫中的邏輯回歸、支持向量機(SVM)和k最近鄰(kNN)算法對乳腺癌數據集進行分類,并對每種算法的分類性能進行了評估。隨后,我嘗試使用網格搜索和交叉驗證來找出每種算法的較優超參數,以進一步提升其分類性能。
??首先,我加載了乳腺癌數據集,并將其劃分為訓練集和測試集。然后,我分別使用邏輯回歸、SVM和kNN算法進行訓練,并在測試集上進行評估。評估指標包括準確率、精確率、召回率和F1-score等。通過這些指標,我能夠了解每種算法在乳腺癌數據集上的分類性能。
??接著,我嘗試使用網格搜索(Grid Search)和交叉驗證(Cross Validation)來找出每種算法的較優超參數。網格搜索是一種通過在指定的超參數空間中搜索最佳參數組合來優化模型的方法。而交叉驗證則是一種評估模型性能和泛化能力的方法,它將數據集分成多個子集,在每個子集上輪流進行訓練和測試,從而得到更穩健的性能評估結果。
??在進行網格搜索和交叉驗證時,我根據每種算法的參數范圍設置了不同的參數組合,并使用交叉驗證來評估每種參數組合的性能。最終,我選擇了在交叉驗證中性能最優的參數組合作為最終的超參數,并將其用于重新訓練模型。
??通過這次實驗,我學到了如何使用Scikit-Learn庫中的機器學習算法進行分類任務,并了解了如何通過網格搜索和交叉驗證來優化算法的超參數,提升其分類性能。同時,我也意識到了在實際應用中,選擇合適的算法和調優超參數對于獲得良好的分類效果至關重要。這次實驗為我提供了寶貴的實踐經驗,對我的機器學習學習之旅有著重要的意義。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15389.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15389.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15389.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python】【Scrapy 爬蟲】理解HTML和XPath

為了從網頁中抽取信息,必須對其結構有更多了解。我們快速瀏覽HTML、HTML的樹狀表示,以及在網頁上選取信息的一種方式XPath。 HTML、DOM樹表示以及XPath 互聯網是如何工作的? 當兩臺電腦需要通信的時候,你必須要連接他們&#xff…

Android Studio實現MQTT協議的連接

1添加依賴 在項目中找到下圖文件 打開文件 如下 plugins {alias(libs.plugins.android.application) }android {namespace "com.example.mqtt_04"compileSdk 34defaultConfig {applicationId "com.example.mqtt_04"minSdk 27targetSdk 34versionCo…

樹的層序遍歷,平衡二叉樹,以及反轉二叉樹

一、樹的層序遍歷 層序遍歷的實現: 1.依賴于隊列的數據結構 2.核心怎么實現: 1)創建一個隊列的容器對象。 2)判斷根節點是否為空,不為空則添加根節點到隊列中。 3)遍歷是一個循環性的工作,寫…

小紅書無限加群腳本無需ROOT【使用簡單無教程】

小紅書無限加群腳本無需ROOT,包含了對應的小紅書版本【使用簡單無教程】 鏈接:https://pan.baidu.com/s/1HkLhahmHDFMKvqCC3Q3haA?pwd6hzf 提取碼:6hzf

【Vue】computed 和 methods 的區別

概述 在使用時,computed 當做屬性使用,而 methods 則當做方法調用computed 可以具有 getter 和 setter,因此可以賦值,而 methods 不行computed 無法接收多個參數,而 methods 可以computed 具有緩存,而 met…

Stable Diffusion教程:從入門到精通

Stable Diffusion是一種基于深度學習的圖像生成技術,能夠生成高質量的圖像,廣泛應用于藝術創作、廣告設計和游戲開發等領域。本教程將詳細介紹Stable Diffusion的基礎知識、安裝和配置方法,以及如何使用它進行圖像生成。 1. 什么是Stable Di…

Python函數、類和方法

大家好,當涉及到編寫可維護、可擴展且易于測試的代碼時,Python提供了一些強大的工具和概念,其中包括函數、類和方法。這些是Python編程中的核心要素,可以幫助我們構建高效的測試框架和可靠的測試用例。 本文將探討Python中的函數、…

大語言模型的工程技巧(三)——分布式計算

相關說明 這篇文章的大部分內容參考自我的新書《解構大語言模型:從線性回歸到通用人工智能》,歡迎有興趣的讀者多多支持。 本文將討論如何利用多臺機器進行神經網絡的分布式訓練。利用多臺機器來加速大語言模型的訓練,是其獲得成功的重要原…

BUUCTF靶場[Web] [極客大挑戰 2019]Havefun1、[HCTF 2018]WarmUp1、[ACTF2020 新生賽]Include

[web][極客大挑戰 2019]Havefun1 考點:前端、GET傳參 點開網址,發現是這個界面 點擊界面沒有回顯,老規矩查看源代碼,看到以下代碼 代碼主要意思為: 用get傳參,將所傳的參數給cat,如果catdog…

揭秘Spring Bean的生命脈搏:深度剖析構造方法的推斷藝術

1. 引言 在Spring框架中,Bean的生命周期是一個至關重要的概念。從Bean的創建、初始化到銷毀,每一個階段都承載著框架與用戶代碼的交互。而在Bean的創建階段,構造方法的推斷顯得尤為重要。本文將從源碼層面深入剖析Spring是如何推斷并選擇構造…

程序員做副業項目,別把事情復雜化

賺錢,別把簡單的事情復雜化 不要把簡單的事情復雜化。在大多數情況下,你并不需要一個應用程序、一個小程序、一個公眾號、一個微商城、編寫深度文章、建立一個社群,甚至不需要所謂的個人品牌、IP或運營技巧。 你只需要一個裝滿5000個&#…

Linux基礎(五):常用基本命令

從本節開始,我們正式進入Linux的學習,通過前面的了解,我們知道我們要以命令的形式使用操作系統(使用操作系統提供的各類命令,以獲得字符反饋的形式去使用操作系統。),因此,我們是很有…

python將多個音頻文件與一張圖片合成視頻

代碼中m4a可以換成mp3,圖片和音頻放同一目錄,圖片名image.jpg,多線程max_workers可以根據CPU核心數量修改。 import os import subprocess import sys import concurrent.futures import ffmpeg def get_media_duration(media_path): probe ffmp…

Linkis踩坑記錄

從WeDataSphere的docker鏡像中把代碼和配置拷貝到普通環境運行,結果linkis提交任務總是報錯: Failed to execute task TaskID_1_otJobI d_astJob_0_codeExec_0 org.apache.linkis.orchestrator.ecm.exception.ECMPluginErrorException: errCode: 12003 …

【全開源】點餐小程序系統源碼(ThinkPHP+FastAdmin+UniApp)

基于ThinkPHPFastAdminUniApp開發的點餐微信小程序,類似肯德基,麥當勞,喜茶等小程序多店鋪模式,支持子商戶模式,提供全部前后臺無加密源代碼和數據庫,支持私有化部署。 革新餐飲行業的智慧點餐解決方案 一…

【vue-6】監聽

一、監聽watch 完整示例代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…

【MATLAB源碼-第213期】基于matlab的16QAM調制解調系統軟硬判決對比仿真,輸出誤碼率曲線對比圖。

操作環境&#xff1a; MATLAB 2022a 1、算法描述 一、16QAM調制原理 在16QAM&#xff08;16 Quadrature Amplitude Modulation&#xff09;調制中&#xff0c;一個符號表示4個比特的數據。這種調制方式結合了幅度調制和相位調制&#xff0c;能夠在相同的頻譜資源下傳輸更多…

【Java基礎】IO流(5) —— 序列流、內存流

【Java基礎】IO流(1) —— 簡介 【Java基礎】IO流(2) —— 字符流 【Java基礎】IO流(3) —— 字節流 【Java基礎】IO流(4) —— 轉換流、打印流 【Java基礎】IO流(5) —— 序列流、內存流 【Java基礎】IO流(6) —— 隨機訪問文件流、數據流 序列流 SequenceInputStream 序列…

EEGLAB的相關使用

目錄 概念 1.安裝EEGLAB 2.文件實例演示 導入數據集處理 &#xff08;1&#xff09;導入數據集 &#xff08;2&#xff09;畫圖 &#xff08;3&#xff09; 修改并存儲數據集 &#xff08;4&#xff09; 保存數據集 &#xff08;5&#xff09; 刪除數據集 &#xff0…

技術前沿 |【BLIP:統一理解和生成的自舉多模態模型研究】

BLIP&#xff1a;統一理解和生成的自舉多模態模型研究 摘要引言一、BLIP模型概述二、 BLIP模型在多模態任務中的應用三、總結 摘要 本文介紹了BLIP&#xff08;Bootstrapping Language-Image Pre-training&#xff09;模型&#xff0c;一個前沿的多模態模型&#xff0c;通過自…