Kaggle 笔记

常规步骤

1.读入数据

1
2
3
4
5
6
train=pd.read_csv("../input/train.csv")
test=pd.read_csv("../input/test.csv")
# 获取数据大小
len_train=train.shape[0]
# 拼接训练集和测试集,方便处理
houses=pd.concat([train,test], sort=False)

2. 观察数据类型

1
houses.select_dtypes(include='object').head() # ['float','int']

3. 离散型数据的处理

缺失处理:

1
houses.select_dtypes(include='object').isnull().sum()[houses.select_dtypes(include='object').isnull().sum()>0]

填补为“None”,或者用众数 mode()[0] 等进行填充。

One-Hot 编码:

1
houses=pd.get_dummies(houses)

4. 连续型数据的处理

缺失处理:

填补为 0 ,或者用平均数 mean() 等进行填充。

5. 变量关联性分析

针对关联性较高的两个变量,移除与目标 y 值关联性较低的变量。

1
2
plt.figure(figsize=[30,15])
sns.heatmap(train.corr(), annot=True)

6. 异常点处理

将异常点移除

7. 数据的偏度和峰度

偏度(skew)是描述数据分布形态的统计量,其描述的是某总体取值分布的对称性,简单来说就是数据的不对称程度。偏度是三阶标准化矩。数值的绝对值越大,表明数据分布越不对称,偏斜程度大。

峰度(kurt)表征概率密度分布曲线在平均值处峰值高低的特征数。直观看来,峰度反映了峰部的尖度。随机变量的峰度计算方法为:随机变量的四阶中心矩与方差平方的比值。峰度包括正态分布(峰度值=3),厚尾(峰度值>3),瘦尾(峰度值<3)。

将数据不符合正态分布形式的,进行数据的转换。使用 boxcox1p 转换及估算变换参数 lambda。

boxcox1p 用于处理 x,log 取对数用于处理 y

8. 目标值取对数

1
np.log

当目标值的分布右偏,log转换可以使高偏度的数据变得低偏度,使得在数据模式更易于解释,也更符合统计推论的假设。

最后需要 np.exp() 将预测值恢复。

9. 数据标准化

数据预处理中的方法:

  • Fit(): 求得训练集X的均值啊,方差啊,最大值啊,最小值啊这些训练集X固有的属性。可以理解为一个训练过程

  • Transform(): 在Fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA,StandardScaler等)。

  • Fit_transform(): fit和transform的组合,既包括了训练又包含了转换。

transform()和fit_transform()二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等)

fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。

根据对之前部分trainData进行fit的整体指标,对剩余的数据(testData)使用同样的均值、方差、最大最小值等指标进行转换transform(testData),从而保证train、test处理方式相同。所以,一般都是这么用:

1
2
3
4
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_tranform(X_train)
sc.tranform(X_test)
  • 必须先用fit_transform(trainData),之后再transform(testData)
  • 如果fit_transfrom(trainData)后,使用fit_transform(testData)而不transform(testData),虽然也能归一化,但是两个结果不是在同一个“标准”下的,具有明显差异。(一定要避免这种情况)

参考:https://www.codeleading.com/article/80021422569/

10. 调用模型并输出结果

调用模型:

1
2
3
model = ...
model.fit(x,y)
pred=model.predict(test)

分类常用模型

RandomForest

回归常用模型

Lasso

输出到文件:

1
2
output=pd.DataFrame({'Id':test2.Id, 'SalePrice':pred})
output.to_csv('submission.csv', index=False)
0%