day10 python機器學習全流程實踐

在機器學習的實踐中,數據預處理與模型構建是極為關鍵的環節。本文將回顧數據預處理的全流程,并基于處理后的數據完成簡單的機器學習建模與評估,暫不涉及復雜的調參過程。

一、預處理流程回顧

機器學習的成功,很大程度上依賴于高質量的數據。以下是數據預處理的標準流程:

  1. 導入庫:引入必要的 Python 庫,用于數據處理、分析、可視化以及建模。
  2. 讀取數據與理解:讀取數據集,通過info()head()方法初步了解數據的基本信息與結構。
  3. 缺失值處理:識別并處理數據中的缺失值。
  4. 異常值處理:檢測并處理異常數據點。
  5. 離散值處理:將離散型數據轉換為適合模型處理的格式。
  6. 特征工程:包括特征縮放、衍生新特征以及特征選擇等操作。
  7. 劃分數據集:將數據劃分為訓練集和測試集,用于模型訓練與評估。

1.1 導入所需的包

import pandas as pd  # 用于數據處理和分析,可處理表格數據
import numpy as np   # 用于數值計算,提供高效的數組操作
import matplotlib.pyplot as plt  # 用于繪制各種類型的圖表
import seaborn as sns  # 基于matplotlib的高級繪圖庫,能繪制更美觀的統計圖形# 設置中文字體(解決中文顯示問題)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系統常用黑體字體
plt.rcParams['axes.unicode_minus'] = False    # 正常顯示負號

1.2 查看數據信息

data = pd.read_csv('data.csv')    # 讀取數據
print("數據基本信息:")
data.info()
print("\n數據前5行預覽:")
print(data.head())

數據基本信息

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7500 entries, 0 to 7499
Data columns (total 18 columns):#   Column                        Non-Null Count  Dtype  
---  ------                        --------------  -----  0   Id                            7500 non-null   int64  1   Home Ownership                7500 non-null   object 2   Annual Income                 5943 non-null   float643   Years in current job          7129 non-null   object 4   Tax Liens                     7500 non-null   float645   Number of Open Accounts       7500 non-null   float646   Years of Credit History       7500 non-null   float647   Maximum Open Credit           7500 non-null   float648   Number of Credit Problems     7500 non-null   float649   Months since last delinquent  3419 non-null   float6410  Bankruptcies                  7486 non-null   float6411  Purpose                       7500 non-null   object 12  Term                          7500 non-null   object 13  Current Loan Amount           7500 non-null   float6414  Current Credit Balance        7500 non-null   float6415  Monthly Debt                  7500 non-null   float6416  Credit Score                  5943 non-null   float6417  Credit Default                7500 non-null   int64  
dtypes: float64(12), int64(2), object(4)
memory usage: 1.0+ MB

數據前 5 行預覽

   Id Home Ownership  Annual Income Years in current job  Tax Liens  \
0   0       Own Home       482087.0                  NaN        0.0   
1   1       Own Home      1025487.0            10+ years        0.0   
2   2  Home Mortgage       751412.0              8 years        0.0   
3   3       Own Home       805068.0              6 years        0.0   
4   4           Rent       776264.0              8 years        0.0   Number of Open Accounts  Years of Credit History  Maximum Open Credit  \
0                     11.0                     26.3             685960.0   
1                     15.0                     15.3            1181730.0   
2                     11.0                     35.0            1182434.0   
3                      8.0                     22.5             147400.0   
4                     13.0                     13.6             385836.0   Number of Credit Problems  Months since last delinquent  Bankruptcies  \
0                        1.0                           NaN           1.0   
1                        0.0                           NaN           0.0   
2                        0.0                           NaN           0.0   
3                        1.0                           NaN           1.0   
4                        1.0                           NaN           0.0   Purpose        Term  Current Loan Amount  \
0  debt consolidation  Short Term           99999999.0   
1  debt consolidation   Long Term             264968.0   
2  debt consolidation  Short Term           99999999.0   
3  debt consolidation  Short Term             121396.0   
4  debt consolidation  Short Term             125840.0   Current Credit Balance  Monthly Debt  Credit Score  Credit Default  
0                 47386.0        7914.0         749.0               0  
1                394972.0       18373.0         737.0               1  
2                308389.0       13651.0         742.0               0  
3                 95855.0       11338.0         694.0               0  
4                 93309.0        7180.0         719.0               0  

