根据以上两篇的分析,下面我们还要对数据进行处理,观察Age和Fare两个属性,乘客的数值变化幅度较大!根据逻辑回归和梯度下降的了解,如果属性值之间scale差距较大,将对收敛速度造成较大影响,甚至不收敛!因此,我们需要运用scikit-learn里面的preprocessing模块对Age和Fare两个属性做一个scaling,即将其数值转化为[-1,1]范围内。

1 # 接下来我们将一些变化幅度较大的特征化到[-1,1]之内,这样可以加速logistic regression的收敛
2 import sklearn.preprocessing as preprocessing
3 scaler = preprocessing.StandardScaler()
4 age_scale_param = scaler.fit(df['Age'])
5 df['Age_scaled'] = scaler.fit_transform(df['Age'],age_scale_param)
6 fare_scale_param = scaler.fit(df['Fare'])
7 df['Fare_scaled'] = scaler.fit_transform(df['Fare'],fare_scale_param)
8 print(df)

PassengerId

Survived

Age

SibSp

Parch

Fare

Cabin_No

Cabin_Yes

Embarked_C

Embarked_Q

Embarked_S

Sex_female

Sex_male

Pclass_1

Pclass_2

Pclass_3

Age_scaled

Fare_scaled

0

1

0

22.000000

1

0

7.2500

1

0

0

0

1

0

1

0

0

1

-0.561417

-0.502445

1

2

1

38.000000

1

0

71.2833

0

1

1

0

0

1

0

1

0

0

0.613177

0.786845

2

3

1

26.000000

0

0

7.9250

1

0

0

0

1

1

0

0

0

1

-0.267768

-0.488854

3

4

1

35.000000

1

0

53.1000

0

1

0

0

1

1

0

1

0

0

0.392941

0.420730

4

5

0

35.000000

0

0

8.0500

1

0

0

0

1

0

1

0

0

1

0.392941

-0.486337

5

6

0

23.828953

0

0

8.4583

1

0

0

1

0

0

1

0

0

1

-0.427149

-0.478116

6

7

0

54.000000

0

0

51.8625

0

1

0

0

1

0

1

1

0

0

1.787771

0.395814

7

8

0

2.000000

3

1

21.0750

1

0

0

0

1

0

1

0

0

1

-2.029659

-0.224083

8

9

1

27.000000

0

2

11.1333

1

0

0

0

1

1

0

0

0

1

-0.194356

-0.424256

9

10

1

14.000000

1

0

30.0708

1

0

1

0

0

1

0

0

1

0

-1.148714

-0.042956

10

11

1

4.000000

1

1

16.7000

0

1

0

0

1

1

0

0

0

1

-1.882835

-0.312172

11

12

1

58.000000

0

0

26.5500

0

1

0

0

1

1

0

1

0

0

2.081420

-0.113846

12

13

0

20.000000

0

0

8.0500

1

0

0

0

1

0

1

0

0

1

-0.708241

-0.486337

13

14

0

39.000000

1

5

31.2750

1

0

0

0

1

0

1

0

0

1

0.686589

-0.018709

14

15

0

14.000000

0

0

7.8542

1

0

0

0

1

1

0

0

0

1

-1.148714

-0.490280

15

16

1

55.000000

0

0

16.0000

1

0

0

0

1

1

0

0

1

0

1.861183

-0.326267

16

17

0

2.000000

4

1

29.1250

1

0

0

1

0

0

1

0

0

1

-2.029659

-0.061999

17

18

1

32.066493

0

0

13.0000

1

0

0

0

1

0

1

0

1

0

0.177586

-0.386671

18

19

0

31.000000

1

0

18.0000

1

0

0

0

1

1

0

0

0

1

0.099292

-0.285997

19

20

1

29.518205

0

0

7.2250

1

0

1

0

0

1

0

0

0

1

-0.009489

-0.502949

20

21

0

35.000000

0

0

26.0000

1

0

0

0

1

0

1

0

1

0

0.392941

-0.124920

21

22

1

34.000000

0

0

13.0000

0

1

0

0

1

0

1

0

1

0

0.319529

-0.386671

22

23

1

15.000000

0

0

8.0292

1

0

0

1

0

1

0

0

0

1

-1.075302

-0.486756

23

24

1

