复习日

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

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.91630.81970.98680.8955
XGBoost0.84690.83330.72370.7746
随机森林0.82300.72670.82240.7716
LightGBM0.82060.76190.73680.7492
决策树0.79190.67960.80920.7387
SVM0.64830.64710.07240.1302
KNN0.64590.54000.17760.2673
朴素贝叶斯0.34930.34850.90790.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 条预测结果

@浙大疏锦行

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