李宏毅机器学习2020课后作业 ML2020spring - hw2
1. 问题描述
判断收入是否超过50000,数据集有一些特征,比如说教育背景、出生地之类,是一个二分类的问题,数据集来源Census-Income (KDD) Dataset 本来是有train.csv, test_no_label.csv,但是助教已经帮忙做好了one-hot编码,所以我们拿到的数据是X_train, Y_train, X_test,感觉一下子就简单了不少。没处理前的数据大概长这样。
2. 数据预处理
如果是离散特征就用one hot编码排到后面去拼起来,如果是连续的数值,就不用动它
- 首先,分别标准化一下,标准化函数如下,可以在分母上加一个eps避免除0
# 标准化,大多做预处理都会做这一步的
def _normalize(X, train = True, specified_column = None, X_mean = None, X_std = None):
if specified_column == None:
specified_column = np.arange(X.shape[1])
# print(specified_column)
# 0 - 509 去掉了第一列id
if train:
# np.mean(x, axis=0) 列求平均值,reshape(1, -1)拉成一行
X_mean = np.mean(X[:, specified_column], 0).reshape(1, -1)
X_std = np.std(X[:, specified_column], 0).reshape(1, -1)
# (54256, 510) = (54256, 510) - (1, 510) / (1, 510)
# 利用了广播的机制
X[:, specified_column] = (X[:, specified_column] - X_mean) / (X_std + 1e-8)
return X, X_mean, X_std
这里不要用循环,不然计算超级慢,用广播机制。
X_train,</