28.000000

0

0

35.5000

0

1

0

0

1

0

1

1

0

0

-0.120944

0.066360

24

25

0

8.000000

3

1

21.0750

1

0

0

0

1

1

0

0

0

1

-1.589186

-0.224083

25

26

1

38.000000

1

5

31.3875

1

0

0

0

1

1

0

0

0

1

0.613177

-0.016444

26

27

0

29.518205

0

0

7.2250

1

0

1

0

0

0

1

0

0

1

-0.009489

-0.502949

27

28

0

19.000000

3

2

263.0000

0

1

0

0

1

0

1

1

0

0

-0.781653

4.647001

28

29

1

22.380113

0

0

7.8792

1

0

0

1

0

1

0

0

0

1

-0.533512

-0.489776

29

30

0

27.947206

0

0

7.8958

1

0

0

0

1

0

1

0

0

1

-0.124820

-0.489442

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

861

862

0

21.000000

1

0

11.5000

1

0

0

0

1

0

1

0

1

0

-0.634829

-0.416873

862

863

1

48.000000

0

0

25.9292

0

1

0

0

1

1

0

1

0

0

1.347299

-0.126345

863

864

0

10.888325

8

2

69.5500

1

0

0

0

1

1

0

0

0

1

-1.377148

0.751946

864

865

0

24.000000

0

0

13.0000

1

0

0

0

1

0

1

0

1

0

-0.414592

-0.386671

865

866

1

42.000000

0

0

13.0000

1

0

0

0

1

1

0

0

1

0

0.906826

-0.386671

866

867

1

27.000000

1

0

13.8583

1

0

1

0

0

1

0

0

1

0

-0.194356

-0.369389

867

868

0

31.000000

0

0

50.4958

0

1

0

0

1

0

1

1

0

0

0.099292

0.368295

868

869

0

25.977889

0

0

9.5000

1

0

0

0

1

0

1

0

0

1

-0.269391

-0.457142

869

870

1

4.000000

1

1

11.1333

1

0

0

0

1

0

1

0

0

1

-1.882835

-0.424256

870

871

0

26.000000

0

0

7.8958

1

0

0

0

1

0

1

0

0

1

-0.267768

-0.489442

871

872

1

47.000000

1

1

52.5542

0

1

0

0

1

1

0

1

0

0

1.273886

0.409741

872

873

0

33.000000

0

0

5.0000

0

1

0

0

1

0

1

1

0

0

0.246117

-0.547748

873

874

0

47.000000

0

0

9.0000

1

0

0

0

1

0

1

0

0

1

1.273886

-0.467209

874

875

1

28.000000

1

0

24.0000

1

0

1

0

0

1

0

0

1

0

-0.120944

-0.165189

875

876

1

15.000000

0

0

7.2250

1

0

1

0

0

1

0

0

0

1

-1.075302

-0.502949

876

877

0

20.000000

0

0

9.8458

1

0

0

0

1

0

1

0

0

1

-0.708241

-0.450180

877

878

0

19.000000

0

0

7.8958

1

0

0

0

1

0

1

0

0

1

-0.781653

-0.489442

878

879

0

27.947206

0

0

7.8958

1

0

0

0

1

0

1

0

0

1

-0.124820

-0.489442

879

880

1

56.000000

0

1

83.1583

0

1

1

0

0

1

0

1

0

0

1.934596

1.025945

880

881

1

25.000000

0

1

26.0000

1

0

0

0

1

1

0

0

1

0

-0.341180

-0.124920

881

882

0

33.000000

0

0

7.8958

1

0

0

0

1

0

1

0

0

1

0.246117

-0.489442

882

883

0

22.000000

0

0

10.5167

1

0

0

0

1

1

0

0

0

1

-0.561417

-0.436671

883

884

0

28.000000

0

0

10.5000

1

0

0

0

1

0

1

0

1

0

-0.120944

-0.437007

884

885

0

25.000000

0

0

7.0500

1

0

0

0

1

0

1

0

0

1

-0.341180

-0.506472

885

886

0

39.000000

0

5

29.1250

1

0

0

1

0

1

0

0

0

1

0.686589

-0.061999

886

887

0

27.000000

0

0

13.0000

1

0

0

0

1

0

1

0

1

0

-0.194356

