Titanic

Titanic

写在前面

这个是身为菜鸟的我的第一场 Kaggle 竞赛,博客内容也大体是搜集代码,熟悉流程,成功提交后总结可用经验


1. Kaggle 官网教程

  1. 解读并展示三个数据,最后一个gender_submission.csv 完全按照性别预测,也提示了提交格式(两列,序号,是否存活)

  2. 网页提供在线编辑代码平台

  3. 决策树

    from sklearn.ensemble import RandomForestClassifier
    
    y = train_data["Survived"]
    
    features = ["Pclass", "Sex", "SibSp", "Parch"]
    X = pd.get_dummies(train_data[features])
    X_test = pd.get_dummies(test_data[features])
    
    model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
    model.fit(X, y)
    predictions = model.predict(X_test)
    
    output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})
    output.to_csv('my_submission.csv', index=False)
    print("Your submission was successfully saved!")
    
  4. 提供机器学习课程https://www.kaggle.com/learn/intro-to-machine-learning

2. Kaggle 机器学习课程

  1. How models work

    • define a model
    • fit a model
    • make predictions
    • evaluate our model
  2. Basic data exploration

    • data.describle() 对数值型数据进行统计
    • data.head()
    • data.info() 大概知道数据缺失情况
  3. Your first machine learning model

    • 选择一部分特征用于训练模型
      • m_features=[‘a’,‘b’,‘c’]
      • x=m_data[m_features]
    • 决策树
      • my_model=DecisionTreeRegressor(random_state=1)
      • "random_state=某个数"可以确保每一次运行时得到相同的结果
  4. Model validation

    • MAE(mean absolute error) 平均绝对误差——误差绝对值取平均

      • mean_absolute_error(y,predict_y)
    • validation data 不能用训练模型的数据来检测模型的质量,要额外预留出一部分数据

    • train_test_split

      • train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 0)
        
  5. Underfitting and Overfitting

    • 欠拟合(树过浅):一个模型无法捕捉数据内重要的特征和模式,导致它在训练数据中表现仍然很糟
    • 过拟合(树过深):模型对于训练数据的预测效果非常好,但是在新数据上的效果是不可靠的
    • max_leaf_nodes参数能够很好的控制树的深度
    • data=data.dropna(axis=0) 丢弃含有缺失值的行
  6. Random forests

    • 随机森林使用了许多树,它通过平均每个分量树的预测来进行预测。
    • 默认参数也可以效果很好
    • mymodel=RandomForestRegressor(random_state=1)

3. csdn博客——逻辑回归

来源 http://blog.csdn.net/han_xiaoyang/article/details/49797143

应用机器学习,千万不要一上来就试图做到完美,先撸一个baseline的model出来,再进行后续的分析步骤,一步步提高,所谓后续步骤可能包括『分析model现在的状态(欠/过拟合),分析我们使用的feature的作用大小,进行feature selection,以及我们模型下的bad case和产生的原因』等等

数据认识、对特殊点和离群点的处理、特征工程、模型融合

  1. data.info() data.describe()
  2. matplotlib.pyplot 画图展示以各属性为标准乘客分布(柱状图、折线图)
  3. 统计各属性与获救结果的关联
  4. 将Cabin有无数据处理成Yes、No两种类型
  5. 缺失值的处理方式
    • 样本多,直接舍弃
    • 样本适中,且该属性为非连续值特征属性,就把NaN作为一个新类别
    • 样本适中,且该属性为连续值特征属性,设置step然后离散化
    • 缺失值的个数不多也可以拟合补全
  6. 用随机森林拟合缺失的年龄数据
  7. 由于逻辑回归输入的特征均为数值型特征,因此需将类目型的特征因子化。因子化:将非数值型特征平展成多个属性,如Cabin_yes,Cabin_no两个属性,在每个属性下取值0、1
    • pd.get_dummies(data,prefix=前缀)按照data的值添加虚拟变量
    • pd.concat() 数据的拼接
    • pd.drop([’’,’’],axis=1,inplace=true) #true表示原数组内容直接被修改
  8. 使用逻辑回归与梯度下降,注意将数值归一化
    • scaler=preprocessing.StandardScaler()
  9. 交叉验证可以帮助我们检验点子是否合理,bad case直接拿出来人眼审阅,也许可以印证一些猜测,那就将这些优化的想法优先级放高一点
  10. 改善过拟合
    • 特征选择,选出特征的子集训练
    • 提供更多的数据
  11. 改善欠拟合
    • 需要更多的特征
    • 需要更复杂的模型
  12. learning_curve分辨模型欠拟合还是过拟合
    • 过拟合:训练集上得分高,交叉验证集上得分低,中间的gap较大
  13. 模型融合
    • 较好缓解训练过程中的过拟合问题,对结果的准确度提升有帮助
    • bagging——不要用全部的训练集训练模型,而是取训练集的一个subset作训练。这样我们虽然用的是同一个机器学习算法,但是得到的模型不同,即使过拟合也是在子训练集上过拟合

4. Kaggle代码——随机森林

来源 https://www.kaggle.com/funxexcel/titanic-solution-random-forest

  1. 原始数据处理(train、test合并一起处理)
    • age、fare中值填充缺失值
    • embarked 众数填充类别缺失值
    • age 连续型属性按照区间划分分类
    • name 用头衔替代,明确身份(如Mr. /Dr./Officer.
    • Carbin只取字符串第一个字符
    • 构造Family_Size 和 IsAlone 属性
  2. 训练随机森林模型(参数)
  3. 尝试——相同数据处理方法,使用随机森林分类器默认参数,得分0.7655
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值