python學習DAY22打卡

作業:

自行學習參考如何使用kaggle平臺,寫下使用注意點,并對下述比賽提交代碼

kaggle泰坦尼克號人員生還預測

import warnings
warnings.filterwarnings("ignore") #忽略警告信息
# 數據處理清洗包
import pandas as pd
import numpy as np
import random as rnd
# 可視化包
import seaborn as sns
import matplotlib.pyplot as plt
# 機器學習算法相關包
from sklearn.linear_model import LogisticRegression, Perceptron, SGDClassifier
# 設置中文字體(解決中文顯示問題)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系統常用黑體字體
plt.rcParams['axes.unicode_minus'] = False    # 正常顯示負號
data_train = pd.read_csv(r'train.csv')    #讀取訓練集數據
data_test = pd.read_csv(r'test.csv')    #讀取測試集數據
combine = [data_train, data_test] # 合并數據
#這只是放到一個列表,以便后續合并,現在還沒合并
print(data_train.isnull().sum())
print(data_test.isnull().sum())
#刪除無用特征 Ticket 
print("Before", data_train.shape, data_test.shape, combine[0].shape, combine[1].shape)
data_train = data_train.drop(['Ticket'], axis=1)
data_test = data_test.drop(['Ticket'], axis=1)
combine = [data_train, data_test]
print("After", data_train.shape, data_test.shape, combine[0].shape, combine[1].shape)# 轉換分類特征Sex
for dataset in combine:dataset['Sex'] = dataset['Sex'].map( {'female': 1, 'male': 0} ).astype(int)  #男性賦值為0,女性賦值為1,并轉換為整型數據
data_test.head()# 創建空數組
guess_ages = np.zeros((2,3))
guess_ages# 遍歷 Sex (0 或 1) 和 Pclass (1, 2, 3) 來計算六種組合的 Age 猜測值
for dataset in combine:# 第一個for循環計算每一個分組的Age預測值for i in range(0, 2):for j in range(0, 3):guess_df = dataset[(dataset['Sex'] == i) & \(dataset['Pclass'] == j+1)]['Age'].dropna()age_guess = guess_df.median()# 將隨機年齡浮點數轉換為最接近的 0.5 年齡(四舍五入)guess_ages[i,j] = int( age_guess/0.5 + 0.5 ) * 0.5# 第二個for循環對空值進行賦值        for i in range(0, 2):for j in range(0, 3):dataset.loc[ (dataset.Age.isnull()) & (dataset.Sex == i) & (dataset.Pclass == j+1),\'Age'] = guess_ages[i,j]dataset['Age'] = dataset['Age'].astype(int)
data_train.head()# Embarked: 僅2個缺失,用眾數填充
data_train['Embarked'].fillna(data_train['Embarked'].mode()[0], inplace=True)
data_test['Embarked'].fillna(data_test['Embarked'].mode()[0], inplace=True)
print(data_train.isnull().sum())
# Fare: 極少數缺失,用中位數填充
data_test['Fare'].fillna(data_test['Fare'].median(), inplace=True)# 姓名對預測生存率的影響較小,除非從中提取出有用的信息(如頭銜、家庭關系等)
data_train['Title'] = data_train['Name'].str.extract(' ([A-Za-z]+)\.', expand=False)
data_train['Title'] = data_train['Title'].replace(['Lady', 'Countess', 'Dr', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')
data_train['Title'] = data_train['Title'].replace('Mlle', 'Miss').replace('Ms', 'Miss').replace('Mme', 'Mrs')
data_test['Title'] = data_test['Name'].str.extract(' ([A-Za-z]+)\.', expand=False)
data_test['Title'] = data_test['Title'].replace(['Lady', 'Countess', 'Dr', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')
data_test['Title'] = data_test['Title'].replace('Mlle', 'Miss').replace('Ms', 'Miss').replace('Mme', 'Mrs')
# 計算家庭成員數量,家庭規模可能影響生存率
data_train['FamilySize'] = data_train['SibSp'] + data_train['Parch'] + 1
data_test['FamilySize'] = data_test['SibSp'] + data_test['Parch'] + 1
# 結合 FamilySize 創建新特征(如是否獨自乘船):
data_train['IsAlone'] = (data_train['FamilySize'] == 1).astype(int)
data_test['IsAlone'] = (data_test['FamilySize'] == 1).astype(int)
# 客艙甲板
# 提取客艙首字母(如果有的話)
data_train['Deck'] = data_train['Cabin'].str[0]
data_train['Deck'] = data_train['Deck'].fillna('Unknown') # 填充缺失值
data_test['Deck'] = data_test['Cabin'].str[0]
data_test['Deck'] = data_test['Deck'].fillna('Unknown') # 填充缺失值
# 刪除冗余特征
data_train.drop([ 'Name', 'Cabin'], axis=1, inplace=True)
data_test.drop(['Name', 'Cabin'], axis=1, inplace=True)
# 先篩選字符串變量
discrete_features = data_train.select_dtypes(include=['object']).columns.tolist()
print("離散變量:", discrete_features)  # 打印離散變量列名data_train.rename(columns={'Sex': 'isFemale'}, inplace=True)  # 重命名列名 -> 是否女性
data_test.rename(columns={'Sex': 'isFemale'}, inplace=True)  # 重命名列名
print(data_train['isFemale'].value_counts())  # 打印Sex列的取值分布
# 對embarked和deck進行獨熱編碼(無序)
data_train = pd.get_dummies(data_train, columns=['Embarked', 'Deck'], dtype=int, drop_first=True)
data_test = pd.get_dummies(data_test, columns=['Embarked', 'Deck'], dtype=int, drop_first=True)# 確保訓練集和測試集的列順序一致
# 排除標簽列'Survived',僅比較特征列
feature_columns = [col for col in data_train.columns if col != 'Survived']
missing_cols = set(feature_columns) - set(data_test.columns)
for col in missing_cols:data_test[col] = 0
# 按照訓練集特征列的順序排序測試集列
data_test = data_test[feature_columns]print(data_train.head())
title_mapping = {'Mr': 0,'Rare': 1,'Master': 2,'Miss': 3,'Mrs': 4
}
data_train['Title'] = data_train['Title'].map(title_mapping)
data_test['Title'] = data_test['Title'].map(title_mapping)
print(data_train['Title'].value_counts())  # 打印Title列的取值分布
# 對Age, Fare 進行標準化(均值為0,方差為1)
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler = StandardScaler()
data_train[['Age', 'Fare']] = scaler.fit_transform(data_train[['Age', 'Fare']])print(data_train.head())  # 打印前幾行數據
print(data_train.info())# 劃分一下測試集
from sklearn.model_selection import train_test_split
X = data_train.drop(['Survived'], axis=1)  # 特征,axis=1表示按列刪除
y = data_train['Survived'] # 標簽
# 按照8:2劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 80%訓練集,20%測試集# --- 1. 默認參數的隨機森林 ---
from sklearn.ensemble import RandomForestClassifier #隨機森林分類器
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 用于評估分類器性能的指標
from sklearn.metrics import classification_report, confusion_matrix #用于生成分類報告和混淆矩陣
import warnings #用于忽略警告信息
warnings.filterwarnings("ignore") # 忽略所有警告信息
import time
print("--- 1. 默認參數隨機森林 (訓練集 -> 測試集) ---")
start_time = time.time() # 記錄開始時間
rf_model = RandomForestClassifier(random_state=42)
rf_model.fit(X_train, y_train) # 在訓練集上訓練
rf_pred = rf_model.predict(X_test) # 在測試集上預測
end_time = time.time() # 記錄結束時間
print(f"訓練與預測耗時: {end_time - start_time:.4f} 秒")
print("\n默認隨機森林 在測試集上的分類報告:")
print(classification_report(y_test, rf_pred))
print("默認隨機森林 在測試集上的混淆矩陣:")
print(confusion_matrix(y_test, rf_pred))

@浙大疏錦行

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

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

相關文章

在 Ansys CFX Pre 中配置 RGP 表的分步指南

掌握在 Ansys CFX Pre 中設置 RGP 表的技巧,以優化仿真精度和效率。挑戰在計算流體動力學 (CFD) 領域,RGP(真實氣體屬性)表對于準確模擬流體在不同條件下的行為至關重要。這些表格提供了詳細的熱力學屬性&a…

C語言————原碼 補碼 反碼 (日漸清晰版)

本文的內容通下面這篇文章有著緊密的聯系,讀者可以選擇性閱讀 C語言————二、八、十、十六進制的相互轉換-CSDN博客 目錄 基本概念 原碼 反碼 補碼 轉換 數據的存儲方式 基本存儲單位 數據的計算方式 補碼的模運算原理 移位操作符 左移操作符 右移操…

函數-變量的作用域和生命周期

變量的作用域 引入問題 我們在函數設計的過程中,經常要考慮對于參數的設計,換句話說,我們需要考慮函數需要幾個參數,需要什么類型的參數,但我們并沒有考慮函數是否需要提供參數,如果說函數可以訪問到已定義…

Ansible在配置管理中的應用

Ansible是一個開源的配置管理和應用程序部署工具,它使用YAML語言編寫的Playbook來描述配置和應用部署過程。通過SSH協議與目標機器通信,Ansible可以實現批量操作,極大地提升了工作效率。核心功能Ansible的核心功能包括:配置管理&a…

【學習路線】Go語言云原生開發之路:從簡潔語法到微服務架構

一、Go語言基礎入門(1-2個月) (一)環境搭建與工具鏈Go環境安裝 官方安裝:從golang.org下載安裝包版本管理:g、gvm等Go版本管理工具環境變量:GOROOT、GOPATH、GOPROXY配置Go Modules:…

軟件工廠:推動新質生產力的組織躍遷

引言:軟件工廠的建設,不在于工具多,而在于理解深;不在于上線快,而在于體系穩。不僅是“看得見的流水線”,更是“看不見的組織變革”。在新質生產力的時代命題下,軟件工廠正成為連接創新與效率、…

9.0% 年增速驅動!全球自清潔滾輪拖布機器人市場2031年將邁向 946 百萬美元

自清潔滾輪拖布機器人是重要的智能清潔設備,采用滾筒式拖布結構,集掃拖功能,通過高速旋轉加壓擦洗地面,深度除污。其活水清潔系統可實時自清潔、回收污水,避免二次污染,提升清潔效率與效果,帶來…

新能源工廠的可視化碳中和實驗:碳足跡追蹤看板與能源調度策略仿真

摘要新能源工廠明明用著風電、光伏等清潔能源,碳排放數據卻依舊居高不下?某鋰電池廠耗費百萬升級設備,碳足跡卻難以精準追蹤,能源調度全靠經驗“拍腦袋”,導致成本飆升。而隔壁企業通過可視化碳中和實驗,碳…

數據結構自學Day13 -- 快速排序--“非遞歸利用棧實現”

一、快速排序回顧 快速排序本質上是**“分而治之”(Divide and Conquer)策略的遞歸應用。但遞歸其實就是函數棧的一種體現,因此我們也可以顯式使用棧(stack)來模擬遞歸過程**,從而實現非遞歸版本的快速排序…

前端數據庫:IndexedDB 基礎使用

前言 在現代 Web 開發中,隨著應用程序復雜度的增加,對本地存儲的需求也越來越高。雖然 localStorage 和 sessionStorage 可以滿足一些簡單的數據存儲需求,但當需要存儲大量結構化數據或進行復雜查詢時,它們就顯得力不從心了。這時…

Kubernetes深度解析:企業級容器編排平臺的核心實踐

引言:Kubernetes的戰略地位與核心價值在云原生技術生態中,??Kubernetes??已成為容器編排的事實標準。根據2023年全球云原生調查報告:全球??96%?? 的組織正在使用或評估Kubernetes企業生產環境Kubernetes采用率增長??400%??&#…

Netty中future和promise用法和區別

定義與概念 Future:表示一個異步操作的結果。它是只讀的,意味著你只能查看操作是否完成、是否成功、獲取結果或者異常等信息,但不能主動設置操作的結果。Promise:是 Future 的可寫擴展。它不僅可以像 Future 一樣查看操作結果&…

微算法科技(NASDAQ:MLGO)采用分布式哈希表優化區塊鏈索引結構,提高區塊鏈檢索效率

隨著區塊鏈技術的快速發展,其在各個領域的應用越來越廣泛。然而,區塊鏈數據的存儲和檢索效率問題一直是制約其發展的瓶頸之一。為了解決這一問題,微算法科技(NASDAQ:MLGO)采用了分布式哈希表(DHT)技術來優化…

Jmeter的元件使用介紹:(三)配置元件詳解01

Jmeter的配置元件有非常多,常用的有:信息頭管理器、Cookie管理器、用戶定義的變量、Http請求默認值、JDBC Connection Configuration、CSV 數據文件設置、計數器等,本文會對這些常用的配置元件一一介紹,還有其他很多配置元件&…

git 連接GitHub倉庫

一、安裝 git 包在官網下載 git 包二、通過SSH密鑰與GitHub遠程倉庫連接1. 檢查本地 SSH 密鑰是否存在ls -al ~/.ssh如果看到 id_rsa 和 id_rsa.pub,說明已有密鑰。2.如果沒有,生成新的 SSH 密鑰:ssh-keygen -t ed25519 -C "your_email…

如何通過AI掃描代碼中的問題

代碼質量其實在需求高壓,業務快速迭代的場景下往往容易被人忽視的問題,大家的編碼習慣和規范也經常會各有喜好,短期之內獲取看不出來什么問題,但長此以往就會發現,屎山逐步成型了,而線上代碼跑著往往就不想…

Java 大視界 -- Java 大數據機器學習模型在金融衍生品市場波動特征挖掘與交易策略創新中的應用(363)

Java 大視界 -- Java 大數據機器學習模型在金融衍生品市場波動特征挖掘與交易策略創新中的應用(363)引言:正文:一、Java 構建的金融數據處理架構1.1 多源異構數據實時融合1.2 新聞輿情與市場沖擊建模二、Java 驅動的波動特征挖掘與…

Cartographer安裝測試與模塊開發(三)--Cartographer在Gazebo仿真環境下的建圖以及建圖與定位階段問題(實車也可參考)

參數介紹之所以要首先介紹參數而不是實操,是因為大部分建圖失敗、漂移基本上都是參數設置錯誤引起的,或者說大部分都是TF存在問題,主要是坐標系Frame之間有沖突或者對不上等原因導致的,因此把參數放在前面介紹,了解了參…

uniapp nvue開發App 橫豎屏切換丟失上下文導致 setTimeout和clearTimeout報錯

報錯內容如下 [JS Framework] Failed to find taskCenter (35). [JS Framework] Failed to execute the callback function:TypeError: c.clearTimeout is not a function reportJSException >>>> exception function:__WEEX_CALL_JAVASCRIPT__, exception:JavaSc…

Mirauge3D 賦能:全自動建模,讓城市規劃與建筑設計擁有高分辨率實景三維模型

在數字化浪潮席卷各行各業的當下,高精度、多元化的空間數據已成為基礎測繪、智慧城市建設、自然資源管理等領域高質量發展的核心支撐。從城市交通網絡的智能規劃到國土空間的優化配置,從災害監測的精準預警到生態環境保護的科學決策,空間數據…