1.3 缺失值處理

  • Annual Income:存在 1557 個缺失值,可根據 “Home Ownership” 等相關特征的平均收入進行填充。
  • Years in current job:存在 371 個缺失值,需先將字符串類型轉換為數值類型,再用眾數或中位數填充。
  • Months since last delinquent:缺失值較多(4081 個),可根據其對目標變量的影響程度,選擇多重填補法或直接刪除缺失行。
  • Credit Score:存在 1557 個缺失值,處理方式與 “Annual Income” 類似。

1.4 數據類型轉換

  • Years in current job:將字符串類型轉換為數值類型。
  • Home Ownership、Purpose、Term:根據特征性質,選擇獨熱編碼或標簽編碼。

1.5 異常值處理

對于數值型特征,如 “Annual Income” 和 “Current Loan Amount”,可通過箱線圖檢測異常值,并根據實際情況決定是否處理。

1.6 特征縮放

對數值型特征進行 Min-Max 標準化或 Z-score 標準化,統一特征的取值范圍。

1.7 特征工程

  • 衍生新特征:例如計算 “負債收入比”(Debt-to-Income Ratio)。
  • 特征選擇:通過相關性分析等方法,篩選與目標變量相關性高的特征。

二、數據預處理實操

2.1 處理 object 類型變量

# 篩選字符串變量 
discrete_features = data.select_dtypes(include=['object']).columns.tolist()
print(discrete_features)# 查看每個字符串變量的唯一值
for feature in discrete_features:print(f"\n{feature}的唯一值:")print(data[feature].value_counts())

處理結果

  • Home Ownership:進行標簽編碼
mapping = {'Own Home': 1,'Rent': 2,'Have Mortgage': 3,'Home Mortgage': 4
}data['Home Ownership']=data['Home Ownership'].map(mapping)
data.head()
  • Years in current job:進行標簽編碼
years_in_job_mapping = {'< 1 year': 1,'1 year': 2,'2 years': 3,'3 years': 4,'4 years': 5,'5 years': 6,'6 years': 7,'7 years': 8,'8 years': 9,'9 years': 10,'10+ years': 11
}
data['Years in current job'] = data['Years in current job'].map(years_in_job_mapping)
  • Purpose:進行獨熱編碼
data = pd.get_dummies(data, columns=['Purpose'])
# 將獨熱編碼后的bool類型轉換為數值
for col in data.columns:if 'Purpose' in col:data[col] = data[col].astype(int)
  • Term:進行 0-1 映射
term_mapping = {'Short Term': 0,'Long Term': 1
}
data['Term'] = data['Term'].map(term_mapping)
data.rename(columns={'Term': 'Long Term'}, inplace=True)

2.2 處理數值型變量

# 篩選數值型特征
continuous_features = data.select_dtypes(include=['int64', 'float64']).columns.tolist()# 用中位數填補缺失值
for feature in continuous_features:median_value = data[feature].median()data[feature].fillna(median_value, inplace=True)

處理后的數據信息:

data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7500 entries, 0 to 7499
Data columns (total 32 columns):#   Column                        Non-Null Count  Dtype  
---  ------                        --------------  -----  0   Id                            7500 non-null   int64  1   Home Ownership                7500 non-null   int64  2   Annual Income                 7500 non-null   float643   Years in current job          7500 non-null   float644   Tax Liens                     7500 non-null   float645   Number of Open Accounts       7500 non-null   float646   Years of Credit History       7500 non-null   float647   Maximum Open Credit           7500 non-null   float648   Number of Credit Problems     7500 non-null   float649   Months since last delinquent  7500 non-null   float6410  Bankruptcies                  7500 non-null   float6411  Long Term                     7500 non-null   int64  12  Current Loan Amount           7500 non-null   float6413  Current Credit Balance        7500 non-null   float6414  Monthly Debt                  7500 non-null   float6415  Credit Score                  7500 non-null   float6416  Credit Default                7500 non-null   int64  17  Purpose_business loan         7500 non-null   int32  18  Purpose_buy a car             7500 non-null   int32  19  Purpose_buy house             7500 non-null   int32  20  Purpose_debt consolidation    7500 non-null   int32  21  Purpose_educational expenses  7500 non-null   int32  22  Purpose_home improvements     7500 non-null   int32  23  Purpose_major purchase        7500 non-null   int32  24  Purpose_medical bills         7500 non-null   int32  25  Purpose_moving                7500 non-null   int32  26  Purpose_other                 7500 non-null   int32  27  Purpose_renewable energy      7500 non-null   int32  28  Purpose_small business        7500 non-null   int32  29  Purpose_take a trip           7500 non-null   int32  30  Purpose_vacation              7500 non-null   int32  31  Purpose_wedding               7500 non-null   int32  
dtypes: float64(13), int32(15), int64(4)
memory usage: 1.4 MB

三、機器學習模型建模與評估

3.1 數據劃分

from sklearn.model_selection import train_test_split
X = data.drop(['Credit Default'], axis=1)  # 特征
y = data['Credit Default']  # 標簽
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)print(f"訓練集形狀: {X_train.shape}, 測試集形狀: {X_test.shape}")

結果

訓練集形狀: (6000, 31), 測試集形狀: (1500, 31)

3.2 模型訓練與評估

使用多種常見的分類模型進行訓練與評估,包括 SVM、KNN、邏輯回歸、樸素貝葉斯、決策樹、隨機森林、XGBoost 和 LightGBM。

