一、問題
????機器學習或者深度學習在處理表格數據(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、有論文指導相關需求,點擊“聯系我”添加作者微信直接交流。