DAY 22 復習日

@浙大疏錦行復習日

仔細回顧一下之前21天的內容,沒跟上進度的同學補一下進度。

作業:

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

導入需要的庫

import pandas as pd  # 用于數據處理和分析,可處理表格數據。
import numpy as np  # 用于數值計算,提供了高效的數組操作。
import matplotlib.pyplot as plt  # 用于繪制各種類型的圖表
import seaborn as sns  # 基于matplotlib的高級繪圖庫,能繪制更美觀的統計圖形。
import warnings
from sklearn.preprocessing import StandardScaler,MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier #隨機森林分類器
from sklearn.metrics import  make_scorer,accuracy_score, precision_score, recall_score, f1_score # 用于評估分類器性能的指標
from sklearn.metrics import classification_report, confusion_matrix #用于生成分類報告和混淆矩陣
plt.rcParams['figure.dpi'] = 300
warnings.filterwarnings("ignore")
# 設置中文字體(解決中文顯示問題)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系統常用黑體字體
plt.rcParams['axes.unicode_minus'] = False  # 正常顯示負號
train = pd.read_csv('train.csv')  # 讀取數據
print(train.isnull().sum())

Survived 是否存活(label)
PassengerId (乘客ID)
Pclass(用戶階級):1 - 1st class,高等用戶;2 - 2nd class,中等用戶;3 - 3rd class,低等用戶;
Name(名字)
Sex(性別)
Age(年齡)
SibSp:描述了泰坦尼克號上與乘客同行的兄弟姐妹(Siblings)和配偶(Spouse)數目;
Parch:描述了泰坦尼克號上與乘客同行的家長(Parents)和孩子(Children)數目;
Ticket(船票號)
Fare(乘客費用)
Cabin(船艙)
Embarked(港口):用戶上船時的港口

PassengerId(乘客ID),Name(姓名),Ticket(船票信息)存在唯一性,三類意義不大,可以考慮不加入后續的分析

看一下訓練集有沒有缺失值

可以看到Age,Cabin,Embarked有缺失值

#對Age使用中位數填充
median_income = train['Age'].median()
train['Age'].fillna(median_income, inplace=True)mode = train['Embarked'].mode()
print(mode)
mode = mode[0]
# 眾數填補
train['Embarked'].fillna(mode, inplace=True)
# 檢查下是否有缺失值
print(train['Embarked'].isnull().sum())# 對 Cabin 列的缺失值填充為 'U'
train['Cabin'] = train['Cabin'].fillna('U')
print(train.isnull().sum())

現在已無缺失值

對數據做一下分析

對數據的認識是十分重要的,所以我們在這里進行對各個字段的分析,看看每個屬性與最后的Survived有什么關系
?

# 統計存活(Survived=1)和死亡(Survived=0)的人數
survived_counts = train['Survived'].value_counts()# 設置Seaborn風格
sns.set_style('ticks')# 配置中文字體,解決中文顯示異常問題
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 創建畫布,設置餅圖為正圓形(figsize設為正方形)
fig, ax = plt.subplots(figsize=(6, 6))# 繪制餅圖
survived_counts.plot.pie(ax=ax,autopct='%1.2f%%',  # 顯示百分比,保留2位小數labels=['死亡', '存活'],  # 自定義圖例標簽colors=['#FF6B6B', '#4ECDC4'],  # 自定義顏色,紅色代表死亡,青色代表存活startangle=90,  # 餅圖從正上方開始繪制textprops={'fontsize': 12}  # 設置百分比文字大小
)# 設置標題
ax.set_title('泰坦尼克號乘客存活比例', fontsize=14, fontweight='bold', pad=20)
ax.set_ylabel('')  # 移除默認的y軸標簽# 移除頂部和右側的邊框,讓圖表更簡潔
sns.despine(top=True, right=True)# 自動調整布局,防止元素重疊
plt.tight_layout()
plt.show()

在這次中,大約有38.38%的人存活了下來

分別看一下各屬性的基本分布情況,首先我們對適合利用圖形展示的屬性,通過繪圖的方式探查屬性的分布,分類型和數值型數據非常適合繪圖,所以這部分我們選擇乘客等級、性別、年齡、票價和登船港口五類屬性。

