(一)机器学习数据处理
目錄
1、獲取數(shù)據(jù)
2、加載數(shù)據(jù)集
3、特征值和標(biāo)簽處理
4、制作可迭代的pytorch數(shù)據(jù)集?(選看)
數(shù)據(jù)處理工具首選pandas,如果你對pandas不了解,請參考我的上一篇博客的pandas操作總結(jié)。
上篇博客地址:pandas操作
1、獲取數(shù)據(jù)
本文用的數(shù)據(jù)集是100種植物種類數(shù)據(jù)集,用于分類任務(wù)
數(shù)據(jù)集下載地址:100種樹葉數(shù)據(jù)集
2、加載數(shù)據(jù)集
本文用到了其中的data_Tex_64.txt,使用pandas加載數(shù)據(jù)
import numpy as np import pandas as pd from sklearn import preprocessing#加載數(shù)據(jù)和標(biāo)簽 df = pd.read_csv('./data/100 leaves plant species/data_Tex_64.txt') origin_feature = df.iloc[:, 1:] origin_labels = df.iloc[:, 0]3、特征值和標(biāo)簽處理
數(shù)據(jù)處理常使用sklearn.preprocessing的子模塊來實(shí)現(xiàn)。
1、歸一化(最小-最大規(guī)范化):將數(shù)據(jù)縮放到0~1之間,使用MinMaxScaler模塊
歸一化公式 #歸一化 min_max_scaler = preprocessing.MinMaxScaler() feature = min_max_scaler.fit_transform(origin_feature)#歸一化還原 orgin_feature = min_max_scaler.inverse_transform(feature)2、標(biāo)準(zhǔn)化(z-score規(guī)范化):將數(shù)據(jù)轉(zhuǎn)化成均值為0,方差為1。使用 StandardScaler模塊。先求出全部數(shù)據(jù)的均值和方差,再進(jìn)行計(jì)算。最后的結(jié)果均值為0,方差是1。
標(biāo)準(zhǔn)化公式注意:當(dāng)原始數(shù)據(jù)并不符合高斯分布的話,標(biāo)準(zhǔn)化后的數(shù)據(jù)效果并不好,這時就不要使用標(biāo)準(zhǔn)化。
#標(biāo)準(zhǔn)化 s_scaler = preprocessing.StandardScaler() feature = s_scaler.fit_transform(origin_feature)#數(shù)據(jù)還原 origin_feature = s_scaler.inverse_transform(feature)3、標(biāo)簽編碼(數(shù)字化)
很多標(biāo)簽是文本形式,這種格式?jīng)]法用于訓(xùn)練模型,所以需要將文本標(biāo)簽轉(zhuǎn)成數(shù)字標(biāo)簽。用到LabelEncoder模塊。下圖就是上面數(shù)據(jù)集的原始標(biāo)簽。
標(biāo)簽類型 #標(biāo)簽數(shù)字化 le = preprocessing.LabelEncoder() labels =le.fit_transform(origin_labels).astype(np.int64)#標(biāo)簽還原 labels = le.inverse_transform(labels)4、one-hot編碼(特征和標(biāo)簽):One-Hot編碼是分類變量作為二進(jìn)制向量的表示。這首先要求將分類值映射到整數(shù)值。然后,每個整數(shù)值被表示為二進(jìn)制向量,除了整數(shù)的索引之外,它都是零值,它被標(biāo)記為1。
上面數(shù)據(jù)集的標(biāo)簽是?[ 0 0 0 ... 99 99 99]。由于標(biāo)簽是一維,所以需要加【】變成二維,再轉(zhuǎn)置成列向量。
標(biāo)簽由一維的行向量準(zhǔn)換成二維列向量one-hot編碼可以由sklearn.preprocessing import OneHotEncoder和pandas里的get_dummies實(shí)現(xiàn),OneHotEncoder只能處理數(shù)值型而get_dummies可以對其他特殊字符進(jìn)行編碼
1、使用preprocessing.onehotEncoder()編碼
#one-hot編碼 labels = np.array([labels]).T enc = preprocessing.OneHotEncoder() labels = enc.fit_transform(labels).toarray()#還原 origin_labels = enc.inverse_transform(labels)#查看多少類別 le.classes_2、使用pandas的get_dummies模塊對特征值進(jìn)行one-hot編碼
假如1.txt的數(shù)據(jù)如下:
對Cabin和Embarked列執(zhí)行one-hot編碼得到新得到df2,再跟去掉Cabin和Embarked的原始df1合并得到編碼后的df
#用pandas里的get_dummies可以對字符特征變量Sex','Embarked'處理 import pandas as pddf1 = pd.read_csv('./data/1.txt')df2=pd.get_dummies(df1[['Carbin','Embarked']],drop_first=True) #借助concat函數(shù)把編碼變量合并到原來數(shù)據(jù) df=pd.concat([df1.drop(['Carbin','Embarked'],axis=1), df2],axis=1)5、特征二值化:定量特征二值化的核心在于設(shè)定一個閾值,大于閾值的賦值為1,小于等于閾值的賦值為0
二值化公式 #特征二值化 binarizer = preprocessing.Binarizer(threshold=0.2) feature = binarizer.transform(origin_feature)6、標(biāo)簽二值化:
#標(biāo)簽二值化 lb = preprocessing.LabelBinarizer() labels = lb.fit_transform(origin_labels)7、劃分?jǐn)?shù)據(jù)集:
#劃分?jǐn)?shù)據(jù)集為訓(xùn)練集和測試集 from sklearn.model_selection import train_test_split X_train,X_test,y_train,y_test= train_test_split(origin_feature, origin_labels,test_size=0.3,random_state=0)4、制作可迭代的pytorch數(shù)據(jù)集?(選看)
方便pytorch框架操作數(shù)據(jù))
#劃分?jǐn)?shù)據(jù)集 import torch import numpy as np import torch.utils.data as Data from sklearn.model_selection import train_test_splitx_train, x_test, y_train,y_test = train_test_split(feature, labels, test_size=0.25)#制作pytorch識別的數(shù)據(jù)集 train_dataset = Data.TensorDataset(torch.from_numpy(x_train).float(), torch.from_numpy(y_train)) test_dataset = Data.TensorDataset(torch.from_numpy(x_test).float(), torch.from_numpy(y_test))#制作可迭代的數(shù)據(jù)集 train_iter = Data.DataLoader(dataset = train_dataset,batch_size = batch_size,shuffle = True, num_workers = 2) test_iter = Data.DataLoader(dataset = test_dataset, batch_size= batch_size,shuffle = True, num_workers = 2)制作完可迭代的數(shù)據(jù)集后,就可以方便的訓(xùn)練模型。
#循環(huán)一次,獲得一批量的數(shù)據(jù) for X, y in train_iter:print(X)print(y)break下一篇博客:圖片數(shù)據(jù)處理
總結(jié)
以上是生活随笔為你收集整理的(一)机器学习数据处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pandas操作
- 下一篇: pytorch出现‘DataLoader