日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(一)机器学习数据处理

發(fā)布時間:2025/3/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (一)机器学习数据处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。