最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python進(jìn)行數(shù)據(jù)預(yù)處理的4個(gè)重要步驟

 更新時(shí)間:2023年06月21日 11:08:32   作者:程序員學(xué)長(zhǎng)  
在數(shù)據(jù)科學(xué)項(xiàng)目中,數(shù)據(jù)預(yù)處理是最重要的事情之一,本文詳細(xì)給大家介紹python進(jìn)行數(shù)據(jù)預(yù)處理的4個(gè)重要步驟:拆分訓(xùn)練集和測(cè)試集,處理缺失值,處理分類特征和進(jìn)行標(biāo)準(zhǔn)化處理,需要的朋友可以參考下

如果有正確的數(shù)據(jù)預(yù)處理和特征工程,該模型更有可能與數(shù)據(jù)未得到很好預(yù)處理的模型相比,產(chǎn)生更好的結(jié)果。

數(shù)據(jù)預(yù)處理主要有4個(gè)重要步驟。

  • 拆分訓(xùn)練集和測(cè)試集
  • 處理缺失值
  • 處理分類特征
  • 進(jìn)行標(biāo)準(zhǔn)化處理

拆分訓(xùn)練集和測(cè)試集

訓(xùn)練集和測(cè)試集拆分是機(jī)器學(xué)習(xí)中的重要步驟之一。

這非常重要,因?yàn)槟愕哪P托枰诓渴鹬斑M(jìn)行評(píng)估。

訓(xùn)練集和測(cè)試集拆分背后的主要思想是將原始數(shù)據(jù)集轉(zhuǎn)換為兩部分

  • 訓(xùn)練集
  • 測(cè)試集

其中訓(xùn)練集由訓(xùn)練數(shù)據(jù)和訓(xùn)練標(biāo)簽組成,測(cè)試集由測(cè)試數(shù)據(jù)和測(cè)試標(biāo)簽組成。

最簡(jiǎn)單的方法是使用 scikit-learn 的 一個(gè)內(nèi)置函數(shù) train_test_split。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)

在這里,我們?cè)?train_test_split 中傳入了 X 和 y 作為參數(shù) ,它將 X 和 y 進(jìn)行拆分,其中訓(xùn)練集占 80%,測(cè)試集占 20% 。

處理缺失值

你可能聽說過一個(gè)著名的機(jī)器學(xué)習(xí)短語(yǔ),它是

Garbage in Garbage out

如果你的數(shù)據(jù)集充滿了缺失值,那么你的模型效果也不好。

因此,處理此類缺失值很重要。

讓我們用一個(gè)虛擬數(shù)據(jù)集來看看我們?nèi)绾谓鉀Q這個(gè)問題。

首先查看一下數(shù)據(jù)集中的缺失值。

df.isna().sum()

我們可以看到數(shù)據(jù)集中有缺失值。

填充缺失值的一種方法是用該列的平均值填充。

例如,我們可以用該列所有學(xué)生的平均值來填充 Final 列的缺失值。

為此,我們可以使用 sklearn.impute 中的 SimpleImputer 。

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(fill_value=np.nan, startegy='mean')
X = imputer.fit_transform(df)

這將使用 該列的 平均值 填充數(shù)據(jù)框 df 中的所有缺失值 。

可以使用 fit_transform 函數(shù)來做到這一點(diǎn)。

X = pd.DataFrame(X, columns=df.columns)
print(X)

現(xiàn)在,可以看到所有缺失值都用均值進(jìn)行了填充

X.isna().sum()

我們也可以在 SimpleImputer 中使用 mean、 meadian、 mode 等 。

如果 缺失值的行數(shù)較少,或者我們的數(shù)據(jù)不建議填充缺失值,那么可以在 pandas 中使用 dropna 刪除缺失的行。

dropedDf = df.dropna()

在這里,我們刪除了數(shù)據(jù)框中的所有空行并將其存儲(chǔ)在另一個(gè)數(shù)據(jù)框中。

dropedD.isna().sum()

處理分類特征

我們可以通過將它們轉(zhuǎn)換為整數(shù)來處理分類特征。有兩種常見的方法可以做到這一點(diǎn)。

  • Label Encoding
  • One Hot Encoding

在 Label Encoder中,將分類值轉(zhuǎn)換為數(shù)字標(biāo)簽。假設(shè)這是我們的數(shù)據(jù)集

在 Country 列上使用 Label Encoding 會(huì)將 India 轉(zhuǎn)換為 1,將 USA 轉(zhuǎn)換為 2,將 China 轉(zhuǎn)換為 0。

這種技術(shù)有一個(gè)缺點(diǎn),即由于 USA 的標(biāo)簽高,它給予 USA 最高優(yōu)先級(jí),而 China 的優(yōu)先級(jí)最低,標(biāo)簽為 0。

from sklearn.preprocessing import LabelEncoder
l1 = LabelEncoder()
l1.fit(catDf['Country'])
catDf.Country = l1.transform(catDf.Country)
print(catDf)

如代碼所示,我們實(shí)例化了一個(gè) LabelEncoder 對(duì)象,然后使用 fit 方法將其應(yīng)用到分類列上,然后使用 transform 方法進(jìn)行轉(zhuǎn)換。

