365体育备用网址绝大多数交锋依旧颇brute,记录下

Step1: Exploratory Data Analysis

EDA,也就是是针对性数码举办批判性的剖析,一般就因故到pandas和matplotlib就丰富了。EDA一般包括:

  1. 每个feature的意思,feature的花色,相比较灵通之代码如下
    df.describe()
    df[‘Category’].unique()
  2. 圈是不是存在missing value
    df.loc[df.Dates.isnull(),’Dates’]
  3. 每个特征下的数据分布,可以就此boxplot或者hist来拘禁
    %matplotlib inline
    import matplotlib.pyplot as plt
    df.boxplot(column=’Fare’, by = ‘Pclass’)
    plt.hist(df[‘Fare’], bins = 10, range
    =(df[‘Fare’].min(),df[‘Fare’].max()))
    plt.title(‘Fare >distribution’)
    plt.xlabel(‘Fare’)
    plt.ylabel(‘Count of Passengers’)
    #如果变量是categorical的,想看distribution,则好:
    df.PdDistrict.value_counts().plot(kind=’bar’, figsize=(8,10))
  4. 假诺想看四只feature之间的联立情状,则好为此pandas的groupby,
    temp = pd.crosstab([df.Pclass, df.Sex],
    df.Survived.astype(bool))
    temp.plot(kind=’bar’, stacked=True, color=[‘red’,’blue’],
    grid=False)

于这步成功之后,要指向以下几点有盖通晓

  • 精通每个特征的含义
  • 万一知哪特点是有效的,那个特色哪些是直可以就此底,哪些需要通过变换才会用,为随后的特点工程召开准备

进入5%

https://dnc1994.com/2016/04/rank-10-percent-in-first-kaggle-competition/

有人总括 Kaggle 竞赛是 “Feature 为主,调参和 Ensemble 为辅”,

Feature Selection 最实用的法子呢尽管是看 Random Forest 操练截止以后得的
Feature Importance 了。

扣押 Feature Importance
对于一些数据通过脱敏处理的斗更加要。这得免受你浪费大把时间在探讨一个免重大之变量的含义及。

这里要首要出口一下 Xgboost 的调参。通常认为针对它性能影响比生之参数有:

eta:每一次迭代形成后更新权重时的涨幅。越聊磨炼越慢。

num_round:总共迭代的次数。

subsample:锻练每株树时用来训练的多寡占总体之比例。用于防止Overfitting。

colsample_bytree:训练每棵树时用来锻炼之特征的百分比,类似
RandomForestClassifier 的 max_features。

max_depth:每棵树之极端老深度限制。与 Random Forest 不同,Gradient
Boosting 假使不对准纵深加以限定,最终是碰头 Overfit 的。

early_stopping_rounds:用于控制在 Out Of 山姆ple
的验证集上连续多少个迭代的分数都不曾提升后虽提前终止磨练。用于制止Overfitting。

貌似的调参步骤是:

将训练多少的平局部划出来作为验证集。

预先拿 eta 设得相比较高(比如 0.1),num_round 设为 300 ~ 500。

用 Grid Search 对此外参数举行搜寻

逐步将 eta 降低,找到最佳值。

为验证集为
watchlist,用找到的极品参数组合又在磨练集上磨炼。注意观看算法的出口,看每一回迭代后以验证集上分的变动情状,从而得到最佳的
early_stopping_rounds。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

X_dtrain, X_deval, y_dtrain, y_deval =
cross_validation.train_test_split(X_train, y_train,
random_state=1026, test_size=0.3)

dtrain = xgb.DMatrix(X_dtrain, y_dtrain)

deval = xgb.DMatrix(X_deval, y_deval)

watchlist = [(deval, ‘eval’)]

params = {

    ‘booster’: ‘gbtree’,

    ‘objective’: ‘reg:linear’,

    ‘subsample’: 0.8,

    ‘colsample_bytree’: 0.85,

    ‘eta’: 0.05,

    ‘max_depth’: 7,

    ‘seed’: 2016,

    ‘silent’: 0,

    ‘eval_metric’: ‘rmse’

}

clf = xgb.train(params, dtrain, 500, watchlist,
early_stopping_rounds=50)

pred = clf.predict(xgb.DMatrix(df_test))