-0.386671

887

888

1

19.000000

0

0

30.0000

0

1

0

0

1

1

0

1

0

0

-0.781653

-0.044381

888

889

0

16.232379

1

2

23.4500

1

0

0

0

1

1

0

0

0

1

-0.984830

-0.176263

889

890

1

26.000000

0

0

30.0000

0

1

1

0

0

0

1

1

0

0

-0.267768

-0.044381

890

891

0

32.000000

0

0

7.7500

1

0

0

1

0

0

1

0

0

1

0.172705

-0.492378

891 rows × 18 columns

接下来我们把需要的feature字段取出来,转成numpy格式,使用scikit-learn中的LogisticRegression建模。

1 from sklearn import linear_model
2 train_df = df.filter(regex='Survived|Age_.*|SibSp|Parch|Fare_.*|Cabin_.*|Embarked_.*|Sex_.*|Pclass_.*')
3 train_np = train_df.as_matrix()
4 y = train_np[:,0]
5 X = train_np[:,1:]
6 clf = linear_model.LogisticRegression(C=1.0,penalty='l1',tol=1e-6)
7 clf.fit(X,y)
8 print(clf)

接下来我们需要对测试数据集和训练数据集做一样的操作

 1 # #首先用同样的RandomForestRegressor模型填上丢失的年龄
 2 data_test = pd.read_csv("test.csv")
 3 data_test.loc[ (data_test.Fare.isnull()), 'Fare' ] = 0
 4
 5 tmp_df = data_test[['Age','Fare', 'Parch', 'SibSp', 'Pclass']]
 6 null_age = tmp_df[data_test.Age.isnull()].as_matrix()
 7 # 根据特征属性X预测年龄并补上
 8 X = null_age[:, 1:]
 9 predictedAges = rfr.predict(X)
10 data_test.loc[ (data_test.Age.isnull()), 'Age' ] = predictedAges
11
12 data_test = set_Cabin_type(data_test)
13 dummies_Cabin = pd.get_dummies(data_test['Cabin'], prefix= 'Cabin')
14 dummies_Embarked = pd.get_dummies(data_test['Embarked'], prefix= 'Embarked')
15 dummies_Sex = pd.get_dummies(data_test['Sex'], prefix= 'Sex')
16 dummies_Pclass = pd.get_dummies(data_test['Pclass'], prefix= 'Pclass')
17
18
19 df_test = pd.concat([data_test, dummies_Cabin, dummies_Embarked, dummies_Sex, dummies_Pclass], axis=1)
20 df_test.drop(['Pclass', 'Name', 'Sex', 'Ticket', 'Cabin', 'Embarked'], axis=1, inplace=True)
21 df_test['Age_scaled'] = scaler.fit_transform(df_test['Age'], age_scale_param)
22 df_test['Fare_scaled'] = scaler.fit_transform(df_test['Fare'], fare_scale_param)
23
24 test = df_test.filter(regex='Age_.*|SibSp|Parch|Fare_.*|Cabin_.*|Embarked_.*|Sex_.*|Pclass_.*')
25 predictions = clf.predict(test)
26 result = pd.DataFrame({'PassengerId':data_test['PassengerId'].as_matrix(), 'Survived':predictions.astype(np.int32)})
27 result.to_csv("logistic_regression_predictions.csv", index=False)

最后我们将预测的结果保存在logistic_regression_predictions.csv文件里。到这里只是简单分析过后的一个baseline系统。

下面要判定一下当前模型所处状态(欠拟合或者过拟合)

这里面有个问题,前面不断地做特征工程,产生的特征越来越多,用这些特征来训练模型,会对训练集拟合得越来越好,同时也可能在逐步丧失泛化能力,从而在待测数据上表现不佳,也就是发生过拟合问题。

从另一个角度上说,如果模型在待测数据上表现不佳,除掉上述说的过拟合问题,有时候也存在欠拟合问题,也就是说在训练集上拟合的结果也不好。

对于过拟合和欠拟合,有两种优化方式:

1.过拟合

1)做一个feature selection,选较好的feature的subset来做training

2)提供更多的数据,从而弥补原始数据偏差,从而学习到的模型更准确

3)采用正则化,正则化方法包括L0正则、L1正则和L2正则,而正则一般是在目标函数之后加上对于的范数。但是在机器学习中一般使用L2正则。