# 繪圖
fig = plt.figure()
# 乘客等級分布
plt.subplot2grid((2, 3), (0, 0))
train['Pclass'].value_counts().plot(kind='bar')
plt.ylabel(u"人數")
plt.xlabel(u'乘客等級')
plt.title(u'乘客等級分布')# 乘客性別分布
plt.subplot2grid((2, 3), (0, 1))
train['Sex'].value_counts().plot(kind='bar')
plt.ylabel(u"人數")
plt.xlabel(u'性別')
plt.title(u'乘客性別分布')# 乘客的年齡分布
plt.subplot2grid((2, 3), (0, 2))
train['Age'].hist()
plt.xlabel(u'年齡')
plt.title(u'乘客年齡分布')# 票價的分布
plt.subplot2grid((2, 3), (1, 0))
train['Fare'].hist()
plt.xlabel(u'票價')
plt.title(u'船票票價分布')# 箱線圖:票價的異常情況探查
plt.subplot2grid((2, 3), (1, 1))
train['Fare'].plot(kind='box')
plt.title(u'票價箱線圖')# 登船港口的分布情況
plt.subplot2grid((2, 3), (1, 2))
train['Embarked'].value_counts().plot(kind='bar')
plt.xlabel(u'登船口')
plt.title(u'登船口乘客量分布')
plt.show()

對于乘客等級、性別、登船口這類類別型的屬性,從柱狀圖上探查各類的分布情況,而對于年齡和票價這類連續型的屬性,我們可以選擇利用直方圖查看屬性的分布。從乘客等級分布的柱狀圖上,我們得到三等乘客人數最多,1等和2等的乘客相對較少(等級順序:1>2>3);在性別上,男性多于女性;在登船港口上,發現人數從高到低的港口分別是S>C>Q;看一下年齡的分布情況,我們發現20~30歲區間的乘客人數最多。

分析Sex
# 男性和女性存活情況
train[['Sex','Survived']].groupby('Sex').mean().plot.bar()survive_sex=train.groupby(['Sex','Survived'])['Survived'].count()print('女性存活率%.2f%%,男性存活率%.2f%%' %(survive_sex.loc['female',1]/survive_sex.loc['female'].sum()*100,survive_sex.loc['male',1]/survive_sex.loc['male'].sum()*100))
plt.tight_layout()
plt.show()

女性存活率74.20%,男性存活率18.89%

從數據結果可以得出,女性存活率是更高的

分析Age

g = sns.FacetGrid(train, col='Survived')
g.map(plt.hist, 'Age', bins=20)
plt.tight_layout()
plt.show()

從上圖可以看出,Age與survived是有關系的,因此需要作為特征保存

分析登陸港口

# 繪圖
plt.figure(figsize=(10, 8), dpi=100)# 乘客的等級和獲救情況的關系, 從結果上發現,1和2等級的乘客獲救率明顯高于3等級的乘客
p1 = plt.subplot(221)
Pclass_0 = train.loc[train['Survived'] == 0, 'Pclass'].value_counts()
Pclass_1 = train.loc[train['Survived'] == 1, 'Pclass'].value_counts()
df_pclass = pd.DataFrame({u'獲救':Pclass_1,u'未獲救':Pclass_0})
df_pclass.plot(kind='bar', ax=p1)
plt.title(u'不同等級乘客的獲救情況')# 同樣的方法,我們看一下性別和獲救情況的關系,結果非常明顯,女性比男性的獲救率高
p2 = plt.subplot(222)
Survived_m = train.loc[train['Sex'] == 'male', 'Survived'].value_counts()
Survived_f = train.loc[train['Sex'] == 'female', 'Survived'].value_counts()
df_sex = pd.DataFrame({u'男性':Survived_m, u'女性':Survived_f})
df_sex.plot(kind='bar', stacked=True, ax=p2)
plt.title(u'不同性別乘客的獲救情況')# 年齡劃分,劃分的標準:0~10為兒童;10~60為成年人;60及以上為老年人
p3 = plt.subplot(223)
bins = [min(train['Age']), 10, 60, max(train['Age'])]
bins_label = ['10歲及以下', '10-60歲', '60歲以上']
train['Age_cut'] = pd.cut(train['Age'], bins=bins, labels=bins_label)
print(train['Age_cut'].value_counts())
# 再對數據進行統計,結果發現兒童的獲救率明顯高于成年人和老年人
Age_0 = train.loc[train['Survived'] == 0, 'Age_cut'].value_counts()
Age_1 = train.loc[train['Survived'] == 1, 'Age_cut'].value_counts()
df_age = pd.DataFrame({u'獲救':Age_1, u'未獲救':Age_0})
df_age.plot(kind='bar', ax=p3)
plt.title(u'不同年齡階段乘客的獲救情況')
plt.show()

