DAY 22 复习日-2025.9.3
·
复习日
仔细回顾一下之前21天的内容,没跟上进度的同学补一下进度。
作业:
自行学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码

作业
1. 数据预处理
import numpy as np
import pandas as pd
train_data = pd.read_csv('train.csv')
train_data.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
test_data = pd.read_csv('test.csv')
test_data.head()
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 892 3 Kelly, Mr. James male 34.5 0 0 330911 7.8292 NaN Q
1 893 3 Wilkes, Mrs. James (Ellen Needs) female 47.0 1 0 363272 7.0000 NaN S
2 894 2 Myles, Mr. Thomas Francis male 62.0 0 0 240276 9.6875 NaN Q
3 895 3 Wirz, Mr. Albert male 27.0 0 0 315154 8.6625 NaN S
4 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female 22.0 1 1 3101298 12.2875 NaN S
train_data.shape
(891, 12)
X_train = train_data.drop('Survived',axis=1)
y_train = train_data['Survived']
X_test = test_data
X_train
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
... ... ... ... ... ... ... ... ... ... ... ...
886 887 2 Montvila, Rev. Juozas male 27.0 0 0 211536 13.0000 NaN S
887 888 1 Graham, Miss. Margaret Edith female 19.0 0 0 112053 30.0000 B42 S
888 889 3 Johnston, Miss. Catherine Helen "Carrie" female NaN 1 2 W./C. 6607 23.4500 NaN S
889 890 1 Behr, Mr. Karl Howell male 26.0 0 0 111369 30.0000 C148 C
890 891 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.7500 NaN Q
X_train.isnull().sum()
PassengerId 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64
y_train.isnull().sum()
np.int64(0)
X_test.isnull().sum()
PassengerId 0
Pclass 0
Name 0
Sex 0
Age 86
SibSp 0
Parch 0
Ticket 0
Fare 1
Cabin 327
Embarked 0
dtype: int64
我们看到数据集内包含以下信息:
| 列 | 中文 | 备注 |
|---|---|---|
| PassengerId | 游客编码 | |
| Pclass | 乘客等级 | 做独热编码 |
| Name | 姓名 | 可删除 |
| Sex | 性别 | |
| Age | 年龄 | 训练集有177个缺失值,测试集有86个缺失值 |
| SibSp | 乘客同行的兄弟姐妹和配偶的数量 | 做独热编码 |
| Parch | 乘客同行的父母和子女的数量 | 做独热编码 |
| Ticket | 船票编号 | |
| Fare | 票价 | 测试集有1个缺失值 |
| Cabin | 船舱编号 | 训练集有687缺失值,测试集有327个缺失值 |
| Embarked | 登船港口 | 训练集有2个缺失值 |
## 缺失值处理
columns = X_train.columns ## 获取列
for i in columns:
if X_train[i].isnull().sum() > 0:
mode_value = X_train[i].mode()[0] ## 计算众数
X_train[i] = X_train[i].fillna(mode_value) ## 填充
X_train.isnull().sum()
PassengerId 0
Pclass 0
Name 0
Sex 0
Age 0
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 0
Embarked 0
dtype: int64
columns2 = X_test.columns
for i in columns2:
if X_test[i].isnull().sum() > 0:
mode_value = X_test[i].mode()[0]
X_test[i] = X_test[i].fillna(mode_value)
X_test.isnull().sum()
PassengerId 0
Pclass 0
Name 0
Sex 0
Age 0
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 0
Embarked 0
dtype: int64
## 要做独热编码的列
features = ['Pclass','SibSp','Parch','Ticket','Embarked','Cabin']
## 对训练集做独热编码
X_train = pd.get_dummies(X_train,columns=features)
train_cols = X_train.columns
## 对测试集做独热编码
X_test = pd.get_dummies(X_test,columns=features)
## 补全缺失列并对齐顺序
missing_cols = set(train_cols) - set(X_test.columns)
for col in missing_cols:
X_test[col] = 0
X_test = X_test[train_cols]
X_test
PassengerId Name Sex Age Fare Pclass_1 Pclass_2 Pclass_3 SibSp_0 SibSp_1 ... Cabin_E8 Cabin_F E69 Cabin_F G63 Cabin_F G73 Cabin_F2 Cabin_F33 Cabin_F38 Cabin_F4 Cabin_G6 Cabin_T
0 892 Kelly, Mr. James male 34.5 7.8292 False False True True False ... 0 0 False 0 False False 0 False False 0
1 893 Wilkes, Mrs. James (Ellen Needs) female 47.0 7.0000 False False True False True ... 0 0 False 0 False False 0 False False 0
2 894 Myles, Mr. Thomas Francis male 62.0 9.6875 False True False True False ... 0 0 False 0 False False 0 False False 0
3 895 Wirz, Mr. Albert male 27.0 8.6625 False False True True False ... 0 0 False 0 False False 0 False False 0
4 896 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female 22.0 12.2875 False False True False True ... 0 0 False 0 False False 0 False False 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
413 1305 Spector, Mr. Woolf male 21.0 8.0500 False False True True False ... 0 0 False 0 False False 0 False False 0
414 1306 Oliva y Ocana, Dona. Fermina female 39.0 108.9000 True False False True False ... 0 0 False 0 False False 0 False False 0
415 1307 Saether, Mr. Simon Sivertsen male 38.5 7.2500 False False True True False ... 0 0 False 0 False False 0 False False 0
416 1308 Ware, Mr. Frederick male 21.0 8.0500 False False True True False ... 0 0 False 0 False False 0 False False 0
417 1309 Peter, Master. Michael J male 21.0 22.3583 False False True False True ... 0 0 False 0 False False 0 False False 0
## 新增列
list1 = []
list2 = []
for i in X_train.columns:
if i not in columns:
list1.append(i)
for i in X_test.columns:
if i not in columns2:
list2.append(i)
print(list1)
print(list2)
['Pclass_1', 'Pclass_2', 'Pclass_3', 'SibSp_0', 'SibSp_1', 'SibSp_2', 'SibSp_3', 'SibSp_4', 'SibSp_5', 'SibSp_8', 'Parch_0', 'Parch_1', 'Parch_2', 'Parch_3', 'Parch_4', 'Parch_5', 'Parch_6', 'Ticket_110152', 'Ticket_110413', 'Ticket_110465', 'Ticket_110564', 'Ticket_110813', 'Ticket_111240', 'Ticket_111320', 'Ticket_111361', 'Ticket_111369', 'Ticket_111426', 'Ticket_111427', 'Ticket_111428', 'Ticket_112050', 'Ticket_112052', 'Ticket_112053', 'Ticket_112058', 'Ticket_112059', 'Ticket_112277', 'Ticket_112379', 'Ticket_113028', 'Ticket_113043', 'Ticket_113050', 'Ticket_113051', 'Ticket_113055', 'Ticket_113056', 'Ticket_113059', 'Ticket_113501', 'Ticket_113503', 'Ticket_113505', 'Ticket_113509', 'Ticket_113510', 'Ticket_113514', 'Ticket_113572', 'Ticket_113760', 'Ticket_113767', 'Ticket_113773', 'Ticket_113776', 'Ticket_113781', 'Ticket_113783', 'Ticket_113784', 'Ticket_113786', 'Ticket_113787', 'Ticket_113788', 'Ticket_113789', 'Ticket_113792', 'Ticket_113794', 'Ticket_113796', 'Ticket_113798', 'Ticket_113800', 'Ticket_113803', 'Ticket_113804', 'Ticket_113806', 'Ticket_113807', 'Ticket_11668', 'Ticket_11751', 'Ticket_11752', 'Ticket_11753', 'Ticket_11755', 'Ticket_11765', 'Ticket_11767', 'Ticket_11769', 'Ticket_11771', 'Ticket_11774', 'Ticket_11813', 'Ticket_11967', 'Ticket_12233', 'Ticket_12460', 'Ticket_12749', 'Ticket_13049', 'Ticket_13213', 'Ticket_13214', 'Ticket_13502', 'Ticket_13507', 'Ticket_13509', 'Ticket_13567', 'Ticket_13568', 'Ticket_14311', 'Ticket_14312', 'Ticket_14313', 'Ticket_14973', 'Ticket_1601', 'Ticket_16966', 'Ticket_16988', 'Ticket_17421', 'Ticket_17453', 'Ticket_17463', 'Ticket_17464', 'Ticket_17465', 'Ticket_17466', 'Ticket_17474', 'Ticket_17764', 'Ticket_19877', 'Ticket_19928', 'Ticket_19943', 'Ticket_19947', 'Ticket_19950', 'Ticket_19952', 'Ticket_19972', 'Ticket_19988', 'Ticket_19996', 'Ticket_2003', 'Ticket_211536', 'Ticket_21440', 'Ticket_218629', 'Ticket_219533', 'Ticket_220367', 'Ticket_220845', 'Ticket_2223', 'Ticket_223596', 'Ticket_226593', 'Ticket_226875', 'Ticket_228414', 'Ticket_229236', 'Ticket_230080', 'Ticket_230136', 'Ticket_230433', 'Ticket_230434', 'Ticket_231919', 'Ticket_231945', 'Ticket_233639', 'Ticket_233866', 'Ticket_234360', 'Ticket_234604', 'Ticket_234686', 'Ticket_234818', 'Ticket_236171', 'Ticket_236852', 'Ticket_236853', 'Ticket_237442', 'Ticket_237565', 'Ticket_237668', 'Ticket_237671', 'Ticket_237736', 'Ticket_237789', 'Ticket_237798', 'Ticket_239853', 'Ticket_239854', 'Ticket_239855', 'Ticket_239856', 'Ticket_239865', 'Ticket_240929', 'Ticket_24160', 'Ticket_243847', 'Ticket_243880', 'Ticket_244252', 'Ticket_244270', 'Ticket_244278', 'Ticket_244310', 'Ticket_244358', 'Ticket_244361', 'Ticket_244367', 'Ticket_244373', 'Ticket_248698', 'Ticket_248706', 'Ticket_248723', 'Ticket_248727', 'Ticket_248731', 'Ticket_248733', 'Ticket_248738', 'Ticket_248740', 'Ticket_248747', 'Ticket_250643', 'Ticket_250644', 'Ticket_250646', 'Ticket_250647', 'Ticket_250648', 'Ticket_250649', 'Ticket_250651', 'Ticket_250652', 'Ticket_250653', 'Ticket_250655', 'Ticket_2620', 'Ticket_2623', 'Ticket_2624', 'Ticket_2625', 'Ticket_2626', 'Ticket_2627', 'Ticket_2628', 'Ticket_2629', 'Ticket_2631', 'Ticket_26360', 'Ticket_2641', 'Ticket_2647', 'Ticket_2648', 'Ticket_2649', 'Ticket_2650', 'Ticket_2651', 'Ticket_2653', 'Ticket_2659', 'Ticket_2661', 'Ticket_2662', 'Ticket_2663', 'Ticket_2664', 'Ticket_2665', 'Ticket_2666', 'Ticket_2667', 'Ticket_2668', 'Ticket_2669', 'Ticket_26707', 'Ticket_2671', 'Ticket_2672', 'Ticket_2674', 'Ticket_2677', 'Ticket_2678', 'Ticket_2680', 'Ticket_2683', 'Ticket_2685', 'Ticket_2686', 'Ticket_2687', 'Ticket_2689', 'Ticket_2690', 'Ticket_2691', 'Ticket_2693', 'Ticket_2694', 'Ticket_2695', 'Ticket_2697', 'Ticket_2699', 'Ticket_2700', 'Ticket_27042', 'Ticket_27267', 'Ticket_27849', 'Ticket_28134', 'Ticket_28206', 'Ticket_28213', 'Ticket_28220', 'Ticket_28228', 'Ticket_28403', 'Ticket_28424', 'Ticket_28425', 'Ticket_28551', 'Ticket_28664', 'Ticket_28665', 'Ticket_29011', 'Ticket_2908', 'Ticket_29103', 'Ticket_29104', 'Ticket_29105', 'Ticket_29106', 'Ticket_29108', 'Ticket_2926', 'Ticket_29750', 'Ticket_29751', 'Ticket_3101264', 'Ticket_3101265', 'Ticket_3101267', 'Ticket_3101276', 'Ticket_3101277', 'Ticket_3101278', 'Ticket_3101281', 'Ticket_3101295', 'Ticket_3101296', 'Ticket_3101298', 'Ticket_31027', 'Ticket_31028', 'Ticket_312991', 'Ticket_312992', 'Ticket_312993', 'Ticket_31418', 'Ticket_315037', 'Ticket_315082', 'Ticket_315084', 'Ticket_315086', 'Ticket_315088', 'Ticket_315089', 'Ticket_315090', 'Ticket_315093', 'Ticket_315094', 'Ticket_315096', 'Ticket_315097', 'Ticket_315098', 'Ticket_315151', 'Ticket_315153', 'Ticket_323592', 'Ticket_323951', 'Ticket_324669', 'Ticket_330877', 'Ticket_330909', 'Ticket_330919', 'Ticket_330923', 'Ticket_330931', 'Ticket_330932', 'Ticket_330935', 'Ticket_330958', 'Ticket_330959', 'Ticket_330979', 'Ticket_330980', 'Ticket_334912', 'Ticket_335097', 'Ticket_335677', 'Ticket_33638', 'Ticket_336439', 'Ticket_3411', 'Ticket_341826', 'Ticket_34218', 'Ticket_342826', 'Ticket_343095', 'Ticket_343120', 'Ticket_343275', 'Ticket_343276', 'Ticket_345364', 'Ticket_345572', 'Ticket_345763', 'Ticket_345764', 'Ticket_345765', 'Ticket_345767', 'Ticket_345769', 'Ticket_345770', 'Ticket_345773', 'Ticket_345774', 'Ticket_345777', 'Ticket_345778', 'Ticket_345779', 'Ticket_345780', 'Ticket_345781', 'Ticket_345783', 'Ticket_3460', 'Ticket_347054', 'Ticket_347060', 'Ticket_347061', 'Ticket_347062', 'Ticket_347063', 'Ticket_347064', 'Ticket_347067', 'Ticket_347068', 'Ticket_347069', 'Ticket_347071', 'Ticket_347073', 'Ticket_347074', 'Ticket_347076', 'Ticket_347077', 'Ticket_347078', 'Ticket_347080', 'Ticket_347081', 'Ticket_347082', 'Ticket_347083', 'Ticket_347085', 'Ticket_347087', 'Ticket_347088', 'Ticket_347089', 'Ticket_3474', 'Ticket_347464', 'Ticket_347466', 'Ticket_347468', 'Ticket_347470', 'Ticket_347742', 'Ticket_347743', 'Ticket_348121', 'Ticket_348123', 'Ticket_348124', 'Ticket_349201', 'Ticket_349203', 'Ticket_349204', 'Ticket_349205', 'Ticket_349206', 'Ticket_349207', 'Ticket_349208', 'Ticket_349209', 'Ticket_349210', 'Ticket_349212', 'Ticket_349213', 'Ticket_349214', 'Ticket_349215', 'Ticket_349216', 'Ticket_349217', 'Ticket_349218', 'Ticket_349219', 'Ticket_349221', 'Ticket_349222', 'Ticket_349223', 'Ticket_349224', 'Ticket_349225', 'Ticket_349227', 'Ticket_349228', 'Ticket_349231', 'Ticket_349233', 'Ticket_349234', 'Ticket_349236', 'Ticket_349237', 'Ticket_349239', 'Ticket_349240', 'Ticket_349241', 'Ticket_349242', 'Ticket_349243', 'Ticket_349244', 'Ticket_349245', 'Ticket_349246', 'Ticket_349247', 'Ticket_349248', 'Ticket_349249', 'Ticket_349251', 'Ticket_349252', 'Ticket_349253', 'Ticket_349254', 'Ticket_349256', 'Ticket_349257', 'Ticket_349909', 'Ticket_349910', 'Ticket_349912', 'Ticket_350025', 'Ticket_350026', 'Ticket_350029', 'Ticket_350034', 'Ticket_350035', 'Ticket_350036', 'Ticket_350042', 'Ticket_350043', 'Ticket_350046', 'Ticket_350047', 'Ticket_350048', 'Ticket_350050', 'Ticket_350052', 'Ticket_350060', 'Ticket_350404', 'Ticket_350406', 'Ticket_350407', 'Ticket_350417', 'Ticket_35273', 'Ticket_35281', 'Ticket_35851', 'Ticket_35852', 'Ticket_358585', 'Ticket_36209', 'Ticket_362316', 'Ticket_363291', 'Ticket_363294', 'Ticket_363592', 'Ticket_364498', 'Ticket_364499', 'Ticket_364500', 'Ticket_364506', 'Ticket_364511', 'Ticket_364512', 'Ticket_364516', 'Ticket_364846', 'Ticket_364848', 'Ticket_364849', 'Ticket_364850', 'Ticket_364851', 'Ticket_365222', 'Ticket_365226', 'Ticket_36568', 'Ticket_367226', 'Ticket_367228', 'Ticket_367229', 'Ticket_367230', 'Ticket_367231', 'Ticket_367232', 'Ticket_367655', 'Ticket_368323', 'Ticket_36864', 'Ticket_36865', 'Ticket_36866', 'Ticket_368703', 'Ticket_36928', 'Ticket_36947', 'Ticket_36963', 'Ticket_36967', 'Ticket_36973', 'Ticket_370129', 'Ticket_370365', 'Ticket_370369', 'Ticket_370370', 'Ticket_370371', 'Ticket_370372', 'Ticket_370373', 'Ticket_370375', 'Ticket_370376', 'Ticket_370377', 'Ticket_371060', 'Ticket_371110', 'Ticket_371362', 'Ticket_372622', 'Ticket_373450', 'Ticket_374746', 'Ticket_374887', 'Ticket_374910', 'Ticket_376564', 'Ticket_376566', 'Ticket_382649', 'Ticket_382651', 'Ticket_382652', 'Ticket_383121', 'Ticket_384461', 'Ticket_386525', 'Ticket_392091', 'Ticket_392092', 'Ticket_392096', 'Ticket_394140', 'Ticket_4133', 'Ticket_4134', 'Ticket_4135', 'Ticket_4136', 'Ticket_4137', 'Ticket_4138', 'Ticket_4579', 'Ticket_54636', 'Ticket_5727', 'Ticket_65303', 'Ticket_65304', 'Ticket_65306', 'Ticket_6563', 'Ticket_693', 'Ticket_695', 'Ticket_7267', 'Ticket_7534', 'Ticket_7540', 'Ticket_7545', 'Ticket_7546', 'Ticket_7552', 'Ticket_7553', 'Ticket_7598', 'Ticket_8471', 'Ticket_8475', 'Ticket_9234', 'Ticket_A./5. 2152', 'Ticket_A./5. 3235', 'Ticket_A.5. 11206', 'Ticket_A.5. 18509', 'Ticket_A/4 45380', 'Ticket_A/4 48871', 'Ticket_A/4. 20589', 'Ticket_A/4. 34244', 'Ticket_A/4. 39886', 'Ticket_A/5 21171', 'Ticket_A/5 21172', 'Ticket_A/5 21173', 'Ticket_A/5 21174', 'Ticket_A/5 2466', 'Ticket_A/5 2817', 'Ticket_A/5 3536', 'Ticket_A/5 3540', 'Ticket_A/5 3594', 'Ticket_A/5 3902', 'Ticket_A/5. 10482', 'Ticket_A/5. 13032', 'Ticket_A/5. 2151', 'Ticket_A/5. 3336', 'Ticket_A/5. 3337', 'Ticket_A/5. 851', 'Ticket_A/S 2816', 'Ticket_A4. 54510', 'Ticket_C 17369', 'Ticket_C 4001', 'Ticket_C 7075', 'Ticket_C 7076', 'Ticket_C 7077', 'Ticket_C.A. 17248', 'Ticket_C.A. 18723', 'Ticket_C.A. 2315', 'Ticket_C.A. 24579', 'Ticket_C.A. 24580', 'Ticket_C.A. 2673', 'Ticket_C.A. 29178', 'Ticket_C.A. 29395', 'Ticket_C.A. 29566', 'Ticket_C.A. 31026', 'Ticket_C.A. 31921', 'Ticket_C.A. 33111', 'Ticket_C.A. 33112', 'Ticket_C.A. 33595', 'Ticket_C.A. 34260', 'Ticket_C.A. 34651', 'Ticket_C.A. 37671', 'Ticket_C.A. 5547', 'Ticket_C.A. 6212', 'Ticket_C.A./SOTON 34068', 'Ticket_CA 2144', 'Ticket_CA. 2314', 'Ticket_CA. 2343', 'Ticket_F.C. 12750', 'Ticket_F.C.C. 13528', 'Ticket_F.C.C. 13529', 'Ticket_F.C.C. 13531', 'Ticket_Fa 265302', 'Ticket_LINE', 'Ticket_P/PP 3381', 'Ticket_PC 17318', 'Ticket_PC 17473', 'Ticket_PC 17474', 'Ticket_PC 17475', 'Ticket_PC 17476', 'Ticket_PC 17477', 'Ticket_PC 17482', 'Ticket_PC 17483', 'Ticket_PC 17485', 'Ticket_PC 17558', 'Ticket_PC 17569', 'Ticket_PC 17572', 'Ticket_PC 17582', 'Ticket_PC 17585', 'Ticket_PC 17590', 'Ticket_PC 17592', 'Ticket_PC 17593', 'Ticket_PC 17595', 'Ticket_PC 17596', 'Ticket_PC 17597', 'Ticket_PC 17599', 'Ticket_PC 17600', 'Ticket_PC 17601', 'Ticket_PC 17603', 'Ticket_PC 17604', 'Ticket_PC 17605', 'Ticket_PC 17608', 'Ticket_PC 17609', 'Ticket_PC 17610', 'Ticket_PC 17611', 'Ticket_PC 17612', 'Ticket_PC 17754', 'Ticket_PC 17755', 'Ticket_PC 17756', 'Ticket_PC 17757', 'Ticket_PC 17758', 'Ticket_PC 17759', 'Ticket_PC 17760', 'Ticket_PC 17761', 'Ticket_PP 4348', 'Ticket_PP 9549', 'Ticket_S.C./A.4. 23567', 'Ticket_S.C./PARIS 2079', 'Ticket_S.O./P.P. 3', 'Ticket_S.O./P.P. 751', 'Ticket_S.O.C. 14879', 'Ticket_S.O.P. 1166', 'Ticket_S.P. 3464', 'Ticket_S.W./PP 752', 'Ticket_SC 1748', 'Ticket_SC/AH 29037', 'Ticket_SC/AH 3085', 'Ticket_SC/AH Basle 541', 'Ticket_SC/PARIS 2131', 'Ticket_SC/PARIS 2133', 'Ticket_SC/PARIS 2146', 'Ticket_SC/PARIS 2149', 'Ticket_SC/PARIS 2167', 'Ticket_SC/Paris 2123', 'Ticket_SC/Paris 2163', 'Ticket_SCO/W 1585', 'Ticket_SO/C 14885', 'Ticket_SOTON/O.Q. 3101305', 'Ticket_SOTON/O.Q. 3101306', 'Ticket_SOTON/O.Q. 3101307', 'Ticket_SOTON/O.Q. 3101310', 'Ticket_SOTON/O.Q. 3101311', 'Ticket_SOTON/O.Q. 3101312', 'Ticket_SOTON/O.Q. 392078', 'Ticket_SOTON/O.Q. 392087', 'Ticket_SOTON/O2 3101272', 'Ticket_SOTON/O2 3101287', 'Ticket_SOTON/OQ 3101316', 'Ticket_SOTON/OQ 3101317', 'Ticket_SOTON/OQ 392076', 'Ticket_SOTON/OQ 392082', 'Ticket_SOTON/OQ 392086', 'Ticket_SOTON/OQ 392089', 'Ticket_SOTON/OQ 392090', 'Ticket_STON/O 2. 3101269', 'Ticket_STON/O 2. 3101273', 'Ticket_STON/O 2. 3101274', 'Ticket_STON/O 2. 3101275', 'Ticket_STON/O 2. 3101280', 'Ticket_STON/O 2. 3101285', 'Ticket_STON/O 2. 3101286', 'Ticket_STON/O 2. 3101288', 'Ticket_STON/O 2. 3101289', 'Ticket_STON/O 2. 3101292', 'Ticket_STON/O 2. 3101293', 'Ticket_STON/O 2. 3101294', 'Ticket_STON/O2. 3101271', 'Ticket_STON/O2. 3101279', 'Ticket_STON/O2. 3101282', 'Ticket_STON/O2. 3101283', 'Ticket_STON/O2. 3101290', 'Ticket_SW/PP 751', 'Ticket_W./C. 14258', 'Ticket_W./C. 14263', 'Ticket_W./C. 6607', 'Ticket_W./C. 6608', 'Ticket_W./C. 6609', 'Ticket_W.E.P. 5734', 'Ticket_W/C 14208', 'Ticket_WE/P 5735', 'Embarked_C', 'Embarked_Q', 'Embarked_S', 'Cabin_A10', 'Cabin_A14', 'Cabin_A16', 'Cabin_A19', 'Cabin_A20', 'Cabin_A23', 'Cabin_A24', 'Cabin_A26', 'Cabin_A31', 'Cabin_A32', 'Cabin_A34', 'Cabin_A36', 'Cabin_A5', 'Cabin_A6', 'Cabin_A7', 'Cabin_B101', 'Cabin_B102', 'Cabin_B18', 'Cabin_B19', 'Cabin_B20', 'Cabin_B22', 'Cabin_B28', 'Cabin_B3', 'Cabin_B30', 'Cabin_B35', 'Cabin_B37', 'Cabin_B38', 'Cabin_B39', 'Cabin_B4', 'Cabin_B41', 'Cabin_B42', 'Cabin_B49', 'Cabin_B5', 'Cabin_B50', 'Cabin_B51 B53 B55', 'Cabin_B57 B59 B63 B66', 'Cabin_B58 B60', 'Cabin_B69', 'Cabin_B71', 'Cabin_B73', 'Cabin_B77', 'Cabin_B78', 'Cabin_B79', 'Cabin_B80', 'Cabin_B82 B84', 'Cabin_B86', 'Cabin_B94', 'Cabin_B96 B98', 'Cabin_C101', 'Cabin_C103', 'Cabin_C104', 'Cabin_C106', 'Cabin_C110', 'Cabin_C111', 'Cabin_C118', 'Cabin_C123', 'Cabin_C124', 'Cabin_C125', 'Cabin_C126', 'Cabin_C128', 'Cabin_C148', 'Cabin_C2', 'Cabin_C22 C26', 'Cabin_C23 C25 C27', 'Cabin_C30', 'Cabin_C32', 'Cabin_C45', 'Cabin_C46', 'Cabin_C47', 'Cabin_C49', 'Cabin_C50', 'Cabin_C52', 'Cabin_C54', 'Cabin_C62 C64', 'Cabin_C65', 'Cabin_C68', 'Cabin_C7', 'Cabin_C70', 'Cabin_C78', 'Cabin_C82', 'Cabin_C83', 'Cabin_C85', 'Cabin_C86', 'Cabin_C87', 'Cabin_C90', 'Cabin_C91', 'Cabin_C92', 'Cabin_C93', 'Cabin_C95', 'Cabin_C99', 'Cabin_D', 'Cabin_D10 D12', 'Cabin_D11', 'Cabin_D15', 'Cabin_D17', 'Cabin_D19', 'Cabin_D20', 'Cabin_D21', 'Cabin_D26', 'Cabin_D28', 'Cabin_D30', 'Cabin_D33', 'Cabin_D35', 'Cabin_D36', 'Cabin_D37', 'Cabin_D45', 'Cabin_D46', 'Cabin_D47', 'Cabin_D48', 'Cabin_D49', 'Cabin_D50', 'Cabin_D56', 'Cabin_D6', 'Cabin_D7', 'Cabin_D9', 'Cabin_E10', 'Cabin_E101', 'Cabin_E12', 'Cabin_E121', 'Cabin_E17', 'Cabin_E24', 'Cabin_E25', 'Cabin_E31', 'Cabin_E33', 'Cabin_E34', 'Cabin_E36', 'Cabin_E38', 'Cabin_E40', 'Cabin_E44', 'Cabin_E46', 'Cabin_E49', 'Cabin_E50', 'Cabin_E58', 'Cabin_E63', 'Cabin_E67', 'Cabin_E68', 'Cabin_E77', 'Cabin_E8', 'Cabin_F E69', 'Cabin_F G63', 'Cabin_F G73', 'Cabin_F2', 'Cabin_F33', 'Cabin_F38', 'Cabin_F4', 'Cabin_G6', 'Cabin_T']
['Pclass_1', 'Pclass_2', 'Pclass_3', 'SibSp_0', 'SibSp_1', 'SibSp_2', 'SibSp_3', 'SibSp_4', 'SibSp_5', 'SibSp_8', 'Parch_0', 'Parch_1', 'Parch_2', 'Parch_3', 'Parch_4', 'Parch_5', 'Parch_6', 'Ticket_110152', 'Ticket_110413', 'Ticket_110465', 'Ticket_110564', 'Ticket_110813', 'Ticket_111240', 'Ticket_111320', 'Ticket_111361', 'Ticket_111369', 'Ticket_111426', 'Ticket_111427', 'Ticket_111428', 'Ticket_112050', 'Ticket_112052', 'Ticket_112053', 'Ticket_112058', 'Ticket_112059', 'Ticket_112277', 'Ticket_112379', 'Ticket_113028', 'Ticket_113043', 'Ticket_113050', 'Ticket_113051', 'Ticket_113055', 'Ticket_113056', 'Ticket_113059', 'Ticket_113501', 'Ticket_113503', 'Ticket_113505', 'Ticket_113509', 'Ticket_113510', 'Ticket_113514', 'Ticket_113572', 'Ticket_113760', 'Ticket_113767', 'Ticket_113773', 'Ticket_113776', 'Ticket_113781', 'Ticket_113783', 'Ticket_113784', 'Ticket_113786', 'Ticket_113787', 'Ticket_113788', 'Ticket_113789', 'Ticket_113792', 'Ticket_113794', 'Ticket_113796', 'Ticket_113798', 'Ticket_113800', 'Ticket_113803', 'Ticket_113804', 'Ticket_113806', 'Ticket_113807', 'Ticket_11668', 'Ticket_11751', 'Ticket_11752', 'Ticket_11753', 'Ticket_11755', 'Ticket_11765', 'Ticket_11767', 'Ticket_11769', 'Ticket_11771', 'Ticket_11774', 'Ticket_11813', 'Ticket_11967', 'Ticket_12233', 'Ticket_12460', 'Ticket_12749', 'Ticket_13049', 'Ticket_13213', 'Ticket_13214', 'Ticket_13502', 'Ticket_13507', 'Ticket_13509', 'Ticket_13567', 'Ticket_13568', 'Ticket_14311', 'Ticket_14312', 'Ticket_14313', 'Ticket_14973', 'Ticket_1601', 'Ticket_16966', 'Ticket_16988', 'Ticket_17421', 'Ticket_17453', 'Ticket_17463', 'Ticket_17464', 'Ticket_17465', 'Ticket_17466', 'Ticket_17474', 'Ticket_17764', 'Ticket_19877', 'Ticket_19928', 'Ticket_19943', 'Ticket_19947', 'Ticket_19950', 'Ticket_19952', 'Ticket_19972', 'Ticket_19988', 'Ticket_19996', 'Ticket_2003', 'Ticket_211536', 'Ticket_21440', 'Ticket_218629', 'Ticket_219533', 'Ticket_220367', 'Ticket_220845', 'Ticket_2223', 'Ticket_223596', 'Ticket_226593', 'Ticket_226875', 'Ticket_228414', 'Ticket_229236', 'Ticket_230080', 'Ticket_230136', 'Ticket_230433', 'Ticket_230434', 'Ticket_231919', 'Ticket_231945', 'Ticket_233639', 'Ticket_233866', 'Ticket_234360', 'Ticket_234604', 'Ticket_234686', 'Ticket_234818', 'Ticket_236171', 'Ticket_236852', 'Ticket_236853', 'Ticket_237442', 'Ticket_237565', 'Ticket_237668', 'Ticket_237671', 'Ticket_237736', 'Ticket_237789', 'Ticket_237798', 'Ticket_239853', 'Ticket_239854', 'Ticket_239855', 'Ticket_239856', 'Ticket_239865', 'Ticket_240929', 'Ticket_24160', 'Ticket_243847', 'Ticket_243880', 'Ticket_244252', 'Ticket_244270', 'Ticket_244278', 'Ticket_244310', 'Ticket_244358', 'Ticket_244361', 'Ticket_244367', 'Ticket_244373', 'Ticket_248698', 'Ticket_248706', 'Ticket_248723', 'Ticket_248727', 'Ticket_248731', 'Ticket_248733', 'Ticket_248738', 'Ticket_248740', 'Ticket_248747', 'Ticket_250643', 'Ticket_250644', 'Ticket_250646', 'Ticket_250647', 'Ticket_250648', 'Ticket_250649', 'Ticket_250651', 'Ticket_250652', 'Ticket_250653', 'Ticket_250655', 'Ticket_2620', 'Ticket_2623', 'Ticket_2624', 'Ticket_2625', 'Ticket_2626', 'Ticket_2627', 'Ticket_2628', 'Ticket_2629', 'Ticket_2631', 'Ticket_26360', 'Ticket_2641', 'Ticket_2647', 'Ticket_2648', 'Ticket_2649', 'Ticket_2650', 'Ticket_2651', 'Ticket_2653', 'Ticket_2659', 'Ticket_2661', 'Ticket_2662', 'Ticket_2663', 'Ticket_2664', 'Ticket_2665', 'Ticket_2666', 'Ticket_2667', 'Ticket_2668', 'Ticket_2669', 'Ticket_26707', 'Ticket_2671', 'Ticket_2672', 'Ticket_2674', 'Ticket_2677', 'Ticket_2678', 'Ticket_2680', 'Ticket_2683', 'Ticket_2685', 'Ticket_2686', 'Ticket_2687', 'Ticket_2689', 'Ticket_2690', 'Ticket_2691', 'Ticket_2693', 'Ticket_2694', 'Ticket_2695', 'Ticket_2697', 'Ticket_2699', 'Ticket_2700', 'Ticket_27042', 'Ticket_27267', 'Ticket_27849', 'Ticket_28134', 'Ticket_28206', 'Ticket_28213', 'Ticket_28220', 'Ticket_28228', 'Ticket_28403', 'Ticket_28424', 'Ticket_28425', 'Ticket_28551', 'Ticket_28664', 'Ticket_28665', 'Ticket_29011', 'Ticket_2908', 'Ticket_29103', 'Ticket_29104', 'Ticket_29105', 'Ticket_29106', 'Ticket_29108', 'Ticket_2926', 'Ticket_29750', 'Ticket_29751', 'Ticket_3101264', 'Ticket_3101265', 'Ticket_3101267', 'Ticket_3101276', 'Ticket_3101277', 'Ticket_3101278', 'Ticket_3101281', 'Ticket_3101295', 'Ticket_3101296', 'Ticket_3101298', 'Ticket_31027', 'Ticket_31028', 'Ticket_312991', 'Ticket_312992', 'Ticket_312993', 'Ticket_31418', 'Ticket_315037', 'Ticket_315082', 'Ticket_315084', 'Ticket_315086', 'Ticket_315088', 'Ticket_315089', 'Ticket_315090', 'Ticket_315093', 'Ticket_315094', 'Ticket_315096', 'Ticket_315097', 'Ticket_315098', 'Ticket_315151', 'Ticket_315153', 'Ticket_323592', 'Ticket_323951', 'Ticket_324669', 'Ticket_330877', 'Ticket_330909', 'Ticket_330919', 'Ticket_330923', 'Ticket_330931', 'Ticket_330932', 'Ticket_330935', 'Ticket_330958', 'Ticket_330959', 'Ticket_330979', 'Ticket_330980', 'Ticket_334912', 'Ticket_335097', 'Ticket_335677', 'Ticket_33638', 'Ticket_336439', 'Ticket_3411', 'Ticket_341826', 'Ticket_34218', 'Ticket_342826', 'Ticket_343095', 'Ticket_343120', 'Ticket_343275', 'Ticket_343276', 'Ticket_345364', 'Ticket_345572', 'Ticket_345763', 'Ticket_345764', 'Ticket_345765', 'Ticket_345767', 'Ticket_345769', 'Ticket_345770', 'Ticket_345773', 'Ticket_345774', 'Ticket_345777', 'Ticket_345778', 'Ticket_345779', 'Ticket_345780', 'Ticket_345781', 'Ticket_345783', 'Ticket_3460', 'Ticket_347054', 'Ticket_347060', 'Ticket_347061', 'Ticket_347062', 'Ticket_347063', 'Ticket_347064', 'Ticket_347067', 'Ticket_347068', 'Ticket_347069', 'Ticket_347071', 'Ticket_347073', 'Ticket_347074', 'Ticket_347076', 'Ticket_347077', 'Ticket_347078', 'Ticket_347080', 'Ticket_347081', 'Ticket_347082', 'Ticket_347083', 'Ticket_347085', 'Ticket_347087', 'Ticket_347088', 'Ticket_347089', 'Ticket_3474', 'Ticket_347464', 'Ticket_347466', 'Ticket_347468', 'Ticket_347470', 'Ticket_347742', 'Ticket_347743', 'Ticket_348121', 'Ticket_348123', 'Ticket_348124', 'Ticket_349201', 'Ticket_349203', 'Ticket_349204', 'Ticket_349205', 'Ticket_349206', 'Ticket_349207', 'Ticket_349208', 'Ticket_349209', 'Ticket_349210', 'Ticket_349212', 'Ticket_349213', 'Ticket_349214', 'Ticket_349215', 'Ticket_349216', 'Ticket_349217', 'Ticket_349218', 'Ticket_349219', 'Ticket_349221', 'Ticket_349222', 'Ticket_349223', 'Ticket_349224', 'Ticket_349225', 'Ticket_349227', 'Ticket_349228', 'Ticket_349231', 'Ticket_349233', 'Ticket_349234', 'Ticket_349236', 'Ticket_349237', 'Ticket_349239', 'Ticket_349240', 'Ticket_349241', 'Ticket_349242', 'Ticket_349243', 'Ticket_349244', 'Ticket_349245', 'Ticket_349246', 'Ticket_349247', 'Ticket_349248', 'Ticket_349249', 'Ticket_349251', 'Ticket_349252', 'Ticket_349253', 'Ticket_349254', 'Ticket_349256', 'Ticket_349257', 'Ticket_349909', 'Ticket_349910', 'Ticket_349912', 'Ticket_350025', 'Ticket_350026', 'Ticket_350029', 'Ticket_350034', 'Ticket_350035', 'Ticket_350036', 'Ticket_350042', 'Ticket_350043', 'Ticket_350046', 'Ticket_350047', 'Ticket_350048', 'Ticket_350050', 'Ticket_350052', 'Ticket_350060', 'Ticket_350404', 'Ticket_350406', 'Ticket_350407', 'Ticket_350417', 'Ticket_35273', 'Ticket_35281', 'Ticket_35851', 'Ticket_35852', 'Ticket_358585', 'Ticket_36209', 'Ticket_362316', 'Ticket_363291', 'Ticket_363294', 'Ticket_363592', 'Ticket_364498', 'Ticket_364499', 'Ticket_364500', 'Ticket_364506', 'Ticket_364511', 'Ticket_364512', 'Ticket_364516', 'Ticket_364846', 'Ticket_364848', 'Ticket_364849', 'Ticket_364850', 'Ticket_364851', 'Ticket_365222', 'Ticket_365226', 'Ticket_36568', 'Ticket_367226', 'Ticket_367228', 'Ticket_367229', 'Ticket_367230', 'Ticket_367231', 'Ticket_367232', 'Ticket_367655', 'Ticket_368323', 'Ticket_36864', 'Ticket_36865', 'Ticket_36866', 'Ticket_368703', 'Ticket_36928', 'Ticket_36947', 'Ticket_36963', 'Ticket_36967', 'Ticket_36973', 'Ticket_370129', 'Ticket_370365', 'Ticket_370369', 'Ticket_370370', 'Ticket_370371', 'Ticket_370372', 'Ticket_370373', 'Ticket_370375', 'Ticket_370376', 'Ticket_370377', 'Ticket_371060', 'Ticket_371110', 'Ticket_371362', 'Ticket_372622', 'Ticket_373450', 'Ticket_374746', 'Ticket_374887', 'Ticket_374910', 'Ticket_376564', 'Ticket_376566', 'Ticket_382649', 'Ticket_382651', 'Ticket_382652', 'Ticket_383121', 'Ticket_384461', 'Ticket_386525', 'Ticket_392091', 'Ticket_392092', 'Ticket_392096', 'Ticket_394140', 'Ticket_4133', 'Ticket_4134', 'Ticket_4135', 'Ticket_4136', 'Ticket_4137', 'Ticket_4138', 'Ticket_4579', 'Ticket_54636', 'Ticket_5727', 'Ticket_65303', 'Ticket_65304', 'Ticket_65306', 'Ticket_6563', 'Ticket_693', 'Ticket_695', 'Ticket_7267', 'Ticket_7534', 'Ticket_7540', 'Ticket_7545', 'Ticket_7546', 'Ticket_7552', 'Ticket_7553', 'Ticket_7598', 'Ticket_8471', 'Ticket_8475', 'Ticket_9234', 'Ticket_A./5. 2152', 'Ticket_A./5. 3235', 'Ticket_A.5. 11206', 'Ticket_A.5. 18509', 'Ticket_A/4 45380', 'Ticket_A/4 48871', 'Ticket_A/4. 20589', 'Ticket_A/4. 34244', 'Ticket_A/4. 39886', 'Ticket_A/5 21171', 'Ticket_A/5 21172', 'Ticket_A/5 21173', 'Ticket_A/5 21174', 'Ticket_A/5 2466', 'Ticket_A/5 2817', 'Ticket_A/5 3536', 'Ticket_A/5 3540', 'Ticket_A/5 3594', 'Ticket_A/5 3902', 'Ticket_A/5. 10482', 'Ticket_A/5. 13032', 'Ticket_A/5. 2151', 'Ticket_A/5. 3336', 'Ticket_A/5. 3337', 'Ticket_A/5. 851', 'Ticket_A/S 2816', 'Ticket_A4. 54510', 'Ticket_C 17369', 'Ticket_C 4001', 'Ticket_C 7075', 'Ticket_C 7076', 'Ticket_C 7077', 'Ticket_C.A. 17248', 'Ticket_C.A. 18723', 'Ticket_C.A. 2315', 'Ticket_C.A. 24579', 'Ticket_C.A. 24580', 'Ticket_C.A. 2673', 'Ticket_C.A. 29178', 'Ticket_C.A. 29395', 'Ticket_C.A. 29566', 'Ticket_C.A. 31026', 'Ticket_C.A. 31921', 'Ticket_C.A. 33111', 'Ticket_C.A. 33112', 'Ticket_C.A. 33595', 'Ticket_C.A. 34260', 'Ticket_C.A. 34651', 'Ticket_C.A. 37671', 'Ticket_C.A. 5547', 'Ticket_C.A. 6212', 'Ticket_C.A./SOTON 34068', 'Ticket_CA 2144', 'Ticket_CA. 2314', 'Ticket_CA. 2343', 'Ticket_F.C. 12750', 'Ticket_F.C.C. 13528', 'Ticket_F.C.C. 13529', 'Ticket_F.C.C. 13531', 'Ticket_Fa 265302', 'Ticket_LINE', 'Ticket_P/PP 3381', 'Ticket_PC 17318', 'Ticket_PC 17473', 'Ticket_PC 17474', 'Ticket_PC 17475', 'Ticket_PC 17476', 'Ticket_PC 17477', 'Ticket_PC 17482', 'Ticket_PC 17483', 'Ticket_PC 17485', 'Ticket_PC 17558', 'Ticket_PC 17569', 'Ticket_PC 17572', 'Ticket_PC 17582', 'Ticket_PC 17585', 'Ticket_PC 17590', 'Ticket_PC 17592', 'Ticket_PC 17593', 'Ticket_PC 17595', 'Ticket_PC 17596', 'Ticket_PC 17597', 'Ticket_PC 17599', 'Ticket_PC 17600', 'Ticket_PC 17601', 'Ticket_PC 17603', 'Ticket_PC 17604', 'Ticket_PC 17605', 'Ticket_PC 17608', 'Ticket_PC 17609', 'Ticket_PC 17610', 'Ticket_PC 17611', 'Ticket_PC 17612', 'Ticket_PC 17754', 'Ticket_PC 17755', 'Ticket_PC 17756', 'Ticket_PC 17757', 'Ticket_PC 17758', 'Ticket_PC 17759', 'Ticket_PC 17760', 'Ticket_PC 17761', 'Ticket_PP 4348', 'Ticket_PP 9549', 'Ticket_S.C./A.4. 23567', 'Ticket_S.C./PARIS 2079', 'Ticket_S.O./P.P. 3', 'Ticket_S.O./P.P. 751', 'Ticket_S.O.C. 14879', 'Ticket_S.O.P. 1166', 'Ticket_S.P. 3464', 'Ticket_S.W./PP 752', 'Ticket_SC 1748', 'Ticket_SC/AH 29037', 'Ticket_SC/AH 3085', 'Ticket_SC/AH Basle 541', 'Ticket_SC/PARIS 2131', 'Ticket_SC/PARIS 2133', 'Ticket_SC/PARIS 2146', 'Ticket_SC/PARIS 2149', 'Ticket_SC/PARIS 2167', 'Ticket_SC/Paris 2123', 'Ticket_SC/Paris 2163', 'Ticket_SCO/W 1585', 'Ticket_SO/C 14885', 'Ticket_SOTON/O.Q. 3101305', 'Ticket_SOTON/O.Q. 3101306', 'Ticket_SOTON/O.Q. 3101307', 'Ticket_SOTON/O.Q. 3101310', 'Ticket_SOTON/O.Q. 3101311', 'Ticket_SOTON/O.Q. 3101312', 'Ticket_SOTON/O.Q. 392078', 'Ticket_SOTON/O.Q. 392087', 'Ticket_SOTON/O2 3101272', 'Ticket_SOTON/O2 3101287', 'Ticket_SOTON/OQ 3101316', 'Ticket_SOTON/OQ 3101317', 'Ticket_SOTON/OQ 392076', 'Ticket_SOTON/OQ 392082', 'Ticket_SOTON/OQ 392086', 'Ticket_SOTON/OQ 392089', 'Ticket_SOTON/OQ 392090', 'Ticket_STON/O 2. 3101269', 'Ticket_STON/O 2. 3101273', 'Ticket_STON/O 2. 3101274', 'Ticket_STON/O 2. 3101275', 'Ticket_STON/O 2. 3101280', 'Ticket_STON/O 2. 3101285', 'Ticket_STON/O 2. 3101286', 'Ticket_STON/O 2. 3101288', 'Ticket_STON/O 2. 3101289', 'Ticket_STON/O 2. 3101292', 'Ticket_STON/O 2. 3101293', 'Ticket_STON/O 2. 3101294', 'Ticket_STON/O2. 3101271', 'Ticket_STON/O2. 3101279', 'Ticket_STON/O2. 3101282', 'Ticket_STON/O2. 3101283', 'Ticket_STON/O2. 3101290', 'Ticket_SW/PP 751', 'Ticket_W./C. 14258', 'Ticket_W./C. 14263', 'Ticket_W./C. 6607', 'Ticket_W./C. 6608', 'Ticket_W./C. 6609', 'Ticket_W.E.P. 5734', 'Ticket_W/C 14208', 'Ticket_WE/P 5735', 'Embarked_C', 'Embarked_Q', 'Embarked_S', 'Cabin_A10', 'Cabin_A14', 'Cabin_A16', 'Cabin_A19', 'Cabin_A20', 'Cabin_A23', 'Cabin_A24', 'Cabin_A26', 'Cabin_A31', 'Cabin_A32', 'Cabin_A34', 'Cabin_A36', 'Cabin_A5', 'Cabin_A6', 'Cabin_A7', 'Cabin_B101', 'Cabin_B102', 'Cabin_B18', 'Cabin_B19', 'Cabin_B20', 'Cabin_B22', 'Cabin_B28', 'Cabin_B3', 'Cabin_B30', 'Cabin_B35', 'Cabin_B37', 'Cabin_B38', 'Cabin_B39', 'Cabin_B4', 'Cabin_B41', 'Cabin_B42', 'Cabin_B49', 'Cabin_B5', 'Cabin_B50', 'Cabin_B51 B53 B55', 'Cabin_B57 B59 B63 B66', 'Cabin_B58 B60', 'Cabin_B69', 'Cabin_B71', 'Cabin_B73', 'Cabin_B77', 'Cabin_B78', 'Cabin_B79', 'Cabin_B80', 'Cabin_B82 B84', 'Cabin_B86', 'Cabin_B94', 'Cabin_B96 B98', 'Cabin_C101', 'Cabin_C103', 'Cabin_C104', 'Cabin_C106', 'Cabin_C110', 'Cabin_C111', 'Cabin_C118', 'Cabin_C123', 'Cabin_C124', 'Cabin_C125', 'Cabin_C126', 'Cabin_C128', 'Cabin_C148', 'Cabin_C2', 'Cabin_C22 C26', 'Cabin_C23 C25 C27', 'Cabin_C30', 'Cabin_C32', 'Cabin_C45', 'Cabin_C46', 'Cabin_C47', 'Cabin_C49', 'Cabin_C50', 'Cabin_C52', 'Cabin_C54', 'Cabin_C62 C64', 'Cabin_C65', 'Cabin_C68', 'Cabin_C7', 'Cabin_C70', 'Cabin_C78', 'Cabin_C82', 'Cabin_C83', 'Cabin_C85', 'Cabin_C86', 'Cabin_C87', 'Cabin_C90', 'Cabin_C91', 'Cabin_C92', 'Cabin_C93', 'Cabin_C95', 'Cabin_C99', 'Cabin_D', 'Cabin_D10 D12', 'Cabin_D11', 'Cabin_D15', 'Cabin_D17', 'Cabin_D19', 'Cabin_D20', 'Cabin_D21', 'Cabin_D26', 'Cabin_D28', 'Cabin_D30', 'Cabin_D33', 'Cabin_D35', 'Cabin_D36', 'Cabin_D37', 'Cabin_D45', 'Cabin_D46', 'Cabin_D47', 'Cabin_D48', 'Cabin_D49', 'Cabin_D50', 'Cabin_D56', 'Cabin_D6', 'Cabin_D7', 'Cabin_D9', 'Cabin_E10', 'Cabin_E101', 'Cabin_E12', 'Cabin_E121', 'Cabin_E17', 'Cabin_E24', 'Cabin_E25', 'Cabin_E31', 'Cabin_E33', 'Cabin_E34', 'Cabin_E36', 'Cabin_E38', 'Cabin_E40', 'Cabin_E44', 'Cabin_E46', 'Cabin_E49', 'Cabin_E50', 'Cabin_E58', 'Cabin_E63', 'Cabin_E67', 'Cabin_E68', 'Cabin_E77', 'Cabin_E8', 'Cabin_F E69', 'Cabin_F G63', 'Cabin_F G73', 'Cabin_F2', 'Cabin_F33', 'Cabin_F38', 'Cabin_F4', 'Cabin_G6', 'Cabin_T']
## 类型转换
X_train[list1] = X_train[list1].astype(int)
X_test[list2] = X_test[list2].astype(int)
X_train
PassengerId Name Sex Age Fare Pclass_1 Pclass_2 Pclass_3 SibSp_0 SibSp_1 ... Cabin_E8 Cabin_F E69 Cabin_F G63 Cabin_F G73 Cabin_F2 Cabin_F33 Cabin_F38 Cabin_F4 Cabin_G6 Cabin_T
0 1 Braund, Mr. Owen Harris male 22.0 7.2500 0 0 1 0 1 ... 0 0 0 0 0 0 0 0 0 0
1 2 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 71.2833 1 0 0 0 1 ... 0 0 0 0 0 0 0 0 0 0
2 3 Heikkinen, Miss. Laina female 26.0 7.9250 0 0 1 1 0 ... 0 0 0 0 0 0 0 0 0 0
3 4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 53.1000 1 0 0 0 1 ... 0 0 0 0 0 0 0 0 0 0
4 5 Allen, Mr. William Henry male 35.0 8.0500 0 0 1 1 0 ... 0 0 0 0 0 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
886 887 Montvila, Rev. Juozas male 27.0 13.0000 0 1 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
887 888 Graham, Miss. Margaret Edith female 19.0 30.0000 1 0 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
888 889 Johnston, Miss. Catherine Helen "Carrie" female 24.0 23.4500 0 0 1 0 1 ... 0 0 0 0 0 0 0 0 0 0
889 890 Behr, Mr. Karl Howell male 26.0 30.0000 1 0 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
890 891 Dooley, Mr. Patrick male 32.0 7.7500 0 0 1 1 0 ... 0 0 0 0 0 0 0 0 0 0
## 删除列
X_train = X_train.drop('Name',axis=1)
X_test = X_test.drop('Name',axis=1)
X_train
PassengerId Sex Age Fare Pclass_1 Pclass_2 Pclass_3 SibSp_0 SibSp_1 SibSp_2 ... Cabin_E8 Cabin_F E69 Cabin_F G63 Cabin_F G73 Cabin_F2 Cabin_F33 Cabin_F38 Cabin_F4 Cabin_G6 Cabin_T
0 1 male 22.0 7.2500 0 0 1 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
1 2 female 38.0 71.2833 1 0 0 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
2 3 female 26.0 7.9250 0 0 1 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
3 4 female 35.0 53.1000 1 0 0 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
4 5 male 35.0 8.0500 0 0 1 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
886 887 male 27.0 13.0000 0 1 0 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
887 888 female 19.0 30.0000 1 0 0 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
888 889 female 24.0 23.4500 0 0 1 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
889 890 male 26.0 30.0000 1 0 0 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
890 891 male 32.0 7.7500 0 0 1 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
descrete_features1 = []
for i in X_train.columns:
if X_train[i].dtype == 'object':
descrete_features1.append(i)
descrete_features2 = []
for i in X_test.columns:
if X_test[i].dtype == 'object':
descrete_features2.append(i)
print(descrete_features1)
print(descrete_features2)
['Sex']
['Sex']
## 性别做标签编码,女性为0,男性为1
sex={
'female':0,
'male': 1
}
X_train['Sex'] = X_train['Sex'].map(sex)
X_test['Sex'] = X_test['Sex'].map(sex)
X_test
PassengerId Sex Age Fare Pclass_1 Pclass_2 Pclass_3 SibSp_0 SibSp_1 SibSp_2 ... Cabin_E8 Cabin_F E69 Cabin_F G63 Cabin_F G73 Cabin_F2 Cabin_F33 Cabin_F38 Cabin_F4 Cabin_G6 Cabin_T
0 892 1 34.5 7.8292 0 0 1 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
1 893 0 47.0 7.0000 0 0 1 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
2 894 1 62.0 9.6875 0 1 0 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
3 895 1 27.0 8.6625 0 0 1 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
4 896 0 22.0 12.2875 0 0 1 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
413 1305 1 21.0 8.0500 0 0 1 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
414 1306 0 39.0 108.9000 1 0 0 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
415 1307 1 38.5 7.2500 0 0 1 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
416 1308 1 21.0 8.0500 0 0 1 1 0 0 ... 0 0 0 0 0 0 0 0 0 0
417 1309 1 21.0 22.3583 0 0 1 0 1 0 ... 0 0 0 0 0 0 0 0 0 0
print(X_train.shape, X_test.shape)
(891, 852) (418, 852)
特征对齐了
2. 机器学习建模和评估
## 机器学习建模和评估
## 导入
from sklearn.svm import SVC #支持向量机分类器
from sklearn.neighbors import KNeighborsClassifier #K近邻分类器
from sklearn.linear_model import LogisticRegression #逻辑回归分类器
import xgboost as xgb #XGBoost分类器
import lightgbm as lgb #LightGBM分类器
from sklearn.ensemble import RandomForestClassifier #随机森林分类器
from catboost import CatBoostClassifier #CatBoost分类器
from sklearn.tree import DecisionTreeClassifier #决策树分类器
from sklearn.naive_bayes import GaussianNB #高斯朴素贝叶斯分类器
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") # 忽略所有警告信息
y_test = pd.read_csv('gender_submission.csv')
y_test = y_test.drop('PassengerId',axis=1)
y_test
Survived
0 0
1 1
2 0
3 0
4 1
... ...
413 0
414 1
415 0
416 0
417 0
418 rows × 1 columns
# SVM默认参数
svm_model = SVC(random_state=42)
svm_model.fit(X_train,y_train)
svm_pre = svm_model.predict(X_test)
print('\n默认参数SVM 分类报告:')
print(classification_report(y_test,svm_pre))
print('默认参数SVM 混淆矩阵:')
print(confusion_matrix(y_test,svm_pre))
svm_accuracy = accuracy_score(y_test,svm_pre)
svm_precision = precision_score(y_test,svm_pre)
svm_recall = recall_score(y_test,svm_pre)
svm_f1 = f1_score(y_test,svm_pre)
print("SVM模型评估")
print(f'准确率:{svm_accuracy:.4f}')
print(f'精确率:{svm_precision:.4f}')
print(f'召回率:{svm_recall:.4f}')
print(f'F1值:{svm_f1:.4f}')
默认参数SVM 分类报告:
precision recall f1-score support
0 0.65 0.98 0.78 266
1 0.65 0.07 0.13 152
accuracy 0.65 418
macro avg 0.65 0.52 0.45 418
weighted avg 0.65 0.65 0.54 418
默认参数SVM 混淆矩阵:
[[260 6]
[141 11]]
SVM模型评估
准确率:0.6483
精确率:0.6471
召回率:0.0724
F1值:0.1302
# 默认参数的KNN
knn_model = KNeighborsClassifier()
knn_model.fit(X_train,y_train)
knn_pre = knn_model.predict(X_test)
print("默认参数KNN 分类报告:")
print(classification_report(y_test,knn_pre))
print('默认参数KNN 混淆矩阵:')
print(confusion_matrix(y_test,knn_pre))
knn_accuracy = accuracy_score(y_test,knn_pre)
knn_precision = precision_score(y_test,knn_pre)
knn_recall =recall_score(y_test,knn_pre)
knn_f1 = f1_score(y_test,knn_pre)
print(f"""
KNN 准确率:{knn_accuracy:.4f}
KNN 精确率:{knn_precision:.4f}
KNN 召回率:{knn_recall:.4f}
KNN F1值:{knn_f1:.4f}
""")
默认参数KNN 分类报告:
precision recall f1-score support
0 0.66 0.91 0.77 266
1 0.54 0.18 0.27 152
accuracy 0.65 418
macro avg 0.60 0.55 0.52 418
weighted avg 0.62 0.65 0.59 418
默认参数KNN 混淆矩阵:
[[243 23]
[125 27]]
KNN 准确率:0.6459
KNN 精确率:0.5400
KNN 召回率:0.1776
KNN F1值:0.2673
## 默认参数 逻辑回归
from sklearn.linear_model import LogisticRegression
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}")
默认参数逻辑回归 分类报告:
precision recall f1-score support
0 0.99 0.88 0.93 266
1 0.82 0.99 0.90 152
accuracy 0.92 418
macro avg 0.91 0.93 0.91 418
weighted avg 0.93 0.92 0.92 418
默认参数逻辑回归 混淆矩阵:
[[233 33]
[ 2 150]]
逻辑回归 模型评估指标:
准确率: 0.9163
精确率: 0.8197
召回率: 0.9868
F1 值: 0.8955
## 默认参数的朴素贝叶斯
from sklearn.naive_bayes import GaussianNB
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}")
默认参数朴素贝叶斯 分类报告:
precision recall f1-score support
0 0.36 0.03 0.06 266
1 0.35 0.91 0.50 152
accuracy 0.35 418
macro avg 0.36 0.47 0.28 418
weighted avg 0.36 0.35 0.22 418
默认参数朴素贝叶斯 混淆矩阵:
[[ 8 258]
[ 14 138]]
默认参数朴素贝叶斯 模型评估指标:
准确率: 0.3493
精确率: 0.3485
召回率: 0.9079
F1 值: 0.5036
# 默认参数决策树
from sklearn.tree import DecisionTreeClassifier
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}")
默认参数决策树 分类报告:
precision recall f1-score support
0 0.88 0.78 0.83 266
1 0.68 0.81 0.74 152
accuracy 0.79 418
macro avg 0.78 0.80 0.78 418
weighted avg 0.81 0.79 0.79 418
默认参数决策树 混淆矩阵:
[[208 58]
[ 29 123]]
默认参数决策树 模型评估指标:
准确率: 0.7919
精确率: 0.6796
召回率: 0.8092
F1 值: 0.7387
# 默认参数随机森林
from sklearn.ensemble import RandomForestClassifier
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}")
默认参数随机森林 分类报告:
precision recall f1-score support
0 0.89 0.82 0.86 266
1 0.73 0.82 0.77 152
accuracy 0.82 418
macro avg 0.81 0.82 0.81 418
weighted avg 0.83 0.82 0.82 418
默认参数随机森林 混淆矩阵:
[[219 47]
[ 27 125]]
默认参数随机森林 模型评估指标:
准确率: 0.8230
精确率: 0.7267
召回率: 0.8224
F1 值: 0.7716
# 默认参数XGBoost
import xgboost as xgb
xgb_model = xgb.XGBClassifier(random_state=42)
xgb_model.fit(X_train, y_train)
xgb_pred = xgb_model.predict(X_test)
print("\n默认参数XGBoost 分类报告:")
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}")
默认参数XGBoost 分类报告:
precision recall f1-score support
0 0.85 0.92 0.88 266
1 0.83 0.72 0.77 152
accuracy 0.85 418
macro avg 0.84 0.82 0.83 418
weighted avg 0.85 0.85 0.84 418
默认参数XGBoost 混淆矩阵:
[[244 22]
[ 42 110]]
默认参数XGBoost 模型评估指标:
准确率: 0.8469
精确率: 0.8333
召回率: 0.7237
F1 值: 0.7746
# 默认参数LightGBM
import lightgbm as lgb
lgb_model = lgb.LGBMClassifier(random_state=42)
lgb_model.fit(X_train, y_train)
lgb_pred = lgb_model.predict(X_test)
print("\n默认参数LightGBM 分类报告:")
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}")
[LightGBM] [Warning] Found whitespace in feature_names, replace with underlines
[LightGBM] [Info] Number of positive: 342, number of negative: 549
[LightGBM] [Info] Auto-choosing col-wise multi-threading, the overhead of testing was 0.000205 seconds.
You can set `force_col_wise=true` to remove the overhead.
[LightGBM] [Info] Total Bins 481
[LightGBM] [Info] Number of data points in the train set: 891, number of used features: 17
[LightGBM] [Info] [binary:BoostFromScore]: pavg=0.383838 -> initscore=-0.473288
[LightGBM] [Info] Start training from score -0.473288
默认参数LightGBM 分类报告:
precision recall f1-score support
0 0.85 0.87 0.86 266
1 0.76 0.74 0.75 152
accuracy 0.82 418
macro avg 0.81 0.80 0.80 418
weighted avg 0.82 0.82 0.82 418
默认参数LightGBM 混淆矩阵:
[[231 35]
[ 40 112]]
默认参数LightGBM 模型评估指标:
准确率: 0.8206
精确率: 0.7619
召回率: 0.7368
F1 值: 0.7492
3. 总结
| 模型 | 准确率 | 精确率 | 召回率 | F1 值 |
|---|---|---|---|---|
| 逻辑回归 | 0.9163 | 0.8197 | 0.9868 | 0.8955 |
| XGBoost | 0.8469 | 0.8333 | 0.7237 | 0.7746 |
| 随机森林 | 0.8230 | 0.7267 | 0.8224 | 0.7716 |
| LightGBM | 0.8206 | 0.7619 | 0.7368 | 0.7492 |
| 决策树 | 0.7919 | 0.6796 | 0.8092 | 0.7387 |
| SVM | 0.6483 | 0.6471 | 0.0724 | 0.1302 |
| KNN | 0.6459 | 0.5400 | 0.1776 | 0.2673 |
| 朴素贝叶斯 | 0.3493 | 0.3485 | 0.9079 | 0.5036 |
4. 调参
# --- 1. 贝叶斯优化xgb ---
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from xgboost import XGBClassifier
from skopt import BayesSearchCV
from skopt.space import Real, Categorical, Integer
from sklearn.metrics import classification_report, confusion_matrix
import time
# 定义要搜索的参数空间
search_space = {
# 树结构相关参数
'max_depth': Integer(3, 10),
'min_child_weight': Integer(1, 10),
'gamma': Real(1e-9, 5, 'log-uniform'), # 关键:0 → 1e-9(极小值)
'subsample': Real(0.6, 1.0),
'colsample_bytree': Real(0.6, 1.0),
# 学习过程相关参数
'learning_rate': Real(0.01, 0.3, 'log-uniform'),
'n_estimators': Integer(50, 500),
'reg_alpha': Real(1e-9, 5, 'log-uniform'), # 关键:0 → 1e-9
'reg_lambda': Real(1e-9, 5, 'log-uniform'), # 关键:0 → 1e-9
# 其他参数
'scale_pos_weight': Real(0.1, 10, 'log-uniform') # 这里0.1是安全的(>0)
}
# 创建贝叶斯优化搜索对象
bayes_search = BayesSearchCV(
estimator= xgb.XGBClassifier(random_state=42),
search_spaces=search_space,
n_iter=32, # 迭代次数,可根据需要调整
cv=5, # 5折交叉验证,这个参数是必须的,不能设置为1,否则就是在训练集上做预测了
n_jobs=-1,
scoring='accuracy'
)
start_time = time.time()
# 在训练集上进行贝叶斯优化搜索
bayes_search.fit(X_train, y_train)
end_time = time.time()
print(f"贝叶斯优化耗时: {end_time - start_time:.4f} 秒")
print("最佳参数: ", bayes_search.best_params_)
# 使用最佳参数的模型进行预测
best_model = bayes_search.best_estimator_
best_pred = best_model.predict(X_test)
print("\n贝叶斯优化后的xgb 在测试集上的分类报告:")
print(classification_report(y_test, best_pred))
print("贝叶斯优化后的xgb 在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, best_pred))
贝叶斯优化耗时: 44.7295 秒
最佳参数: OrderedDict([('colsample_bytree', 0.7660412186944575), ('gamma', 1.9823479042365197e-09), ('learning_rate', 0.01371026991225994), ('max_depth', 8), ('min_child_weight', 5), ('n_estimators', 313), ('reg_alpha', 1e-09), ('reg_lambda', 0.2717080605557207), ('scale_pos_weight', 0.9341695610256374), ('subsample', 0.9783311131564301)])
贝叶斯优化后的xgb 在测试集上的分类报告:
precision recall f1-score support
0 0.87 0.89 0.88 266
1 0.79 0.76 0.78 152
accuracy 0.84 418
macro avg 0.83 0.83 0.83 418
weighted avg 0.84 0.84 0.84 418
贝叶斯优化后的xgb 在测试集上的混淆矩阵:
[[236 30]
[ 36 116]]
# --- 2. 贝叶斯优化随机森林 ---
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from skopt import BayesSearchCV
from skopt.space import Real, Categorical, Integer
from sklearn.metrics import classification_report, confusion_matrix
import time
# 定义要搜索的参数空间
search_space = {
'n_estimators': Integer(50, 500),
'max_depth': Integer(3, 20),
'min_samples_split': Integer(2, 20),
'min_samples_leaf': Integer(1, 10),
'max_features': Categorical(['sqrt', 'log2', None]),
'bootstrap': Categorical([False]), # 仅bootstrap=False
# 不包含max_samples参数(或设置为None)
'class_weight': Categorical(['balanced', None]) # 注意:balanced_subsample仅适用于bootstrap=True
}
# 创建贝叶斯优化搜索对象
bayes_search = BayesSearchCV(
estimator= RandomForestClassifier(random_state=42),
search_spaces=search_space,
n_iter=32, # 迭代次数,可根据需要调整
cv=5, # 5折交叉验证,这个参数是必须的,不能设置为1,否则就是在训练集上做预测了
n_jobs=-1,
scoring='accuracy'
)
start_time = time.time()
# 在训练集上进行贝叶斯优化搜索
bayes_search.fit(X_train, y_train)
end_time = time.time()
print(f"贝叶斯优化耗时: {end_time - start_time:.4f} 秒")
print("最佳参数: ", bayes_search.best_params_)
# 使用最佳参数的模型进行预测
best_model = bayes_search.best_estimator_
best_pred = best_model.predict(X_test)
print("\n贝叶斯优化后的随机森林 在测试集上的分类报告:")
print(classification_report(y_test, best_pred))
print("贝叶斯优化后的随机森林 在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, best_pred))
贝叶斯优化耗时: 31.0235 秒
最佳参数: OrderedDict([('bootstrap', False), ('class_weight', None), ('max_depth', 3), ('max_features', None), ('min_samples_leaf', 1), ('min_samples_split', 20), ('n_estimators', 50)])
贝叶斯优化后的随机森林 在测试集上的分类报告:
precision recall f1-score support
0 0.98 0.91 0.94 266
1 0.86 0.96 0.91 152
accuracy 0.93 418
macro avg 0.92 0.94 0.92 418
weighted avg 0.93 0.93 0.93 418
贝叶斯优化后的随机森林 在测试集上的混淆矩阵:
[[242 24]
[ 6 146]]
5. 方差筛选
# 打印标题,表明这是方差筛选的部分
print('--- 方差筛选 (Variance Threshold)---')
# 导入需要的工具库
from sklearn.feature_selection import VarianceThreshold # 方差筛选工具,用于剔除方差小的特征
# 记录开始时间,后面会计算整个过程耗时
start_time = time.time()
# 创建方差筛选器,设置方差阈值为0.01
# 阈值是指方差的最小值,低于这个值的特征会被删除(可以根据数据情况调整阈值)
selector = VarianceThreshold(threshold=0.01)
# 对训练数据进行方差筛选,fit_transform会计算每个特征的方差并剔除不满足阈值的特征
# X_train是原始训练数据,X_train_var是筛选后的训练数据
X_train_var = selector.fit_transform(X_train)
# 对测试数据应用同样的筛选规则,transform会直接用训练数据的筛选结果处理测试数据
# X_test是原始测试数据,X_test_var是筛选后的测试数据
X_test_var = selector.transform(X_test)
# 获取被保留下来的特征名称
# selector.get_support()返回一个布尔值列表,表示哪些特征被保留,这个是selector这个实例化的类的一个方法
# X_train.columns是特征的名称,结合布尔值列表可以提取保留特征的名字
selected_features_var = X_train.columns[selector.get_support()].tolist()
# 打印筛选后保留的特征数量和具体特征名称,方便查看结果
print(f"方差筛选后保留的特征数量: {len(selected_features_var)}")
print(f"保留的特征: {selected_features_var}")
# 创建一个随机森林分类模型,用于在筛选后的数据上进行训练和预测
rf_model_var = RandomForestClassifier(
bootstrap=False,
class_weight=None,
max_depth= 3,
max_features= None,
min_samples_leaf=1,
min_samples_split = 20,
n_estimators = 50
)
# 在筛选后的训练数据上训练模型
# X_train_var是筛选后的特征数据,y_train是对应的目标标签
rf_model_var.fit(X_train_var, y_train)
# 使用训练好的模型对筛选后的测试数据进行预测
# X_test_var是筛选后的测试特征数据,rf_pred_var是预测结果
rf_pred_var = rf_model_var.predict(X_test_var)
# 记录结束时间,计算整个训练和预测过程的耗时
end_time = time.time()
print(f"训练与预测耗时: {end_time - start_time:.4f} 秒")
# 打印模型在测试集上的分类报告,展示模型的性能
# 分类报告包括精确率、召回率、F1分数等指标,帮助评估模型好坏
print("\n方差筛选后随机森林在测试集上的分类报告:")
print(classification_report(y_test, rf_pred_var))
# 打印混淆矩阵,展示模型预测的详细结果
# 混淆矩阵显示了真实标签和预测标签的对应情况,比如多少样本被正确分类,多少被错分
print("方差筛选后随机森林在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, rf_pred_var))
--- 方差筛选 (Variance Threshold)---
方差筛选后保留的特征数量: 19
保留的特征: ['PassengerId', 'Sex', 'Age', 'Fare', 'Pclass_1', 'Pclass_2', 'Pclass_3', 'SibSp_0', 'SibSp_1', 'SibSp_2', 'SibSp_3', 'SibSp_4', 'Parch_0', 'Parch_1', 'Parch_2', 'Embarked_C', 'Embarked_Q', 'Embarked_S', 'Cabin_B96 B98']
训练与预测耗时: 0.0679 秒
方差筛选后随机森林在测试集上的分类报告:
precision recall f1-score support
0 0.97 0.91 0.94 266
1 0.86 0.95 0.90 152
accuracy 0.92 418
macro avg 0.91 0.93 0.92 418
weighted avg 0.93 0.92 0.92 418
方差筛选后随机森林在测试集上的混淆矩阵:
[[242 24]
[ 8 144]]
print("--- 皮尔逊相关系数筛选 ---")
from sklearn.feature_selection import SelectKBest, f_classif
start_time = time.time()
# 计算特征与目标变量的相关性,选择前k个特征(这里设为10个,可调整)
# 注意:皮尔逊相关系数通常用于回归问题(连续型目标变量),但如果目标是分类问题,可以用f_classif
k = 10
selector = SelectKBest(score_func=f_classif, k=k)
X_train_corr = selector.fit_transform(X_train, y_train)
X_test_corr = selector.transform(X_test)
# 获取筛选后的特征名
selected_features_corr = X_train.columns[selector.get_support()].tolist()
print(f"皮尔逊相关系数筛选后保留的特征数量: {len(selected_features_corr)}")
print(f"保留的特征: {selected_features_corr}")
# 训练随机森林模型
rf_model_corr = RandomForestClassifier(
bootstrap=False,
class_weight=None,
max_depth= 3,
max_features= None,
min_samples_leaf=1,
min_samples_split = 20,
n_estimators = 50
)
rf_model_corr.fit(X_train_corr, y_train)
rf_pred_corr = rf_model_corr.predict(X_test_corr)
end_time = time.time()
print(f"训练与预测耗时: {end_time - start_time:.4f} 秒")
print("\n皮尔逊相关系数筛选后随机森林在测试集上的分类报告:")
print(classification_report(y_test, rf_pred_corr))
print("皮尔逊相关系数筛选后随机森林在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, rf_pred_corr))
--- 皮尔逊相关系数筛选 ---
皮尔逊相关系数筛选后保留的特征数量: 10
保留的特征: ['Sex', 'Fare', 'Pclass_1', 'Pclass_3', 'SibSp_1', 'Parch_0', 'Parch_1', 'Embarked_C', 'Embarked_S', 'Cabin_B96 B98']
训练与预测耗时: 0.0590 秒
皮尔逊相关系数筛选后随机森林在测试集上的分类报告:
precision recall f1-score support
0 0.98 1.00 0.99 266
1 1.00 0.96 0.98 152
accuracy 0.99 418
macro avg 0.99 0.98 0.98 418
weighted avg 0.99 0.99 0.99 418
皮尔逊相关系数筛选后随机森林在测试集上的混淆矩阵:
[[266 0]
[ 6 146]]
6. 预测结果保存
test_data_new = pd.read_csv('test.csv')
test_ids = test_data_new['PassengerId']
prediction_df = pd.DataFrame({
"id": test_ids, # 测试集唯一ID(用于追溯样本)
"prediction": rf_pred_corr # 模型预测结果(rf_pred_corr)
})
# 可选:添加预测概率(若需要概率值,如分类任务的置信度)
# 注意:仅分类模型支持predict_proba(),回归模型无此方法
if hasattr(rf_model_corr, "predict_proba"):
# 取正类的概率(二分类通常是第1列,多分类需根据类别调整索引)
pred_proba = rf_model_corr.predict_proba(X_test_corr)[:, 1]
save_path = "rf_corr_predictions.csv"
prediction_df.to_csv(
save_path,
index=False, # 禁止保存行索引(必加!否则格式混乱)
encoding="utf-8" # 编码格式,避免中文乱码(若有中文ID需加)
)
# 3. 验证保存结果(可选,确认文件正常生成)
print(f"预测结果已保存到:{save_path}")
print("\n保存的预测结果前5行:")
print(prediction_df.head()) # 打印前5行,确认数据正确
print(f"\n共保存 {len(prediction_df)} 条预测结果")
预测结果已保存到:rf_corr_predictions.csv
保存的预测结果前5行:
id prediction
0 892 0
1 893 1
2 894 0
3 895 0
4 896 1
共保存 418 条预测结果
更多推荐


所有评论(0)