数据预处理:原始数据集,特征数值化,特征值数值化

原始数据集,特征数值化

在原始数据集中,feature是多种多样的,为了方便处理,我们必须把feature数值化,而且还需要把特征值数值化。

示例:

x=[[黄色,,成人,用手打]
,[黄色,,成人,用脚踩]
,[黄色,,小孩,用手打]
,[黄色,,小孩,用脚踩]
,[黄色,,成人,用手打]
,[黄色,,成人,用脚踩]
,[黄色,,小孩,用手打]
,[黄色,,小孩,用脚踩]
,[紫色,,成人,用手打]
,[紫色,,小孩,用手打]
,[紫色,,成人,用脚踩]
,[紫色,,小孩,用脚踩]
]
y = [不爆炸,爆炸,不爆炸,不爆炸,爆炸,爆炸,不爆炸,爆炸,不爆炸,不爆炸,爆炸,爆炸]

feature数值化,直接是一个数据的下标ID就可以了。

featureValue数值化,为了实现featureValue数值化,我们必须建立(feature,featureValue):featureValue编码 的字典

可见上述数据x为:数据数量*feature数量

注意我们这里没有使用numpy特征数值化,使用python比较方便。

为了简便解释feature数量为n,数据数量为N

将数据转置,这样得到的数据为:feature数量n*数据数量N,这样每一行就对应了某一个feature的N个取值

		# 将输入的向量转置
		features = map(list,zip(*x))

每一行就对应了某一个feature的N个取值,这个就是我们编码的对象,我们需要确定每一个feature有多少个取值,set就去掉了重复,就得到的矩阵为:feature数量n*每一个feature取值的数量m

        # 获取的是每一个feature的取值
        features = [set(feat) for feat in features]

下面是编码,_对应的是 feature取值,i对应的是这个feature取值的编码,比如黄色是0,紫色是1,小是0,大是1,这样得到的是二维数组:feature数量n*feature取值的数量m,这个字典就是:(feature,featureValue):featureValue编码,比如features[颜色][黄色] =0

        # feat_dics[第几个feature][这个feature的取值] = 这个feature的取值对应的数值化ID
        feat_dics = [{_:i for i,_ in enumerate(feats)} for feats in features ]
        label_dic = {_:i for i,_  in enumerate(set(y))}

得到(feature,featureValue):featureValue编码的字典之后,就需要对原始数据编码,我们需要按照(feature,featureValue)这个pair索引来编码。

原始数据为:数据数量N*feature数量n,一行一行的读取,就是一个数据的n个featureValue,这个就和索引对上了,每一个featureValue都能找到对应的编码了。

        # 利用字典转换更新数据集
        # 这里可能有点难以理解,自己举个例子就能明白
        # feat_dics每一行代表一个feature纬度
        # 每一行里装的是:这个feature的取值:数值化这个feature的取值
        # 原始x每一行[feature1,feature2..],遍历它,就是第几个feature
        x = np.array([[feat_dics[i][_] for i,_ in sample] for sample in x])
        y = np.array([label_dic[yy] for yy in y])

猜你喜欢

转载自blog.csdn.net/weixin_40759186/article/details/85264493