一、问题
机器学习或者深度学习在处理表格数据(Tabular data)、图像数据(Image data)、文本数据(Text data)、时间序列数据(Time series data)上得到了广泛的应用。
其中,表格数据是机器学习应用最多的一种数据,在表格数据中,每一行代表一个样本,每一列代表一个特征/标签,每一个特征/标签通常是一个一维列表或者一个一维数组,多个特征/标签通常是多个一维数组。
假如现在有5个样本,3个特征列,1个标签列,给出的数据如下:
fea1 = np.array([1, 2, 3, 4, 5])
fea2 = np.array([3, 2, 1, 4, 3])
fea3 = np.array([5, 2, 3, 4, 1])
label = np.array([0, 1, 1, 0, 1])
如何对上面的给的数据进行处理,喂给机器学习模型呢?
二、数组堆叠
将数组进行堆叠,转化为多个长度相同的一维数组转化为二维数组
data_x = np.column_stack((fea1, fea2, fea3))
# data_x = np.array([[1,3,5],[2,2,2],[3,1,3],[4,4,4],[5,3,1]])
data_y = label.reshape((len(label), 1))
# data_y = np.array([[0],[1],[1],[0],[1]])
引申问题1:data_y不做reshape操作可不可以?
答案是可以。标签只有一列,那么可以不转化为二维数组,可以直接划分数据集,喂给模型。
三、转化为dataframe数据框
将多个一维数组转化为dataframe
df = pd.DataFrame({'fea1': fea1, 'fea2': fea2, 'fea3': fea3, 'label': label})
data_x = df[['fea1', 'fea2', 'fea3']].values
# data_x = np.array([[1,3,5],[2,2,2],[3,1,3],[4,4,4],[5,3,1]])
data_y = df[['label']].values
# data_y = np.array([[0],[1],[1],[0],[1]])
引申问题1:data_x和data_y不转化为数组,data_x = df[['fea1', 'fea2', 'fea3']],data_y = df[['label']]行不行?
答案是可以的,此时data_x和data_y的数据类型都是dataframe,而对于表格数据,是可以喂给机器学习dataframe数据类型的。
引申问题2:data_y = df['label'].values或者直接data_y = df['label']这样行不行?
答案是可以。标签只有一列,模型可以接收series或者一维数组。
四、验证
接下来,就可以将上诉方法得到的data_x, data_y进行数据划分,并进行模型训练和推理等后续处理啦
x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, test_size=1/5)
model = LinearRegression()
model.fit(X_train, y_train)
y_pred_test = model.predict(x_test)
五、总结
-
对于表格数据,机器学习模型理想希望吃到的数据(数据集划分之前)应该是一个二维数组,对于有标签的数据而言,特征和标签各自应该是一个二维数组,二维数组的每个元素对应一个样本的(多个)特征或者(多个)标签。
-
对于表格数据,机器学习模型也接收dataframe数据类型,对于有标签的数据而言,特征和标签各自应该是一个dataframe数据类型。
-
对于表格数据,如果特征或者标签只有一列,机器学习模型也可以接收一维数组或series。
本人读研期间发表5篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,对Python有一定认知和理解,会结合自身科研实践经历不定期分享关于python、机器学习、深度学习等基础知识与应用案例。
致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。
1、关注文末公众号即可在后台联系我获取相关数据集和源码。
2、关注“数据杂坛”公众号,点击“领资料”即可免费领取资料书籍。
3、有论文指导相关需求,点击“联系我”添加作者微信直接交流。