美文网首页
机器学习案例:House Prices: Advanced Re

机器学习案例:House Prices: Advanced Re

作者: 魏立艳 | 来源:发表于2017-06-07 13:18 被阅读238次

    [机器学习案例][!https://www.kaggle.com/pmarcelino/comprehensive-data-exploration-with-python]

    作者主要从以下四个角度进行:

    1. 理解问题
    2. 单维度变量学习(依赖变量)
    3. 多维度变量学习(依赖变量和独立变量之间的关系)
    4. 数据清洗(处理缺失数据、设定异常值以及分类变量)
    5. 验证假设(通过多种手段验证是否符合假设)

    具体的步骤包括:

    1. 导入数据

    2. 分析 SalePrice

    3. 分析 SalePrice 和数值变量之间的关系

    4. 分析 SalePrice 和分类变量之间的关系

    5. 分析变量之间的相关关系

    6. 分析所有变量之间的关系

    7. 处理缺失数据

    8. 验证假设(标准化数据处理之后分析变量之间的关系)

    导入数据总结

    语法总结

    1. 新模块:seaborn

    比 Matplotlib 上手简单,Seaborn本质上使用Matplotlib作为核心库(就像Pandas对NumPy一样)。seaborn有以下几个优点:

    1. 默认情况下就能创建赏心悦目的图表。
    2. 创建具有统计意义的图。
    3. 能理解 pandas 的 DataFrame 类型

    2. 新模块说明:SciPy

    scipy 包包含许多专注于科学计算中的常见问题的工具箱。它的子模块对应于不同的应用,比如插值、积分、优化、图像处理、统计和特殊功能等。
    scipy 可以与其他标准科学计算包相对比,比如 GSL (C和C++的GNU科学计算包), 或者Matlab的工具箱。scipy是Python中科学程序的核心程序包;这意味着有效的操作numpy数组,因此,numpy和scipy可以一起工作。

    在这个案例中,用到了 scipy 的 norm 和 stats,分别是指:==待补充==

    norm:

    stats:

    3. 新模块说明:sklearn

    在这个案例中用到了 preprocessing 中的 StandardScaler

    标准化预处理数据包括:

    • preprocessing.scale(X, axis=0, with_mean=True, with_std=True, copy=True):
      将数据转化为标准正态分布(均值为0,方差为1)
    • preprocessing.minmax_scale(X, feature_range=(0, 1), axis=0, copy=True):
      将数据在缩放在固定区间,默认缩放到区间 [0, 1]
    • preprocessing.maxabs_scale(X, axis=0, copy=True):
      数据的缩放比例为绝对值最大值,并保留正负号,即在区间 [-1.0, 1.0] 内。唯一可用于稀疏数据 scipy.sparse 的标准化
    • preprocessing.robust_scale(X, axis=0, with_centering=True, with_scaling=True, copy=True):
      通过 Interquartile Range (IQR) 标准化数据,即四分之一和四分之三分位点之间

    它们对应的标准化预处理类:

    • class preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True):
      标准正态分布化的类
      属性:scale_:ndarray,缩放比例mean_:ndarray,均值var_:ndarray,方差n_samples_seen_:int,已处理的样本个数,调用partial_fit()时会累加,调用fit()会重设
    • class preprocessing.MinMaxScaler(feature_range=(0, 1), copy=True):
      将数据在缩放在固定区间的类,默认缩放到区间 [0, 1]
      属性:min_:ndarray,缩放后的最小值偏移量scale_:ndarray,缩放比例data_min_:ndarray,数据最小值data_max_:ndarray,数据最大值data_range_:ndarray,数据最大最小范围的长度
    • class preprocessing.MaxAbsScaler(copy=True):
      数据的缩放比例为绝对值最大值,并保留正负号,即在区间 [-1.0, 1.0] 内。可以用于稀疏数据 scipy.sparse
      属性:scale_:ndarray,缩放比例max_abs_:ndarray,绝对值最大值n_samples_seen_:int,已处理的样本个数
    • class preprocessing.RobustScaler(with_centering=True, with_scaling=True, copy=True):
      通过 Interquartile Range (IQR) 标准化数据,即四分之一和四分之三分位点之间
      属性:center_:ndarray,中心点scale_:ndarray,缩放比例
    • class preprocessing.KernelCenterer
      生成 kernel 矩阵,用于将 svm kernel 的数据标准化(参考资料不全)

    以上几个标准化类的方法:

    • fit(X[, y]):根据数据 X 的值,设置标准化缩放的比例
    • transform(X[, y, copy]):用之前设置的比例标准化 X
    • fit_transform(X[, y]):根据 X 设置标准化缩放比例并标准化
    • partial_fit(X[, y]):累加性的计算缩放比例
    • inverse_transform(X[, copy]):将标准化后的数据转换成原数据比例
    • get_params([deep]):获取参数
    • set_params(**params):设置参数

    4. 新模块说明:warnings

    如果希望程序能够生成警告信息(比如废弃特性或使用问题)(即,需要输出一个警告信息),可以使用 warning.warn( ) 函数。

    The determination whether to issue a warning message is controlled by the warning filter, which is a sequence of matching rules and actions. Rules can be added to the filter by calling filterwarnings() and reset to its default state by calling resetwarnings().

    在案例中出现的代码:

    import warnings
    warnings.filterwarnings('ignore')
    

    是指 never print matching warnings

    5. 新模块说明:matplotlib

    关于案例中出现的代码:

    %matplotlib inline
    

    matplotlib 支持输出多种格式的图形图像,并且可以使用多种 GUI 界面库交互式地显示图表。使用%matplotlib命令可以将 matplotlib 的图表直接嵌入到 Notebook之中,或者使用指定的界面库显示图表,它有一个参数指定 matplotlib 图表的显示方式。inline表示将图表嵌入到Notebook中。

    理解问题的总结

    数据处理总结

    1. 变量管理

    对于即将要处理的问题 SalePrice,案例作者对变量数据建议采用表格进行管理,表格示意如下:

    Variable Type Segment Expectation Conclusion Comments
    TotalBsmtSF numerical space high high

    表格说明及注意事项:

    Type 变量类型分为数值变量、类别变量;

    segment,所属部分,在这个问题下,分为三种类型——building、space、location;

    Expectation:变量对房屋销售价格影响程度的预期,用"中"、"高"、"低"来衡量即可;

    Conclusion:检查完 Data 之后对变量重要性的结论,衡量标准可以与 Expectation 保持一致。

    Comments:任何想到的备注说明。

    注意:

    Type 和 Segment 只是为了将来一时之需;
    Expectation 很重要,因为有利于培养我们的第六感,可以通过自我提问来判断(自己买房时会考虑这个变量吗?如果考虑,我们判断某个变量有多重要?变量之间是否和其他变量有重合?)

    根据分析过程,填充表格;

    利用数据分析变量和销售价格之间的关系,利用 Conclusion 修正 Expectation;

    2. 分析目标问题(房价)

    目标问题本身研究

    可以先直接观察一下目标问题的数据,包括个数、平均值、标准差、最小值、最大值、分位数等;还可以利用直方图,画出数据分布情况;

    通过观察直方图,可以看出数据并不是完全符合正态分布曲线,有偏度和峰度;

    ==统计学意义待补充==

    目标问题与数字变量之间的研究分析

    分析了目标问题和两个数字变量之间的关系

    目标问题与分类变量之间的研究分析

    在分析分类变量是,用到了盒图,关于盒图的作用整理总结如下:

    盒图是在 1977 年由美国的统计学家约翰·图基 (John Tukey) 发明的。它由五个数值点组成:最小值(min),下四分位数(Q1),中位数(median),上四分位数(Q3),最大值(max)。也可以往盒图里面加入平均值(mean)。如上图。下四分位数、中位数、上四分位数组成一个“带有隔间的盒子”。上四分位数到最大值之间建立一条延伸线,这个延伸线成为“胡须(whisker)”。

    由于现实数据中总是存在各式各样地“脏数据”,也成为“离群点”,于是==为了不因这些少数的离群数据导致整体特征的偏移,将这些离群点单独汇出,而盒图中的胡须的两级修改成最小观测值与最大观测值==。这里有个经验,就是最大(最小)观测值设置为与四分位数值间距离为1.5个IQR(中间四分位数极差)。即

    • IQR = Q3-Q1,即上四分位数与下四分位数之间的差,也就是盒子的长度。
    • 最小观测值为min = Q1 - 1.5*IQR,如果存在离群点小于最小观测值,则胡须下限为最小观测值,==离群点单独以点汇出==。如果没有比最小观测值小的数,则胡须下限为最小值。
    • 最大观测值为max = Q3 -1.5*IQR,如果存在离群点大于最大观测值,则胡须上限为最大观测值,==离群点单独以点汇出==。如果没有比最大观测值大的数,则胡须上限为最大值。

    通过盒图,在分析数据的时候,盒图能够有效地帮助我们识别数据的特征

    1. 直观地识别数据集中的异常值(查看离群点)。
    2. 判断数据集的数据离散程度和偏向(观察盒子的长度,上下隔间的形状,以及胡须的长度)。

    1.箱体的左侧(下)边界代表第一四分位(Q1),而右侧(上)边界代表第三四分位(Q3)。至于箱体部分代表四分位距(IQR),也就是观测值的中间 50% 值。

    2.在箱体中间的线代表的是数据的中位数值。

    3.从箱体边缘延伸出去的直线称为触须(whisker).触须(whisker)的向外延伸表示了数据集中的最大和最小(异常点除外)。

    4.极端值或异常点(outlier),用星号(*)来标识.如果一个值位于箱体外面(大于Q3或小于Q1),并且距离相应边界大于 1.5 倍的 IQR,那么这个点就被认为是一个异常点(outlier)。

    如果你选择通过分组变量(By variable)来分组数据,MINITAB 将把图像变成垂直放置,否则图形将水平放置。(==注:在本案例中,因为是分类变量,所以是垂直放置==)

    使用箱形图来评估数据的对称性:
    1.如果数据是明显对称,中位数值线将近似位于四分位距箱体的中间,上下触须(whisker)在长度上将近似相等。

    2.如果数据是偏态的,中位数将可能不位于四分位距(IQR)箱体的中间,某一触须(whisker)将可能显著地比另一个长。

    在降水数据的箱形图(boxplot)中,中位数位于四分位距(IQR)箱体的中间,上下触须(whisker)长度相等。这表明除了异常点(outlier)星号(*)外,数据是对成的。这很好的说明了异常点(outlier)可能和其它的样本数据不是来自同一个母体(population)。

    在这个案例中,通过盒图分析,我们可以:

    找到异常点;

    分析变量和目标问题之间的关系趋势;

    变量与变量之间的关系

    分析变量之间的关系,转变分析维度,可以利用相关关系来实现;

    热力图以及放大的热力图都可以用来分析相关关系;

    两两组合分析变量之间的关系

    这样不仅可以分析目标问题和变量之间的关系,还可以分析变量与变量之间的关系,方便我们理解变量,并未后续处理做准备。

    比如,在此案例中,除了 SalePrice 和其他变量之间的关系;

    我们还可以直观看到某个某个变量的分布情况(直方图);

    可以看到变量与变量之间是否存在关系,比如 TotalBsmtSF 和 GrLivArea 之间;

    语法总结

    1. 可以直接用的描述性语法

    分析数据可以直接运用的语法:

    # describe statistics summary
    df_train['SalePrice'].describe
    
    # histogram
    sns.distplot(df_train['SalePrice'])
    
    # skewness and kurtosis
    print("Skewness: %f" % df_train['SalePrice'].skew)
    

    2. 利用 seaborn 来绘制分析相关关系

    seaborn 的用法

    热力图的用法及意义

    处理 missing data 部分的总结

    处理数据总结

    可以按照以下方式处理确实数据:

    计算数据缺失比例;

    对不同比例的数据利用不同的原则进行处理;

    缺失百分比高的变量:
    1)买房时不会考虑;
    2)==超过 15%== 我们就应该考虑不需要补充缺失的数据;
    3)这样的变量可以直接删除(包括 PoolQC、MiscFeature、Alley 等);

    缺失比例相同的变量:
    1)可以推测缺失的原因应该相同;
    2)通过一个变量可以得知另外一个变量的信息,所以只考虑一个变量即可;
    3)删除一个变量即可,相似的变量组还有 BsmtX 相关;

    不必要且与已知变量强相关的变量:
    1)MasVnrArea、MasVnrType 和 YearBuilt、OverallQual 之间强关联,且此类信息并不重要;
    2)删除信息也不会丢失信息;

    异常值处理

    数据处理总结

    如果数据分布不符合正态分布曲线,可以对数据进行 Standardize 处理;

    同时可以对处理之后的数据进行分析,分析 low range 和 high range;

    进行双变量分析,判断异常值并根据情况进行处理,注意:

    偏离太多的异常值可以删除;

    偏离但是仍然符合分布的异常值可以保留;

    处理异常值要考虑清楚 trade-off,是否值得花力气处理;

    语法总结

    fit_transform 以及 scale 的介绍见前文 sklearn 模块内容。

    核心分析

    数据处理总结

    需要从以下四个角度进行验证假设部分:

    Normality:数据应该符合正态分布曲线
    目前只考虑了 SalePrice 这个单一变量是否符合 Normality;
    虽然单一变量不能保证多变量是符合正态分布的,但是有助于实现这一点;
    保证数据正态分布,可以避免很多问题(如异方差);

    Homoscedasticity:数据的残差具有同方差性
    依赖变量具有相同的方差;我们想要同方差性。
    因为 we want the error term to be the same across all values of the independent variables

    Linearity:数据线性关系
    如果不是线性关系,可以考虑数据 transformation;但大多数的时候不需要,因为可以看出线性关系;

    Absence of correlated errors:相对误差的缺失
    观察分析变量之间是否存在相对误差关系;
    通常涉及到时间相关的变量;

    取对数可以使数据分布更符合正态分布曲线;

    如果原始数据中有 0,忽略为 0 的值,直接取对数;

    ==统计学知识待补充==

    语法总结

    df_train = pd.get_dummies(df_train)
    

    这里进行把分类变量转变为虚拟变量。

    R语言思路总结

    R 流程总结:

    • load data,load 各种数据
    • Structure of data,分析数据结构
    • Summarize the missing values in the data,总结分析缺失数据
      • 处理分类变量的 missing data
      • 数字变量的 missing data
      • missing data 的可视化
    • Summarize the numeric values and the structure of the data
    • Barplots for the categorical features 分类变量的柱形图可视化
      • 分析数量变量以及数据结构,数据结构包括最大值、最小值、平均值、四分之一位数、中位数、四分之三位数;
      • 分别统计 train 和 test 中的数据缺失比例;
      • 检查数据中的重复行;(0行)
      • 把 character 转换成 factors;
    • Density plots for numeric variables 数字变量的 density 曲线图
    • Explore the correlation 相关关系研究
    • Plot scatter plot for variables that have high correlation 高相关度的变量的模型
      • 既要处理正相关,也要搞清楚负相关的变量
      • ==关注绝对值大的相关度

    相关文章

      网友评论

          本文标题:机器学习案例:House Prices: Advanced Re

          本文链接:https://www.haomeiwen.com/subject/yhgofxtx.html