说到底使提取一点,所有拥有随机性的 Model 一般都谋面时有暴发一个 seed 或是
random_state 参数用于控制随机种子。得到一个好之 Model
后,在记录参数时得也记录下者价,从而会以之后复出 Model。

以数码的遍布于随意均衡的气象下,5-Fold CV 一般就够了。

出于受众前辈指导了如若相信自己的 CV,我的支配是将 5-Fold 提到
10-Fold,然后以 CV 为专业继续开拓进取。

Step 3: Feature Engineering

反驳及来说,特征工程应吗落为上平等步,不过其然则重大了,所以将它们独自将出来。kaggle社区对特色工程的第一都达成了共识,可以说最终结果的好坏,大部分就是是由于特点工程控制的,剩下有该是调参Ensemble支配。特征工程的三六九等倘使由于domain
knowledge
支配的,不过多数人数恐怕并无拥有这种文化,那么只好硬着头皮多的冲原feature生成新的feature,然后为范采纳其中首要的feature。这里虽以关联到feature
selection
,
起无数计,比如backward,forward selection等等。我个人倾向于用random
forest的feature
importance
这里发舆论介绍了这种艺术。

Human Learning – Kaggle 入门指南(分享自天涯论坛网)https://zhuanlan.zhihu.com/p/25742261?iam=cb63279559dabb602297bfcbd1f38a50&utm\_source=com.miui.notes&utm\_medium=social

末的回忆和展望

及时篇稿子是在座kaggle之后的第一不成总结,描述了产kaggle的步调,通用的知识点和技能。希望当将来一个月吃,能拿xgboost和stacking钻探采纳下,然后再来update。希望我们有啊想法还是可以够跟自身交流下~~

update:
更新了有关项目特征的处理模式以及Boosting和Bagging的观点,还有stacking的始末。

a2 Mia姐 – Kaggle入门,看就无异首就够用了(分享自知乎网)https://zhuanlan.zhihu.com/p/25686876?iam=cb63279559dabb602297bfcbd1f38a50&utm\_source=com.miui.notes&utm\_medium=social

Step2: Data Preprocessing

多少预处理,就是用数据处理下,为模型输入做准备,其中包:

  • 处理missing
    value:这里学问有硌异常,假设各位有好之经历可跟自己互换下。以自己浅薄的经验来说自己一般会分意况处理

    1. 要missing value占全体的比重不行小,那么间接填入平均值或者众数
    2. 使missing
      value所占比例不到底多少吗无到底好,那么可考虑她跟另外特色的关系,假使涉嫌明确,那么直接冲其他特色填入;也堪成立简单的范,比如线性回归,随机森林等。
    3. 假若missing value所占比重大,那么间接将miss
      value当做一种特殊的情事,另取一个价填入
  • 处理Outlier:这一个就是是前边EDA的企图了,通过写图,找来相当值
  • 处理categorical feature:一般就经dummy
    variable的道解决,也叫one hot
    encode,可以因此pandas.get_dummies()或者
    sklearn中preprocessing.OneHotEncoder(),
    我个人倾向被用pandas的get_dummies()
    圈个例吧,
dummy variable



将一列的month数据展开为了12列,用0、1代表类别。  
另外在处理categorical feature有两点值得注意:

1.  如果特征中包含大量需要做dummy
    variable处理的,那么很可能导致得到一个**稀疏**的dataframe,这时候最好用下**PCA**做降维处理。
