《机器学习算法竞赛实践》学习笔记(2)数据探索

数据探索

目标:确信数据集已经准备好应用于机器学习算法

首先应该明确的 3 个问题

  1. 如何确保自己准备好竞赛使用的算法模型=>模型分析
  2. 如何为数据集选择合适的算法=>模型分析
  3. 如何定义可用于算法模型的特征变量=>单变量/多变量/降维分析

4种分析方法

  1. 单变量可视化分析
  2. 多变量可视化分析
  3. 降维分析:有助于寻找特征间方差最大的字段
  4. 模型分析:通过实际模型运行,分析数据特征和模型缺陷

必须要明确的 7 件事情

  1. 数据集基本情况:比如数据有多大,各字段什么类型
  2. 重复值、缺失值和异常值
  3. 特征之间是否冗余
  4. 是否存在时间信息:相关性、趋势性、周期性和异常点分析。潜在的数据穿越问题。
  5. 标签分布
  6. 训练集与测试集的分布
  7. 单变量/多变量分布

整体初步分析

# 查看数据的基本分布(对每列进行统计)
DataFrame.describe()

# 查看前/后 n 行
DataFrame.head()
DataFrame.tail()

# 得到数据集行列情况
DataFrame.shape
DataFrame.shape[0]  # 行数

# 获取对数据集的简单描述(变量类型、数据集大小和缺失值)
DataFrame.info()

# 展示 Nunique(Number of distinct values)情况
stats = []
for col in train.columns:
    stats.append(
        (col, train[col].nunique(),
         train[col].isnull().sum() * 100 / train.shape[0],
         train[col].value_counts(normalize=True, dropna=False).values[0] * 100 / train.shape[0],
         train[col].dtype)
    )
    stats_df = pd.DataFrame(stats, columns=['Feature', 'Unique_values', 'Percentage of missing values',
                                            'Percentage of values in the biggest category', 'type']
stats_df.sort_values('Percentage of missing values', ascending=False)[:10]

# 展示缺失值情况
missing = train.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()

方法 1:单变量可视化分析

单变量可以分为标签、连续型和类别型

标签

# 首先查看单列基本分布情况
train['column_name'].describe()
# 可视化
plt.figure(figsize=(9, 8))
sns.distplot(train['column_name'], color='g', bins=100, hist_kws={'alpha': 0.4})
# 若图像偏离正态分布,取 log
plt.figure(figsize=(9, 8))
sns.distplot(np.log(train['column_name']), color='g', bins=100, hist_kws={'alpha': 0.4})

连续型

# 可视化
df_num = train.select_dtypes(include = ['float64', 'int64'])
df_num = df_num[df_num.columns.tolist()[1:5])
df_num.hist(figsize=(16, 20), bins=50, xlabelsize=8, ylabelsize=8)

# 相关性分析
'''
相关性分析只能比较数值特征,因此字母、字符串特征需先进行编码并转换为数值,才能查看特征间的关联。
相关性分析可以很好地过滤掉与标签没有直接关系的特征。
若两标签之间完全正相关(多重共线性),则两特征包含几乎相同的信息,可对其进行删除。
'''
# 生成相似性矩阵图
corrmat = train.corr()
f, ax = plt.subplots(figsize=(20, 9))
sns.heatmap(corrmat, vmax=0.8, square=True)

类别型

同样采用柱状图可视化频次的方法。观察热点属性、极少出现的属性,分析其原因。
当找到与标签有强相关的特征后,应该考虑围绕此特征进行更深的拓展。比如进行交叉组合(强相关+弱相关、强相关+强相关),以挖掘更高维度的潜在信息。

方法 2:多变量可视化分析

对表现出强相关性的两变量,可以考虑构造两变量的交叉组合特征进行更细致的描述。

# 两变量间分布条状图
plt.style.use('seaborn-white')
type_cluster = train.groupby(['x1', 'x2']).size()
type_cluster.unstack().plot(kind='bar', stacked=True, colormap='PuBu', figsize=(13, 11), grid=False)
plt.xlabel('OverallQual', fontsize=16)
plt.show()

方法 3:降维分析

方法 4:模型分析

学习曲线

损失函数/迭代次数曲线:用于观察模型拟合程度。

特征重要性分析

树模型(如 LightGBM、XGBoost)的特征信息增益/分裂次数可判断特征重要性。LR、SVM 、Lasso可使用特征系数表示特征重要性。

误差分析

观察模型预测结果的分布,判断模型对哪些样本预测能力不够。

你可能感兴趣的:(数据预处理,python,机器学习,python,数据挖掘,数据分析,机器学习)