Kaggle竞赛思路总结(sklearn方法)


我们借助sklearn库来完成kaggle竞赛,下面主要总结sklearn库在各个步骤中的作用以及基本kaggle竞赛思路和流程。 python3代码链接

一、获取,加载,预览数据

获取,加载,预览数据是为构造特征工程以及模型建立做准备。

  • 加载数据集,若是csv文件,用pandas.read_csv()读取为DataFrame格式文件。
  • 总体预览数据的基本信息,了解每列数据的含义,数据的格式等。
  • 数据初步分析,使用统计学与绘图来初步了解数据之间的相关性。

二、特征工程

见之前的博客《特征工程》
在数据预处理之前,一般会将测试集和训练集合并,处理结束后分开

1 数据预处理

见之前博客《机器学习之数据处理》
数据处理sklearn有一套流程,导入库如下。

import sklearn.preprocessing as preprocessing

主要三个方面

  • 数据缩放(scaling)及标准化处理(无量纲化),归一化
  • 缺失值处理(填充/舍弃,Imputer)
  • 类别特征处理(独热编码)

2 特征构建

属性分割和结合也是特征构建时常使用的方法。

3 特征提取

  • 主成分分析法(PCA)
  • 线性判别分析法(LDA)

4 特征选择

特征选择是依靠统计学方法或者于机器学习模型本身的特征选择。
统计学方法

  • 皮尔森相关系数法
  • 方差选择法(属于Filter方法)
  • 卡方检验(属于Filter方法)
  • 递归特征消除法(属于Wrapper方法)

基于机器学习模型的特征选择方法

  • 基于L1惩罚项的逻辑回归特征选择法
  • 基于树模型的特征选择法

三、模型选择

特征工程处理完之后,在这一步我们首先要分析自己数据的类型和问题类型,回归or预测,无监督学习or有监督学习,分析清楚要用什么模型来做。

sklearn有 线性回归模型,逻辑回归,朴素贝叶斯算法,决策树,支持向量机,KNN,集成方法(XGBClassifier,AdaBoostClassifier,BaggingClassifier,投票方法),随机森林等模型

1、线性回归模型

from sklearn.linear_model import LinearRegression
model = LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1) 

参数说明

  • fit_intercept:是否计算截距。False-模型没有截距
  • normalize: 当fit_intercept设置为False时,该参数将被忽略。 如果为真,则回归前的回归系数X将通过减去平均值并除以l2-范数而归一化。
  • n_jobs:指定线程数

2、逻辑回归模型

from sklearn.linear_model import LogisticRegression
model = LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0,
fit_intercept=True, intercept_scaling=1, class_weight=None, 
random_state=None, solver=’liblinear’, max_iter=100, multi_class=’ovr’, verbose=0, warm_start=False, n_jobs=1)

参数说明

  • penalty:使用指定正则化项(默认:l2)
  • dual: n_samples > n_features取False(默认)
  • C:正则化强度的反,值越小正则化强度越大
  • n_jobs: 指定线程数
  • random_state:随机数生成器
  • fit_intercept: 是否需要常量

3 、朴素贝叶斯算法

from sklearn import naive_bayes
model = naive_bayes.GaussianNB() # 高斯贝叶斯
model = naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
model = naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)

参数说明

  • alpha:平滑参数
  • fit_prior:是否要学习类的先验概率;false-使用统一的先验概率
  • class_prior: 是否指定类的先验概率;若指定则不能根据参数调整
  • binarize: 二值化的阈值,若为None,则假设输入由二进制向量组成

4、决策树

from sklearn import tree 
model = tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None, 
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,
max_features=None, random_state=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
class_weight=None, presort=False)

参数说明

  • criterion :特征选择准则gini/entropy
  • max_depth:树的最大深度,None-尽量下分
  • min_samples_split:分裂内部节点,所需要的最小样本
  • min_samples_leaf:叶子节点所需要的最小样本数
  • max_features: 寻找最优分割点时的最大特征数
  • max_leaf_nodes:优先增长到最大叶子节点数
  • min_impurity_decrease:如果这种分离导致杂质的减少大于或等于这个值,则节点将被拆分。

5、支持向量机SVM

from sklearn.svm import SVC
model = SVC(C=1.0, kernel=’rbf’, gamma=’auto’)

参数说明

  • C:误差项的惩罚参数C
  • gamma: 核相关系数。浮点数,If gamma is ‘auto’ then 1/n_features will be used instead.

6、KNN

 from sklearn import neighbors
 model = neighbors.KNeighborsClassifier(n_neighbors=5, n_jobs=1) # 分类 model = neighbors.KNeighborsRegressor(n_neighbors=5, n_jobs=1) # 回归

参数说明

  • n_neighbors: 使用邻居的数目
  • n_jobs:并行任务数

四、模型评估与参数选择

见之前博客《交叉验证》
可以用交叉验证来验证模型,常用交叉验证函数

  • cross_val_score(交叉验证得分)
  • train_test_split(划分训练集)
  • cross_val_predict(返回estimator 的分类结果)
  • cross_validate(返回有关拟合时间,训练和测试分数)
  • GridSearchCV(给定参数空间,返回最优参数和得分)
  • learning_curve(学习曲线)
    (直接调用函数plot_learning_curve绘制train_scores, test_scores)
  • 验证曲线validation_curve)
  • (在validation curve中,如果training score和validation score都很低,则说明为underfitting,如果training score很高,而validation score很低,则说明为overfitting)
    验证曲线和学习曲线的区别是,验证曲线横轴为某个超参数的一系列值,由此来看不同参数设置下模型准确率(纵轴为准确率),而学习曲线横轴为不同训练集大小纵轴为准确率,都是描述训练误差与验证误差的。

五、保存模型

训练完成后,我们可以将我们训练好的model保存到本地,或者放到线上供用户使用,保存训练好的model主要有下面两种方式:
1、保存为pickle文件

import pickle
#保存模型
    with open('model.pickle', 'wb') as f:
        pickle.dump(model, f)
  
 #读取模型
    with open('model.pickle', 'rb') as f:
        model = pickle.load(f)
    model.predict(X_test)

2、sklearn自带方法joblib

from sklearn.externals import joblib
#保存模型
    joblib.dump(model, 'model.pickle')
#载入模型
    model = joblib.load('model.pickle')

六、总结

对于任何机器学习问题,先用自己会的算法撸一个baseline的model出来,在慢慢优化,再根据在问题的结果过程中提高对数据的认识,优化数据中的特殊点/离群点的分析和处理,认真进行特征工程处理,以及模型融合。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值