2.  如果某个特征有好几万个取值,那么用dummy
    variable就并不现实了,这时候可以用[**Count-Based
    Learning**](https://link.jianshu.com?t=https://msdn.microsoft.com/en-us/library/azure/dn913056.aspx).
  1. (更新)最近在kaggle成功之案例中发觉,对于项目特征,在模型中入tf-idf总是有意义的。
  2. 还发只格局给“Leave-one-out”
    encoding,也得拍卖项目特征系列过多的题目,实测效果不错。

如何学kaggle

Step 4: Model Selection and Training

  • 极端常用之范是Ensemble Model,比如 Random Forest,Gradient
    Boosting
    。当然在上马的时,可以就此点简单的范,一方面是美观成底线threshold,另一方面也得以于终极当Ensemble
    Model。
    本来还有著名的xgboost,这一个我吧并未深远的钻,只是简短的之所以python调用了产,接下去要有工夫,要好好深切研讨下。
  • 挑选为止模型之后,就是要是训练模型,重要就是调参,每种型都发投机但是要害之几个参数,sklearn中GridSearchCV可以装需要比的几乎种植参数组合,然后据此cross
    validation
    来选出最完美之参数组合。大概用法呢:
    from sklearn.grid_search import GridSearchCV
    from pprint import pprint
    clf=RandomForestClassifier(random_state=seed)
    parameters = {‘n_estimators’: [300, 500],
    ‘max_features’:[4,5,’auto’]}
    grid_search = GridSearchCV(estimator=clf,param_grid=parameters,
    cv=10, scoring=’accuracy’)
    print(“parameters:”)
    pprint(parameters)
    grid_search.fit(train_x,train_y)
    print(“Best score: %0.3f” % grid_search.best_score_)
    print(“Best parameters set:”)
    best_parameters=grid_search.best_estimator_.get_params()
    for param_name in sorted(parameters.keys()):
    print(“\t%s: %r” % (param_name, best_parameters[param_name]))

经验

作者:Alex Hsu

链接:https://www.zhihu.com/question/24533374/answer/34649594

来源:知乎

小说权归作者所有。商业转载请联系作者得到授权,非商业转载请讲明出处。

kaggle winner = feature engineering + ensemble + good machine + domain
knowledge。

同意@Naiyan Wang的眼光,大部分kaggle竞技以及machine
learning关系不大。大部分赛如故生brute
force的主意,个人观点会将到10%连无是殊不方便,都是片广的featuer处理措施(Hash,
BOW, TFIDF, Categorization, Normalization)
,加几单广大模型(RF,
GBDT,
LR)
cross-validation调参数,最后ensemble一刹这。最好有酷好之机器(紧如果ram,以及tree-based
model并行),这样就不要太担心online
training的题材,大部分的lib也会为此了。

可是只要想拿top10尚是有早晚难度,大部分冠军得主其实都来相关领域从事经验,有有domain
knowledge,对题目标研究也相会再次本质一点。

总体而言,我觉着参与kaggle依然老对的心得,有局部扶持,特别是竞技截至晚大家解法的享受和研商可以套到片物(贴一个地点Kaggle
Competition Past
Solutions
。)但honestly,我以为kaggle更适合机器上入门者,对斯领域爆发趣味的校友等来有兴趣,练习其实能力,感受一下实际的数据集(尽管仍旧有些不均等),对从业者或者researcher们而言帮忙不是特别充分。

天池历届答辩PPT和录像

特色工程视频详解

近年来抽出时间,用python在kaggle上试试了多少个project,有点体会,记录下。

kaggle竞技各样源码

http://suanfazu.com/t/kaggle/230

http://blog.csdn.net/han\_xiaoyang/article/details/52665396

Step 6: Two Little Tips

末是自己之少点良心得吧

  • 设置random seed,使得你的型reproduce,以Random Foreset举例:
    seed=0
    clf=RandomForestClassifier(random_state=seed)
  • 每个project协会好文件层次以及布局,既利与其别人交流,也方便自己。比如当一个project下,分设3只公文夹,一个是input,放锻炼多少、测试数据,一个model,放模型文件,最终一个submission文件,放你别要交的结果文件。
    切实的可参考这里

机器上体系(3)_逻辑回归下的Kaggle泰坦Nick之灾 – 寒小阳 – CSDN博客 –

http://blog.csdn.net/han\_xiaoyang/article/details/49797143?utm\_source=com.jianshu.haruki&utm\_medium=social

记念中安德鲁(Andrew)Ng先生似乎以coursera上说罢,应用机器上,千万不要同上来即待完成周详,先撸一个baseline的model出来,再拓展继续之解析步骤,一步步加强,所谓继承手续可能包括『分析model现在之状态(欠/过拟合),分析大家用的feature的用意大小,举行feature
selection,以及我们模型下之bad case和暴发的因由』等等。

Kaggle上之大神们,也享受过部分experience,说几漫漫我回忆的哈:

『对数据的认太重大了!』

『数据中之新鲜点/离群点的剖析及拍卖极其紧要了!』

『特征工程(feature
engineering)太重大了!在重重Kaggle的光景下,甚至于model本身还要着重』

『要召开模型融合(model ensemble)啊什么什么

落基本消息

data_train.info()

.describe()

泰坦Nick号的啊发生少失值

设缺值的样本占总数比例最高,我们恐怕就径直遗弃了,作为特色加入吧,可能反倒带入noise,影响最后之结果了

一经缺值的范本适中,而该属性非连续值特征性(比如说类目属性),这即便把NaN作为一个新品类,加至品种特征被

如果缺值的样书适中,而拖欠属性也总是值特征性,有时候我们会考虑被一定一个step(比如这里的age,大家得以考虑各隔2/3寒暑啊一个宽度),然后将它们去散化,之后将NaN作为一个type加到性类目中。

稍稍情形下,缺失的价个数并无是专门多,这大家也可试行着按照已经有的值,拟合一下数目,补充上。

我们普通会事先对类目型的表征因子化,大家下pandas的”get_dummies”来成功这么些工作,并拼接在原来的”data_train”之上,

以针对没有速度造成几万沾伤害值!甚至无流失!
(╬▔皿▔)…所以我们先用scikit-learn里面的preprocessing模块对当下俩售做一个scaling,所谓scaling,其实就是以有变型幅度较生之特征化到[-1,1]之内。

圈过安德鲁 Ng老师的machine
Learning课程的同窗等,知道,大家理应分析分析范现在的状态了,是了/欠拟合?,以确定我们要再度多之风味仍旧重新多多少,或者其他操作。大家发出同漫长非常红的learning
curves对吧。

可是以现行底情景下,先不着急做这多少个工作,大家这baseline系统还发生若干粗糙,先还开挖掘。

重中之重而来了:

『要召开交叉验证(cross validation)!』

『要做交叉验证(cross validation)!』

『要举办交叉验证(cross validation)!』

恐怖症患者』打算继续喊喊口号…

『模型融合(model ensemble)很重点!』

『模型融合(model ensemble)很首要!』

『模型融合(model ensemble)很重大!』

365体育备用网址 1

以这里自己介绍一下plot方法的函数的以。

Series.plot方法的函数:

参数表达

label用于图例的竹签

ax要于这达成进行绘图的matplotlib
subplot对象。假诺无装,则以时matplotlib subplot

style将要传为matplotlib的风骨字符串(for example: ‘ko–’)

alpha图表的填写不透明(0-1)

kind可以是’line’, ‘bar’, ‘barh’, ‘kde’

logy在Y轴上使对数标尺

use_index将目的的物色引用作刻渡过标签

rot旋转刻度标签(0-360)

xticks用作X轴刻度的值

yticks用作Y轴刻度的价

xlimX轴的尽头

ylimY轴的无尽

grid显示轴网格线

每当此地强调一下 kind参数——’line’, ‘bar’, ‘barh’, ‘kde’:

直方图:是平栽好对值频率离散化彰显的柱状图。通过调用Series.hist()方法即可创立。

密度图:与直方图相关的相同种档次图,是透过测算“可能会晤生观测数据的连续概率分布的估计”而出的,通过让plot传入参数kind
= ‘kde’ 即可。

布图:是着眼六个一维数量列里关系的行手段,使用pd.scatter_matrix()即可建立。

一部分代码:

[python] view
plain
 copy

import matplotlib.pyplot as plt  

fig = plt.figure()  

fig.set(alpha=0.2)  # 设定图表颜色alpha参数  

plt.subplot2grid((2,3),(0,0))             # 在平摆设大图里分列几独稍图,地点是(0,0)  

data_train.Survived.value_counts().plot(kind=’bar’)# plots a bar graph of those who surived vs those who did not.   

plt.title(u”获救情状 (1乎获救)”) # puts a title on our graph  

plt.ylabel(u”人数”)    

plt.subplot2grid((2,3),(0,1))             # 在同一摆设大图(2 * 3)中之岗位是(0,1)   

data_train.Pclass.value_counts().plot(kind=”bar”)  

plt.ylabel(u”人数”)  

plt.title(u”乘客等分布”)  

plt.subplot2grid((2,3),(0,2))             # 在相同摆设大图(2 * 3)中的岗位是(0, 2)  

plt.scatter(data_train.Survived, data_train.Age)# 找有存活人数和年的散点图  

plt.ylabel(u”年龄”)                        # sets the y axis lable  

plt.grid(b=True, which=’major’, axis=’y’) # formats the grid line style of our graphs  

plt.title(u”按年看博救分布 (1乎获救)”)  

plt.subplot2grid((2,3),(1,0), colspan=2)  # colspan = 2 意味横向跨度是 2  

# plots a kernel desity estimate(核密度推测) of the subset of the 1st class passanges’s age  

data_train.Age[data_train.Pclass ==1].plot(kind=’kde’)     

data_train.Age[data_train.Pclass ==2].plot(kind=’kde’)  

data_train.Age[data_train.Pclass ==3].plot(kind=’kde’)  

plt.xlabel(u”年龄”)# plots an axis lable  

plt.ylabel(u”密度”)   

plt.title(u”各阶段的司乘人员年龄分布”)  

plt.legend((u’头等舱’, u’2等舱’,u’3等舱’),loc=’best’) # sets our legend for our graph. 突显图示  

plt.subplot2grid((2,3),(1,2))  

data_train.Embarked.value_counts().plot(kind=’bar’)  

plt.title(u”各登船口岸及轮人”)  

plt.ylabel(u”人数”)    

plt.show()  

https://www.kaggle.com/sudalairajkumar/simple-exploration-notebook-zillow-prize/notebook

Step 5: Model Ensemble

Model
Ensemble有Bagging,Boosting,Stacking,其中Bagging和Boosting都算是Bootstraping的应用。Bootstraping的概念是指向样本每一遍有放回的抽样,抽样K个,一共抽N次。

  • Bagging:每趟从完整样本被随机抽取K个样本来磨练模型,重复N次,得到N个模型,然后用依次模型结果合并,分类问题投票情势组成,回归则是赢得平均值,e.g.Random
    Forest。
  • Boosting:一始发受每个样本取同样的权重,然后迭代练习,每一次对训练战败的样本调高其权重。最终对几近独模型用加权平均来组成,e.g.
    GBDT。
  • Bagging与Boosting的比较:在深深明白Bagging和Boosting后意识,bagging其实是由此同的模子来磨练随机取样的数,这样的结果是逐一模型中的bias差不多,variance也基本上,通过平均,使得variance降低(由算平均方差的公式可知),从而提升ensemble
    model的表现。而Boosting其实是相同种植贪心算法,不断降低bias。
  • Stacking:
    锻炼一个模子来做其他种种模型。首先先磨炼多独不等之范,然后重新盖在此之前操练的依次模型的输出为输入来训练一个模子,以博取一个最后的输出。使用过stacking之后,发现其实stacking很像神经网络,通过广大模型的输出,构建中间层,最后用逻辑回归讲中间层练习取得最后的结果。这里贴一个例证供参考。

def single_model_stacking(clf):
    skf = list(StratifiedKFold(y, 10))
    dataset_blend_train = np.zeros((Xtrain.shape[0],len(set(y.tolist()))))
    # dataset_blend_test = np.zeros((Xtest.shape[0],len(set(y.tolist()))))
    dataset_blend_test_list=[]
    loglossList=[]
    for i, (train, test) in enumerate(skf):
    #     dataset_blend_test_j = []
        X_train = Xtrain[train]
        y_train =dummy_y[train]
        X_val = Xtrain[test]
        y_val = dummy_y[test]
        if clf=='NN_fit':            
            fold_pred,pred=NN_fit(X_train, y_train,X_val,y_val)
        if clf=='xgb_fit':
            fold_pred,pred=xgb_fit(X_train, y_train,X_val,y_val)
        if clf=='lr_fit':
            fold_pred,pred=lr_fit(X_train, y_train,X_val,y_val)
        print('Fold %d, logloss:%f '%(i,log_loss(y_val,fold_pred)))
        dataset_blend_train[test, :] = fold_pred
        dataset_blend_test_list.append( pred )
        loglossList.append(log_loss(y_val,fold_pred))
    dataset_blend_test = np.mean(dataset_blend_test_list,axis=0)
    print('average log loss is :',np.mean(log_loss(y_val,fold_pred)))
    print ("Blending.")
    clf = LogisticRegression(multi_class='multinomial',solver='lbfgs')
    clf.fit(dataset_blend_train, np.argmax(dummy_y,axis=1))
    pred = clf.predict_proba(dataset_blend_test)
    return pred

Kaggle 首战拿银总计 | 辅导 (长文、干货)(分享自今日头条网)https://zhuanlan.zhihu.com/p/26645088?iam=cb63279559dabb602297bfcbd1f38a50&utm\_source=com.miui.notes&utm\_medium=social

相关文章