從圖中得的以下結論:等級高的乘客獲救率高(1>2>3);女性獲救率遠大于男性

其次,針對類別較多的SibSp和Parch屬性,我們直接統計各類的是否獲救情況。

# 堂兄弟妹個數以及父母子女個數的獲救情況統計
g1 = train.groupby(['SibSp', 'Survived'])
df_SibSp = pd.DataFrame(g1.count()['PassengerId'])
df_SibSp.rename(columns={'PassengerId':'count'}, inplace=True)
print(df_SibSp)g2 = train.groupby(['Parch', 'Survived'])
df_Parch = pd.DataFrame(g2.count()['PassengerId'])
df_Parch.rename(columns={'PassengerId': 'count'}, inplace=True)
print(df_Parch)

從結果中,我們發現,SibSp<3和Parch<3的情況下,獲救率更高。

分析Fare
print(train.loc[train['Fare'] == 0, 'Survived'].value_counts())
print(train.loc[train['Fare'] == max(train['Fare']), 'Survived'].value_counts())
plt.show()

結果發現,票價為0的15名乘客,僅有1人獲救,而票價最高的三名乘客,全部獲救,這說明了票價的高低對是否獲救存在影響

#刪除無用特征Name、Ticket 、Cabin
train= train.drop(columns=["Name","Ticket","Cabin"])#接下來對sex、embarked進行獨熱編碼
# 對Sex、Embarked進行獨熱編碼
train["Sex"] = pd.get_dummies(train["Sex"], dtype=int, drop_first=True)
train_data = pd.concat([train.drop("Embarked", axis=1),pd.get_dummies(train["Embarked"], prefix="Embarked", dtype=int, drop_first=False)], axis=1)# 查看數據
print(train_data.head(10))#對測試集進行處理
# 刪除無用特征Name、Ticket 、Cabin,補全缺失值
test = pd.read_csv('test.csv')  # 讀取數據
test = test.drop(columns=["Name", "Ticket", "Cabin"])# 連續
continuous_features = test.select_dtypes(include=['float64', 'int64']).columns.tolist()
# 離散
discrete_features = test.select_dtypes(exclude=['float64', 'int64']).columns.tolist()# 離散特征使用眾數進行補全
for feature in discrete_features:if test[feature].isnull().sum() > 0:mode_value = test[feature].mode()[0]test[feature].fillna(mode_value, inplace=True)# 連續變量用中位數進行補全
for feature in continuous_features:if test[feature].isnull().sum() > 0:median_value = test[feature].median()test[feature].fillna(median_value, inplace=True)
print(test.info())print(test.head(10))# 對Sex、Embarked進行獨熱編碼
test["Sex"] = pd.get_dummies(test["Sex"], dtype=int, drop_first=True)
test_data = pd.concat([test.drop("Embarked", axis=1),pd.get_dummies(test["Embarked"], prefix="Embarked", dtype=int, drop_first=False)], axis=1)# 查看數據
print(test_data.head(10))from sklearn.model_selection import train_test_split
X = train_data.drop(['Survived'], axis=1)  # 特征,axis=1表示按列刪除
y = train_data['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%測試集# 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))  # 打印混淆矩陣# 計算 SVM 評估指標,這些指標默認計算正類的性能
svm_accuracy = accuracy_score(y_test, svm_pred)
svm_precision = precision_score(y_test, svm_pred)
svm_recall = recall_score(y_test, svm_pred)
svm_f1 = f1_score(y_test, svm_pred)
print("SVM 模型評估指標:")
print(f"準確率: {svm_accuracy:.4f}")
print(f"精確率: {svm_precision:.4f}")
print(f"召回率: {svm_recall:.4f}")
print(f"F1 值: {svm_f1:.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))knn_accuracy = accuracy_score(y_test, knn_pred)
knn_precision = precision_score(y_test, knn_pred)
knn_recall = recall_score(y_test, knn_pred)
knn_f1 = f1_score(y_test, knn_pred)
print("KNN 模型評估指標:")
print(f"準確率: {knn_accuracy:.4f}")
print(f"精確率: {knn_precision:.4f}")
print(f"召回率: {knn_recall:.4f}")
print(f"F1 值: {knn_f1:.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))logreg_accuracy = accuracy_score(y_test, logreg_pred)
logreg_precision = precision_score(y_test, logreg_pred)
logreg_recall = recall_score(y_test, logreg_pred)
logreg_f1 = f1_score(y_test, logreg_pred)
print("邏輯回歸 模型評估指標:")
print(f"準確率: {logreg_accuracy:.4f}")
print(f"精確率: {logreg_precision:.4f}")
print(f"召回率: {logreg_recall:.4f}")
print(f"F1 值: {logreg_f1:.4f}")# 樸素貝葉斯
nb_model = GaussianNB()
nb_model.fit(X_train, y_train)
nb_pred = nb_model.predict(X_test)print("\n樸素貝葉斯 分類報告:")
print(classification_report(y_test, nb_pred))
print("樸素貝葉斯 混淆矩陣:")
print(confusion_matrix(y_test, nb_pred))nb_accuracy = accuracy_score(y_test, nb_pred)
nb_precision = precision_score(y_test, nb_pred)
nb_recall = recall_score(y_test, nb_pred)
nb_f1 = f1_score(y_test, nb_pred)
print("樸素貝葉斯 模型評估指標:")
print(f"準確率: {nb_accuracy:.4f}")
print(f"精確率: {nb_precision:.4f}")
print(f"召回率: {nb_recall:.4f}")
print(f"F1 值: {nb_f1:.4f}")# 決策樹
dt_model = DecisionTreeClassifier(random_state=42)
dt_model.fit(X_train, y_train)
dt_pred = dt_model.predict(X_test)print("\n決策樹 分類報告:")
print(classification_report(y_test, dt_pred))
print("決策樹 混淆矩陣:")
print(confusion_matrix(y_test, dt_pred))dt_accuracy = accuracy_score(y_test, dt_pred)
dt_precision = precision_score(y_test, dt_pred)
dt_recall = recall_score(y_test, dt_pred)
dt_f1 = f1_score(y_test, dt_pred)
print("決策樹 模型評估指標:")
print(f"準確率: {dt_accuracy:.4f}")
print(f"精確率: {dt_precision:.4f}")
print(f"召回率: {dt_recall:.4f}")
print(f"F1 值: {dt_f1:.4f}")# 隨機森林
rf_model = RandomForestClassifier(random_state=42)
rf_model.fit(X_train, y_train)
rf_pred = rf_model.predict(X_test)print("\n隨機森林 分類報告:")
print(classification_report(y_test, rf_pred))
print("隨機森林 混淆矩陣:")
print(confusion_matrix(y_test, rf_pred))rf_accuracy = accuracy_score(y_test, rf_pred)
rf_precision = precision_score(y_test, rf_pred)
rf_recall = recall_score(y_test, rf_pred)
rf_f1 = f1_score(y_test, rf_pred)
print("隨機森林 模型評估指標:")
print(f"準確率: {rf_accuracy:.4f}")
print(f"精確率: {rf_precision:.4f}")
print(f"召回率: {rf_recall:.4f}")
print(f"F1 值: {rf_f1:.4f}")# XGBoost
xgb_model = xgb.XGBClassifier(random_state=42)
xgb_model.fit(X_train, y_train)
xgb_pred = xgb_model.predict(X_test)print("\nXGBoost 分類報告:")
print(classification_report(y_test, xgb_pred))
print("XGBoost 混淆矩陣:")
print(confusion_matrix(y_test, xgb_pred))xgb_accuracy = accuracy_score(y_test, xgb_pred)
xgb_precision = precision_score(y_test, xgb_pred)
xgb_recall = recall_score(y_test, xgb_pred)
xgb_f1 = f1_score(y_test, xgb_pred)
print("XGBoost 模型評估指標:")
print(f"準確率: {xgb_accuracy:.4f}")
print(f"精確率: {xgb_precision:.4f}")
print(f"召回率: {xgb_recall:.4f}")
print(f"F1 值: {xgb_f1:.4f}")# LightGBM
lgb_model = lgb.LGBMClassifier(random_state=42)
lgb_model.fit(X_train, y_train)
lgb_pred = lgb_model.predict(X_test)print("\nLightGBM 分類報告:")
print(classification_report(y_test, lgb_pred))
print("LightGBM 混淆矩陣:")
print(confusion_matrix(y_test, lgb_pred))lgb_accuracy = accuracy_score(y_test, lgb_pred)
lgb_precision = precision_score(y_test, lgb_pred)
lgb_recall = recall_score(y_test, lgb_pred)
lgb_f1 = f1_score(y_test, lgb_pred)
print("LightGBM 模型評估指標:")
print(f"準確率: {lgb_accuracy:.4f}")
print(f"精確率: {lgb_precision:.4f}")
print(f"召回率: {lgb_recall:.4f}")
print(f"F1 值: {lgb_f1:.4f}")

SVM 分類報告:
? ? ? ? ? ? ? precision ? ?recall ?f1-score ? support

? ? ? ? ? ?0 ? ? ? 0.60 ? ? ?0.98 ? ? ?0.74 ? ? ? 105
? ? ? ? ? ?1 ? ? ? 0.67 ? ? ?0.05 ? ? ?0.10 ? ? ? ?74

? ? accuracy ? ? ? ? ? ? ? ? ? ? ? ? ? 0.60 ? ? ? 179
? ?macro avg ? ? ? 0.63 ? ? ?0.52 ? ? ?0.42 ? ? ? 179
weighted avg ? ? ? 0.62 ? ? ?0.60 ? ? ?0.48 ? ? ? 179

SVM 混淆矩陣:
[[103 ? 2]
?[ 70 ? 4]]
SVM 模型評估指標:
準確率: 0.5978
精確率: 0.6667
召回率: 0.0541
F1 值: 0.1000

KNN 分類報告:
? ? ? ? ? ? ? precision ? ?recall ?f1-score ? support

? ? ? ? ? ?0 ? ? ? 0.67 ? ? ?0.84 ? ? ?0.74 ? ? ? 105
? ? ? ? ? ?1 ? ? ? 0.64 ? ? ?0.41 ? ? ?0.50 ? ? ? ?74

? ? accuracy ? ? ? ? ? ? ? ? ? ? ? ? ? 0.66 ? ? ? 179
? ?macro avg ? ? ? 0.65 ? ? ?0.62 ? ? ?0.62 ? ? ? 179
weighted avg ? ? ? 0.65 ? ? ?0.66 ? ? ?0.64 ? ? ? 179

KNN 混淆矩陣:
[[88 17]
?[44 30]]
KNN 模型評估指標:
準確率: 0.6592
精確率: 0.6383
召回率: 0.4054
F1 值: 0.4959

邏輯回歸 分類報告:
? ? ? ? ? ? ? precision ? ?recall ?f1-score ? support

? ? ? ? ? ?0 ? ? ? 0.79 ? ? ?0.88 ? ? ?0.83 ? ? ? 105
? ? ? ? ? ?1 ? ? ? 0.79 ? ? ?0.68 ? ? ?0.73 ? ? ? ?74

? ? accuracy ? ? ? ? ? ? ? ? ? ? ? ? ? 0.79 ? ? ? 179
? ?macro avg ? ? ? 0.79 ? ? ?0.78 ? ? ?0.78 ? ? ? 179
weighted avg ? ? ? 0.79 ? ? ?0.79 ? ? ?0.79 ? ? ? 179

邏輯回歸 混淆矩陣:
[[92 13]
?[24 50]]
邏輯回歸 模型評估指標:
準確率: 0.7933
精確率: 0.7937
召回率: 0.6757
F1 值: 0.7299

樸素貝葉斯 分類報告:
? ? ? ? ? ? ? precision ? ?recall ?f1-score ? support

? ? ? ? ? ?0 ? ? ? 0.83 ? ? ?0.77 ? ? ?0.80 ? ? ? 105
? ? ? ? ? ?1 ? ? ? 0.70 ? ? ?0.77 ? ? ?0.74 ? ? ? ?74

? ? accuracy ? ? ? ? ? ? ? ? ? ? ? ? ? 0.77 ? ? ? 179
? ?macro avg ? ? ? 0.77 ? ? ?0.77 ? ? ?0.77 ? ? ? 179
weighted avg ? ? ? 0.78 ? ? ?0.77 ? ? ?0.77 ? ? ? 179

樸素貝葉斯 混淆矩陣:
[[81 24]
?[17 57]]
樸素貝葉斯 模型評估指標:
準確率: 0.7709
精確率: 0.7037
召回率: 0.7703
F1 值: 0.7355

決策樹 分類報告:
? ? ? ? ? ? ? precision ? ?recall ?f1-score ? support

? ? ? ? ? ?0 ? ? ? 0.78 ? ? ?0.79 ? ? ?0.79 ? ? ? 105
? ? ? ? ? ?1 ? ? ? 0.70 ? ? ?0.69 ? ? ?0.69 ? ? ? ?74

? ? accuracy ? ? ? ? ? ? ? ? ? ? ? ? ? 0.75 ? ? ? 179
? ?macro avg ? ? ? 0.74 ? ? ?0.74 ? ? ?0.74 ? ? ? 179
weighted avg ? ? ? 0.75 ? ? ?0.75 ? ? ?0.75 ? ? ? 179

決策樹 混淆矩陣:
[[83 22]
?[23 51]]
決策樹 模型評估指標:
準確率: 0.7486
精確率: 0.6986
召回率: 0.6892
F1 值: 0.6939

隨機森林 分類報告:
? ? ? ? ? ? ? precision ? ?recall ?f1-score ? support

? ? ? ? ? ?0 ? ? ? 0.84 ? ? ?0.87 ? ? ?0.85 ? ? ? 105
? ? ? ? ? ?1 ? ? ? 0.80 ? ? ?0.77 ? ? ?0.79 ? ? ? ?74

? ? accuracy ? ? ? ? ? ? ? ? ? ? ? ? ? 0.83 ? ? ? 179
? ?macro avg ? ? ? 0.82 ? ? ?0.82 ? ? ?0.82 ? ? ? 179
weighted avg ? ? ? 0.83 ? ? ?0.83 ? ? ?0.83 ? ? ? 179

隨機森林 混淆矩陣:
[[91 14]
?[17 57]]
隨機森林 模型評估指標:
準確率: 0.8268
精確率: 0.8028
召回率: 0.7703
F1 值: 0.7862

XGBoost 分類報告:
? ? ? ? ? ? ? precision ? ?recall ?f1-score ? support

? ? ? ? ? ?0 ? ? ? 0.83 ? ? ?0.84 ? ? ?0.83 ? ? ? 105
? ? ? ? ? ?1 ? ? ? 0.77 ? ? ?0.76 ? ? ?0.76 ? ? ? ?74

? ? accuracy ? ? ? ? ? ? ? ? ? ? ? ? ? 0.80 ? ? ? 179
? ?macro avg ? ? ? 0.80 ? ? ?0.80 ? ? ?0.80 ? ? ? 179
weighted avg ? ? ? 0.80 ? ? ?0.80 ? ? ?0.80 ? ? ? 179

XGBoost 混淆矩陣:
[[88 17]
?[18 56]]
XGBoost 模型評估指標:
準確率: 0.8045
精確率: 0.7671
召回率: 0.7568
F1 值: 0.7619
?

LightGBM 分類報告:
? ? ? ? ? ? ? precision ? ?recall ?f1-score ? support

? ? ? ? ? ?0 ? ? ? 0.82 ? ? ?0.85 ? ? ?0.84 ? ? ? 105
? ? ? ? ? ?1 ? ? ? 0.77 ? ? ?0.74 ? ? ?0.76 ? ? ? ?74

? ? accuracy ? ? ? ? ? ? ? ? ? ? ? ? ? 0.80 ? ? ? 179
? ?macro avg ? ? ? 0.80 ? ? ?0.80 ? ? ?0.80 ? ? ? 179
weighted avg ? ? ? 0.80 ? ? ?0.80 ? ? ?0.80 ? ? ? 179

LightGBM 混淆矩陣:
[[89 16]
?[19 55]]
LightGBM 模型評估指標:
準確率: 0.8045
精確率: 0.7746
召回率: 0.7432
F1 值: 0.7586

綜上比較幾種模型,感覺隨機森林更好一點,其實還能再調參或者其它的工作使得準確率更高一點
?

# 對測試集進行預測
test_pred = rf_model.predict(test)# 創建提交文件
submission = pd.DataFrame({'PassengerId': test['PassengerId'],  # 從測試數據中獲取乘客ID'Survived': test_pred  # 模型預測的結果
})# 保存為CSV文件
submission.to_csv('titanic_submission.csv', index=False)

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

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

相關文章

biocmanager安裝 庫 老是提示網絡連接錯誤 才嘗試各種辦法

您好&#xff0c;遇到 BioManager &#xff08;通常是 BiocManager&#xff09;安裝R包時提示網絡連接錯誤確實非常令人頭疼。這通常與R/RStudio的配置、網絡環境&#xff08;尤其是國內用戶&#xff09;或SSL證書問題有關。 請不要著急&#xff0c;我們可以按照從易到難的順序…

【開題答辯全過程】以 智能商品數據分析系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

解構復雜財務逆向業務:如何優雅地生成與管理負數單?

文章目錄一 核心復雜性二 關鍵設計模式&#xff1a;三 棘手場景與解決方案&#xff1a;1.分批合并處理&#xff1a;負數單需能智能拆分&#xff0c;精準沖銷多批次的正向單據。2.優先級問題&#xff1a;3.超額處理&#xff1a;系統應堅決攔截而非處理&#xff0c;防止資金損失和…

Android集成OpenCV4實例

Android集成OpenCV4分以下幾步驟&#xff1a; 使用Android Studio Giraffe | 2022.3.1創建一個Empty Views Activity空項目&#xff0c;包名為&#xff1a;com.example.andopencvdemo00 &#xff0c; 創建成功后&#xff0c;進行以下相關設置&#xff1a; 第一步&#xff1a;在…

npy可視化方法

npviewer 是一個應用程序&#xff0c;它允許您以熱圖的形式可視化 numpy 的 npy 文件中的數據。該應用程序根據不同的模式自動選擇適當的維度進行顯示。 根據不同的模式自動選擇適當的維度進行顯示支持不同格式的 numpy 數據的可視化&#xff0c;如 RGB 和灰度用戶友好的界面使…

【Cesium】介紹及基礎使用

文章目錄一、Cesium 介紹二、 使用1、引入 cesium2、Viewer 配置選項1. 基礎控件配置2. 場景與渲染配置3. 地形配置4. 天空與大氣效果3、坐標系系統3.1 地理坐標系3.2 笛卡爾空間直角坐標系3.3 屏幕坐標系4、Entity 實體4.1 簡介4.2 Entity 常見圖形類型Point 點Polyline 線Pol…

基于SpringBoot的運動服裝銷售系統【2026最新】

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

【嵌入式DIY實例-ESP32篇】-傾斜彈跳球游戲

傾斜彈跳球游戲 文章目錄 傾斜彈跳球游戲 1、MPU6050介紹 2、硬件準備與接線 3、代碼實現 在這個交互式 ESP32 Arduino 項目中,我們模擬了一個綠色球體在全彩 ST7789 170320 LCD 屏幕上彈跳,完全由 MPU6050 陀螺儀的運動控制。當你傾斜傳感器時,球體會呈現出逼真的物理運動,…

從spring MVC角度理解HTTP協議及Request-Response模式

什么是HTTP協議&#xff1f;HTTP協議&#xff08;HyperText Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;是一種通信規則&#xff0c;它定義了客戶端&#xff08;如瀏覽器、手機APP&#xff09; 和服務器 之間如何交換信息&#xff0c;是用于在萬維網&#xff08;…

江協科技STM32學習筆記補充之003 :STM32復位電路的詳細分析

電路作用與每個器件R1&#xff08;10 kΩ&#xff0c;上拉到 3V3&#xff09;讓 NRST 在無外力時保持高電平&#xff1d;不復位&#xff1b;同時與電容形成 RC&#xff0c;決定上電復位延時。阻值不能太小&#xff08;否則調試器或芯片復位驅動下拉電流太大&#xff09;&#x…

Spring Boot HTTP狀態碼詳解

Spring Boot HTTP狀態碼完全指南&#xff1a;從入門到精通 前言 在RESTful API開發中&#xff0c;HTTP狀態碼是與客戶端通信的重要橋梁。Spring Boot通過HttpStatus枚舉提供了完整的HTTP狀態碼支持。本文將深入解析這些狀態碼的含義、使用場景以及在Spring Boot中的最佳實踐。 …

怎樣讓外網計算機訪問局域網計算機?通過公網地址訪問不同內網服務的設置方法

局域網服務器提供公網訪問&#xff0c;或指定某些端口應用資源給外地訪問&#xff0c;都是常見跨網通信需求。在一些場景下&#xff0c;內部網絡中的服務器需要通過公網地址進行訪問&#xff0c;尤其是在沒有固定公網IP或需要在外部訪問時。為了解決這一問題&#xff0c;可以使…

Spring Boot啟動失敗從循環依賴到懶加載配置的深度排查指南

&#x1f49d;&#x1f49d;&#x1f49d;歡迎蒞臨我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 持續學習&#xff0c;不斷…

從零開始學大模型之大語言模型

大語言模型 4.1 什么是 LLM 在前三章&#xff0c;我們從 NLP 的定義與主要任務出發&#xff0c;介紹了引發 NLP 領域重大變革的核心思想——注意力機制與 Transformer 架構。隨著 Transformer 架構的橫空出世&#xff0c;NLP 領域逐步進入預訓練-微調范式&#xff0c;以 Tran…

如何將視頻從 iPhone 轉移到 Mac

將視頻從 iPhone 轉移到 Mac 是許多用戶常見的需求。無論你是想備份重要的視頻&#xff0c;還是希望在更大的屏幕上觀看&#xff0c;以下方法都能幫助你輕松完成。方法一&#xff1a;使用 iReaShare iPhone ManageriReaShare iPhone Manager 是一款功能強大的工具&#xff0c;可…

五、Docker 核心技術:容器數據持久化之數據卷

Docker 容器本身是無狀態且生命周期短暫的。當一個容器被刪除時&#xff0c;它在可寫層產生的所有數據都會隨之消失。這對于需要持久化存儲數據的應用 (如數據庫、日志系統、用戶上傳內容) 來說是不可接受的。為了解決這個問題&#xff0c;Docker 提供了多種數據持久化方案&…

前端視覺交互設計全解析:從懸停高亮到多維交互體系(含代碼 + 圖表)

在前端用戶體驗領域&#xff0c;視覺交互是連接用戶與產品的 “隱形橋梁”—— 它通過可視化信號傳遞操作意圖、反饋系統狀態&#xff0c;直接決定用戶對產品的感知。很多開發者對視覺交互的認知停留在 “鼠標懸停高亮”&#xff0c;但實際上&#xff0c;視覺交互是一個覆蓋 “…

從零打造商業級LLMOps平臺:開源項目LMForge詳解,助力多模型AI Agent開發!

最近&#xff0c;我發現了一個超級實用的開源項目——LMForge-End-to-End-LLMOps-Platform-for-Multi-Model-Agents&#xff08;以下簡稱LMForge&#xff09;。這個項目是一個端到端的LLMOps&#xff08;Large Language Model Operations&#xff09;平臺&#xff0c;專為多模型…

【C++練習】06.輸出100以內的所有素數

目錄輸出100以內的所有素數方法1&#xff1a;基礎判斷法方法2&#xff1a;埃拉托斯特尼篩法&#xff08;效率更高&#xff09;方法3&#xff1a;優化版篩法&#xff08;只考慮奇數&#xff09;方法4&#xff1a;使用STL算法方法5&#xff1a;遞歸實現總結&#xff1a; 輸出100以…

在開發中使用git rebase的場景

rebase介紹 一、背景 遠程倉庫有oh4w-dev和oh4k-dev兩個分支&#xff0c;oh4k-dev是基于oh4w-dev開發到80%的代碼新拉的分支&#xff1b;此后兩條分支同步開發&#xff0c;當oh4k-dev開發完成&#xff0c;oh4w-dev還在開發階段&#xff0c;oh4k-dev需要拉取到oh4w-dev自分出o…