OneHotEncoder 中 ,我們?yōu)槊總€(gè)唯一的分類值創(chuàng)建一個(gè)新列。

下面通過一個(gè)例子來了解一下。

我們將添加另一個(gè)分類列,即 “Continent”。

catDf['Continent'] = ['Asia', 'North America', 'Asia']

現(xiàn)在因?yàn)槲覀冇?2 個(gè)分類列,它們是 [['Country', 'Continent']],我們可以對(duì)它們進(jìn)行獨(dú)熱編碼。

有兩種方法可以做到這一點(diǎn)。

1.DataFrame.get_dummies

這是一種非常常見的方法,我們使用 pandas 內(nèi)置函數(shù) get_dummies 將數(shù)據(jù)幀中的分類值轉(zhuǎn)換為獨(dú)熱編碼。

pd.get_dummies(data=catDf)

這將 返回 一個(gè)數(shù)據(jù)幀。

在這里我們可以看到它已經(jīng)將 Country 列的唯一值轉(zhuǎn)換為 3 個(gè)不同的列,分別是 Country_China、Country_India 和 Country_USA。同樣,Continent 列的 2 個(gè)唯一值已轉(zhuǎn)換為 2 個(gè)不同的列,分別命名為 Continent_Asia 和 Continent_North America。

2.OneHotEncoder

使用 scikit-learn 中的 OneHotEncoder 也是一種常見的做法。

它提供了更多的靈活性和更多的選擇,但使用起來有點(diǎn)困難。

讓我們看看如何為我們的數(shù)據(jù)集做這件事。

from sklearn.preprocessing import OneHotEncoder
oh = OneHotEncoder()
s1 = pd.DataFrame(oh.fit_transform(catDf.iloc[:, [0,3]]))
catDf = pd.concat([catDf, s1], axis=1)

在這里,我們已經(jīng)初始化了 OneHotEncoder 對(duì)象,并在數(shù)據(jù)框中對(duì)我們想要的列(列號(hào) 0 和列號(hào) 3)上使用了它的 fit_transform方法。

fit_transform 的返回類型 是 numpy.ndarray ,所以我們通過pd.DataFrame 將其轉(zhuǎn)換為數(shù)據(jù)框 ,并存儲(chǔ)在一個(gè)變量中。

然后,為了將它加入我們的原始數(shù)據(jù)幀,可以使用 pd.concat 連接 2 個(gè)不同數(shù)據(jù)幀。

你可以看到,與 pd.get_dummies 相比,它的可讀性并不清晰

但是如果你比較使用 pd.get_dummies 和 OneHotEncoder 獲得的最后 5 列,它們都是相等的。

標(biāo)準(zhǔn)化數(shù)據(jù)集

某些實(shí)驗(yàn)證明,與未標(biāo)準(zhǔn)化的數(shù)據(jù)集相比,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型在標(biāo)準(zhǔn)化數(shù)據(jù)集上的表現(xiàn)更好。

有幾種方法可以做到這一點(diǎn)。我將討論標(biāo)準(zhǔn)化數(shù)據(jù)集的 2 種常用方法。

1、Standard Scaler

使用這種技術(shù),可以將數(shù)據(jù)集轉(zhuǎn)化為均值為 0,標(biāo)準(zhǔn)差為 1。

from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
catDf.iloc[:,1:-1] = ss.fit_transform(catDf.iloc[:,1:-1])
print(catDf)

2、Normalization

正則化是將 **每個(gè)樣本縮放到單位范數(shù)(每個(gè)樣本的范數(shù)為1)**的過程。

如果你計(jì)劃使用二次型(點(diǎn)積)或任何其他核方法來計(jì)算兩個(gè)樣本之間的相似性,則此過程會(huì)很有用。

Normalization 主要思想是對(duì)每個(gè)樣本計(jì)算其p-范數(shù),然后對(duì)該樣本中每個(gè)元素除以該范數(shù),這樣處理的結(jié)果是使得每個(gè)處理后樣本的p-范數(shù)(l1-norm,l2-norm)等于1。

使用過程非常簡(jiǎn)單,與 StandaradScaler 類似。

from sklearn.preprocessing import Normalizer
norm = Normalizer()
catDf.iloc[:,1:-1] = norm.fit_transform(catDf.iloc[:,1:-1])
catDf

以上就是python進(jìn)行數(shù)據(jù)預(yù)處理的4個(gè)重要步驟的詳細(xì)內(nèi)容,更多關(guān)于python 數(shù)據(jù)預(yù)處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

开封市| 岳西县| 桐梓县| 张家川| 沙坪坝区| 布尔津县| 云安县| 策勒县| 宁晋县| 天柱县| 古田县| 白朗县| 宜阳县| 土默特左旗| 涪陵区| 玉屏| 徐汇区| 大英县| 沭阳县| 荆门市| 轮台县| 怀仁县| 桃源县| 六枝特区| 北票市| 开封县| 兰坪| 尼玛县| 且末县| 会理县| 得荣县| 盐亭县| 铜梁县| 开化县| 克山县| 泉州市| 上虞市| 鄂伦春自治旗| 攀枝花市| 弋阳县| 准格尔旗|