2.欠拟合

1)添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段。

2)添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。

3)减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

 scikit-learn里面的learning curve可以帮助我们判定模型现在所处的状态。这里我们画一下最先得到的baseline model的learning curve。

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 from sklearn.learning_curve import learning_curve
 4
 5 #用sklearn的learning_curve得到training_score和cv_score,使用matplotlib画出learning curve
 6
 7 def plot_learning_curve(estimator,title,X,y,ylim=None,cv=None,n_jobs=1,train_sizes=np.linspace(.05,1.,20),verbose=0,plot=True):
 8     """
 9        画出data在某模型上的learning curve.
10        参数解释
11        ----------
12        estimator : 你用的分类器。
13        title : 表格的标题。
14        X : 输入的feature,numpy类型
15        y : 输入的target vector
16        ylim : tuple格式的(ymin, ymax), 设定图像中纵坐标的最低点和最高点
17        cv : 做cross-validation的时候,数据分成的份数,其中一份作为cv集,其余n-1份作为training(默认为3份)
18        n_jobs : 并行的的任务数(默认1)
19        """
20     train_sizes, train_scores, test_scores = learning_curve(
21         estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes, verbose=verbose)
22
23     train_scores_mean = np.mean(train_scores, axis=1)
24     train_scores_std = np.std(train_scores, axis=1)
25     test_scores_mean = np.mean(test_scores, axis=1)
26     test_scores_std = np.std(test_scores, axis=1)
27
28     if plot:
29         plt.figure()
30         plt.title(title)
31         if ylim is not None:
32             plt.ylim(*ylim)
33         plt.xlabel('train_sample')
34         plt.ylabel('score')
35         plt.gca().invert_yaxis()
36         plt.grid()
37
38         plt.fill_between(train_sizes, train_scores_mean - train_scores_std, train_scores_mean + train_scores_std,
39                          alpha=0.1, color="b")
40         plt.fill_between(train_sizes, test_scores_mean - test_scores_std, test_scores_mean + test_scores_std,
41                          alpha=0.1, color="r")
42         plt.plot(train_sizes, train_scores_mean, 'o-', color="b", label="train_score")
43         plt.plot(train_sizes, test_scores_mean, 'o-', color="r", label="cross_validation_score")
44
45         plt.legend(loc='best')
46         plt.draw()
47         plt.gca().invert_yaxis()
48         plt.show()
49
50     midpoint = ((train_scores_mean[-1] + train_scores_std[-1]) + (test_scores_mean[-1] - test_scores_std[-1])) / 2
51     diff = (train_scores_mean[-1] + train_scores_std[-1]) - (test_scores_mean[-1] - test_scores_std[-1])
52     return midpoint, diff
53
54 plot_learning_curve(clf, u"学习曲线", X, y)

结果如下(0.80656968448540245, 0.018258876711338634)

从得到的结果来看,尽管learn——curve没有理论推导的光滑,但是仍可以看出,训练集和交叉验证集上的得分曲线走势还是符合预期的。

目前的曲线来看,我们的model并不处于overfitting的状态(overfitting的表现一般是训练集得分高,交叉验证集得分低很多,中间的gap比较大)。因此我们可以再做些feature engineering的工作,添加一些新的特征或者组合特征到模型中。

转载于:https://www.cnblogs.com/freeman818/p/7867071.html