from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
import xgboost as xgb
import lightgbm as lgb
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, classification_report, confusion_matrix
import warnings
warnings.filterwarnings("ignore")# SVM模型
svm_model = SVC(random_state=42)
svm_model.fit(X_train, y_train)
svm_pred = svm_model.predict(X_test)
print("\nSVM 分類報告:")
print(classification_report(y_test, svm_pred))
print("SVM 混淆矩陣:")
print(confusion_matrix(y_test, svm_pred))
print("SVM 模型評估指標:")
print(f"準確率: {accuracy_score(y_test, svm_pred):.4f}")
print(f"精確率: {precision_score(y_test, svm_pred):.4f}")
print(f"召回率: {recall_score(y_test, svm_pred):.4f}")
print(f"F1 值: {f1_score(y_test, svm_pred):.4f}")# KNN模型
knn_model = KNeighborsClassifier()
knn_model.fit(X_train, y_train)
knn_pred = knn_model.predict(X_test)
print("\nKNN 分類報告:")
print(classification_report(y_test, knn_pred))
print("KNN 混淆矩陣:")
print(confusion_matrix(y_test, knn_pred))
print("KNN 模型評估指標:")
print(f"準確率: {accuracy_score(y_test, knn_pred):.4f}")
print(f"精確率: {precision_score(y_test, knn_pred):.4f}")
print(f"召回率: {recall_score(y_test, knn_pred):.4f}")
print(f"F1 值: {f1_score(y_test, knn_pred):.4f}")# 邏輯回歸模型
logreg_model = LogisticRegression(random_state=42)
logreg_model.fit(X_train, y_train)
logreg_pred = logreg_model.predict(X_test)
print("\n邏輯回歸 分類報告:")
print(classification_report(y_test, logreg_pred))
print("邏輯回歸 混淆矩陣:")
print(confusion_matrix(y_test, logreg_pred))
print("邏輯回歸 模型評估指標:")
print(f"準確率: {accuracy_score(y_test, logreg_pred):.4f}")
print(f"精確率: {precision_score(y_test, logreg

@浙大疏錦行

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

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

相關文章

4月28號

初認web前端: web標準: HTML:

【Linux系統】systemV共享內存

system V共享內存 在Linux系統中&#xff0c;共享內存是一種高效的進程間通信&#xff08;IPC&#xff09;機制&#xff0c;它允許兩個或者多個進程共享同一塊物理內存區域&#xff0c;這些進程可以將這塊區域映射到自己的虛擬地址空間中。 共享內存區是最快的IPC形式。一旦這…

(七)RestAPI 毛子(Http 緩存/樂觀鎖/Polly/Rate limiting/異步大文件上傳)

文章目錄 項目地址一、Http Cache1.1 服務注冊1.2 Validation with ETag1. 添加ETagMiddleware中間件2. 創建內存ETag存儲器3. 服務注冊4. 測試二、使用ETag實現樂觀鎖2.1 添加樂觀鎖方法2.2 修改Controller2.3 測試樂觀鎖三、Rate Limiting3.1 添加速率控制服務1. 在Program里…

2025.4.26_STM32_SPI

1.SPI簡介 2.硬件電路 所有SPI設備的SCK(時鐘)、MOSI(主機輸出從機輸入)、MISO(主機輸入從機輸出)分別連在一起。SCK線只能被主機控制&#xff0c;和I2C相同。 主機另外引出多條SS控制線&#xff0c;分別接到各從機的SS引腳 (SS不用的時候為高電平&#xff0c;當主機需要選中某…

JAVA:單例模式

單例模式是設計模式之一 設計模式&#xff0c;就像古代打仗&#xff0c;我們都聽過孫子兵法&#xff0c;把計謀概括下來弄成一種模式&#xff0c;形成一種套路。 軟件開發中也有很多場景&#xff0c;多數類似的問題場景&#xff0c;解決方案就形成固定的模式&#xff0c;單例…

腦機接口:重塑人類未來的神經增強革命

引言 人類對大腦的探索從未停止&#xff0c;而腦機接口&#xff08;Brain-Computer Interface, BCI&#xff09;的崛起&#xff0c;正在將科幻電影中的“意念操控”變為現實。 這項技術通過解碼腦電信號&#xff0c;實現人腦與外部設備的直接交互&#xff0c;不僅為醫療康復帶來…

從SOA到微服務:架構演進之路與實踐示例

一、架構演進背景 在軟件開發領域&#xff0c;架構風格隨著業務需求和技術發展不斷演進。從早期的單體架構&#xff0c;到面向服務架構(SOA)&#xff0c;再到如今的微服務架構&#xff0c;每一次變革都是為了解決當時面臨的核心問題。 二、SOA架構解析 2.1 SOA核心概念 SOA&…

可靈AI 2.0上線:重新定義AI創作?好萊塢級特效觸手可及

2025年4月15日&#xff0c;快手正式發布可靈AI 2.0&#xff0c;這款被譽為“讓好萊塢特效師顫抖”的AI工具&#xff0c;以物理引擎級動態生成和電影語言自由操控兩大核心技術&#xff0c;徹底顛覆了內容創作的想象邊界。上線24小時內&#xff0c;全球用戶已用它生成超過100萬條…

Mysql存儲引擎、鎖機制

Mysql存儲引擎 InnoDB?&#xff08;MySQL 5.5 及以后版本中的默認存儲引擎&#xff09; ??事務支持??&#xff1a;支持 ??ACID 事務??&#xff0c;適合需要高可靠性的場景&#xff08;如支付、訂單&#xff09;。 ??鎖機制??&#xff1a;默認使用 ??行級鎖??…

飛蛾撲火算法優化+Transformer四模型回歸打包(內含MFO-Transformer-LSTM及單獨模型)

飛蛾撲火算法優化Transformer四模型回歸打包&#xff08;內含MFO-Transformer-LSTM及單獨模型&#xff09; 目錄 飛蛾撲火算法優化Transformer四模型回歸打包&#xff08;內含MFO-Transformer-LSTM及單獨模型&#xff09;預測效果基本介紹程序設計參考資料 預測效果 基本介紹 …

音視頻開發---視頻編碼基礎

一、視頻編碼的必要性 1. 存儲與傳輸成本高 未經編碼壓縮的原始視頻的數據量極大,例如:一般電影的亮度信號采樣頻率為13.5MHz;色度信號的頻帶通常為亮度信號的一半或更少,為6.75MHz或3.375MHz。以4:2:2的采樣頻率為例,Y信號采用13.5MHz,色度信號U和V采用6.75MHz采樣,…

手動安裝OpenSSL1.1.1

根據報錯信息 Could not build the ssl module! Python requires a OpenSSL 1.1.1 or newer&#xff0c;說明當前系統中的 OpenSSL 版本低于 1.1.1&#xff0c;或者 Python 編譯時未找到符合要求的 OpenSSL 庫。以下是分步解決方案&#xff1a; 1. 檢查當前 OpenSSL 版本 首先…

[原創](現代Delphi 12指南):[macOS 64bit App開發]: 跨平臺開發同樣支持retain()引用計數器處理.

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…

從 “制造” 到 “品牌”:官網建設助力中國企業突圍東南亞

在全球產業鏈重構與區域經濟一體化的浪潮下&#xff0c;中國企業出海已從“戰略選項”升級為“生存剛需”。東南亞市場因其地理鄰近性、人口紅利及政策開放性&#xff0c;成為許多中企出海的“首站試驗田”。然而&#xff0c;如何在這一文化多元、競爭激烈的市場中建立品牌認知…

iPhone鬧鐘無法識別調休致用戶遲到,蘋果客服稱會記錄反饋

iPhone鬧鐘無法識別調休致用戶遲到&#xff0c;蘋果客服稱會記錄反饋 基于 6 個來源 因“五一”勞動節調休&#xff0c;4月27日&#xff08;周日&#xff09;本應上班&#xff0c;不少iPhone用戶卻因鬧鐘未響遲到&#xff0c;“調休”“當蘋果鬧鐘遇到調休”話題登上熱搜。蘋…

Ubuntu 磁盤空間占用清理(寶塔)

目錄 前言1. 基本知識2. 實戰 前言 &#x1f91f; 找工作&#xff0c;來萬碼優才&#xff1a;&#x1f449; #小程序://萬碼優才/r6rqmzDaXpYkJZF 爬蟲神器&#xff0c;無代碼爬取&#xff0c;就來&#xff1a;bright.cn 本身自搭建了一個寶塔&#xff0c;突然一下子多了好些空…

杰理-安卓通過map獲取時間的時候,部分手機切換sbc和aac時候單耳無聲音

杰理-安卓通過map獲取時間的時候&#xff0c;部分手機切換sbc和aac時候單耳無聲音 #if USER_SUPPORT_PROFILE_MAPif(tws_api_get_role()0){ //主機才獲取&#xff0c;否則切換sbc 和 aac 的時候影響單耳無聲音user_send_cmd_prepare(USER_CTRL_MAP_READ_TIME,0,NULL);} #endif…

Android 進階開發:深入掌握 ProgressBar 的使用與高級技巧

一、前言 在 Android 開發中,ProgressBar 是一個非常常見且功能強大的控件,用于向用戶反饋操作的進度。雖然它的基礎用法簡單,但對于進階開發者來說,如何通過自定義動畫、插值器、樣式和邏輯控制來提升用戶體驗,是一個值得深入研究的方向。 本文將帶你從 基本使用入手,…

AGILE:開啟LLM Agent強化學習的創新框架

在大語言模型&#xff08;LLMs&#xff09;蓬勃發展的今天&#xff0c;基于LLMs構建的智能體成為研究熱點。但如何將各組件整合優化仍是難題。本文提出的AGILE框架給出了創新解法&#xff0c;它不僅統一多組件&#xff0c;還讓智能體性能超越GPT-4。想知道它是如何做到的嗎&…

java使用websocket推送消息到頁面

文章目錄 一、項目背景二、使用方式1.vue2javaspringpom.xmlRealtimeMonitor.vueMonitorTaskExe.javaWSTopicEnum.javaWServerHelper.java 2.vue3javaspringbootpom.xmlTopologyView.vueAlarmDataInquiryController.javaPushService.javaPushWebSocketHandler.javaWebSocketCon…