kaggle-泰坦尼克号Titanic-3相关推荐

  1. python数据挖掘项目实战 预测_Python机器学习/数据挖掘项目实战 泰坦尼克号Titanic生存预测 Kaggle入门比赛...

    # Titanic : Machine Learning from DisasterQuestion要求你建立一个预测模型来回答这个问题:"什么样的人更有可能生存?"使用乘客数据 ...

  2. Kaggle泰坦尼克号生存预测挑战——模型建立、模型调参、融合

    Kaggle泰坦尼克号生存预测挑战 这是kaggle上Getting Started 的Prediction Competition,也是比较入门和简单的新人赛,我的最好成绩好像有进入top8%,重新 ...

  3. Kaggle泰坦尼克号生存预测挑战——数据分析

    Kaggle泰坦尼克号生存预测挑战 这是kaggle上Getting Started 的Prediction Competition,也是比较入门和简单的新人赛,我的最好成绩好像有进入top8%,重新 ...

  4. Kaggle泰坦尼克号船难--逻辑回归预测生存率

    Kaggle泰坦尼克号船难–逻辑回归预测生存率#一.题目 https://www.kaggle.com/c/titanic 二.题意分析 train.csv中有891条泰坦尼克号乘客的数据,包括这些乘 ...

  5. kaggle泰坦尼克号_Kaggle基础知识:泰坦尼克号比赛

    kaggle泰坦尼克号 Kaggle is a site where people create algorithms and compete against machine learning pra ...

  6. 决策树详解python基于Kaggle的Titanic数据实现决策树分类

    决策树详解&&python基于Kaggle的Titanic数据实现决策树分类 一 决策树算法详解 1.前期准备 实验目的准备 2.决策树概述 2.1 决策树 2.2 ID3算法原理 2 ...

  7. Kaggle 泰坦尼克号生存分析(数据概览和缺失值处理部分)

    Kaggle 泰坦尼克号生存分析 数据概览 #导入pandas库方便数据读取和预处理,导入os库方便修改工作路径 import os import pandas as pd #读取数据 os.chdi ...

  8. 泰坦尼克号Titanic生存分析(SPSS、R)

    目录 泰坦尼克号Titanic生存分析 查看数据基本信息 分析查看其它因子下的存活率情况: 缺失值处理 相关性分析 建立Logistic模型 模型改进 在上述分析的基础上使用其他模型(SVM.随机森林 ...

  9. Kaggle Spaceship Titanic打卡活动Day1

    Kaggle Spaceship Titanic打卡活动 尝试了一个coggle科学的打卡活动(Coggle 30 Days of ML(22年10月)),记录一下学习过程! Day 1 比赛的报名与 ...

  10. Kaggle泰坦尼克号数据机器学习实战:从缺失值处理、数据探索性分析、组合特征生成到多模型构建

    Kaggle泰坦尼克号数据机器学习实战:从缺失值处理.数据探索性分析.组合特征生成到多模型构建 泰坦尼克号的沉没是历史上最为人熟知的海难事件之一. 1912 年 4 月 15 日,在她的处女航中,泰坦 ...

最新文章

  1. php完美实现下载远程图片保存到本地(保存微信头像)
  2. 深入理解JVM——(三)为什么JVM新生代需要两个Survivor区
  3. Spark+hadoop+mllib及相关概念与操作笔记
  4. ida android sign加密,最右sign-v2签名算法追踪及逆向还原
  5. 实现BFS之“营救”
  6. MyBatis(1):MyBatis入门
  7. 人工智能 | 自动驾驶与人工智能前沿研究报告(概念篇)
  8. JAVA国际化输出日期格式
  9. tcp_handle_req: Made 4 read attempts but message is not complete yet - closing connection
  10. Vue项目中Table设置 render 函数
  11. Windows中安装MongoDB以及studio3t
  12. 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)
  13. kali linux中文乱码解决,kali-google-chrome中文乱码问题解决方法
  14. 【Elasticsearch】Elasticsearch 热点线程 hot_threads
  15. leetcode----------Excel Sheet Column Number
  16. H3C OSPF 单区域、多区域(虚连接)配置
  17. 银联在线支付、第三方快捷支付三种快捷支付模式有何区别?
  18. 由一些公司的笔试题目想到的---模拟电路,数字电路最基本应该知道哪些
  19. java gbk编码_java 中文转GBK码
  20. spss相关分析(spss统计分析实验教程,谢蕾蕾)

热门文章

  1. python中sleep函数用法_sleep函数函数介绍与使用方法详解
  2. 科普小知识之生活中的传热学
  3. matlab模拟流动传热,基于MATLAB的快速式汽-水换热器传热与流动特性研究
  4. EasyExcel单元格数据超过32767报错问题处理
  5. 计算机类公务员2019,2019甘肃公务员考试职位表解读:超三成不限专业
  6. 【JavaScript】轻松入门
  7. HTTP 中的 Cookie
  8. 使用PLCSIM Advanced仿真博途S7-1500 OPC UA
  9. 通过例子讲解回溯法、分枝限界法
  10. 什么是区块链,为什么数据不可被篡改