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

詳解python?sklearn中的數(shù)據(jù)預(yù)處理方法

 更新時(shí)間:2023年08月27日 10:13:05   作者:rink1t  
本篇文章主要講解Python的sklearn庫(kù)中常用的數(shù)據(jù)預(yù)處理方法,主要介紹工具中的內(nèi)容,即該庫(kù)中的相關(guān)方法包含的常用接口和基本使用,希望對(duì)大家有所幫助

前言

本篇文章主要講解Python的sklearn庫(kù)中常用的數(shù)據(jù)預(yù)處理方法,主要介紹工具中的內(nèi)容,即該庫(kù)中的相關(guān)方法包含的常用接口和基本使用,并不適合手把手入門(mén)學(xué)習(xí),此外將涉及更少的原理和使用情況說(shuō)明。

sklearn中的數(shù)據(jù)預(yù)處理

  • sklearn.preprocessing:sklearn中的數(shù)據(jù)預(yù)處理模塊
  • sklearn.impute:sklearn中的缺失值填充模塊

本文主要涉及的方法:

  • 極差歸一化:sklearn.preprocessing.MinMaxScaler
  • 數(shù)據(jù)標(biāo)準(zhǔn)化:sklearn.preprocessing.StandardScaler
  • 標(biāo)簽編碼:sklearn.preprocessing.LabelEncoder
  • 特征編碼:sklearn.preprocessing.OrdinalEncoder
  • 數(shù)據(jù)二值化:sklearn.preprocessing.Binarizer
  • 數(shù)據(jù)分箱:sklearn.preprocessing.KBinsDiscretizer
  • 缺失值處理:sklearn.impute.SimpleImputer

ps:擬合的時(shí)候可以傳入多個(gè)特征數(shù)據(jù),sklearn中的方法大多都會(huì)自動(dòng)分別對(duì)每一列進(jìn)行處理,但sklearn一般不支持一維數(shù)據(jù)導(dǎo)入,至少為二維,若想傳入一維數(shù)組進(jìn)行處理可以使用reshape(-1, 1)轉(zhuǎn)為二維數(shù)組,若想傳入單個(gè)Series對(duì)象則需要先將其轉(zhuǎn)為DataFrame對(duì)象。

數(shù)據(jù)無(wú)量綱化

極差歸一化:統(tǒng)一量綱,將某特征下所有的值歸一化在指定范圍內(nèi),默認(rèn)該范圍為 [0,1][0, 1][0,1],也可以手動(dòng)確定范圍。

常用接口如下:

import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
data = pd.DataFrame(np.random.randint(10, 100, (5, 2)))  # 準(zhǔn)備測(cè)試數(shù)據(jù)
# 常用接口
scaler = MinMaxScaler()  # 默認(rèn)范圍為 [0,1]
scaler = MinMaxScaler(feature_range=[5, 10])  # 自定義歸一化數(shù)據(jù)范圍
scaler.fit(data)  # 擬合數(shù)據(jù)
scaler.partial_fit(data)  # 數(shù)據(jù)量大的時(shí)候fit()報(bào)錯(cuò),可以使用partial_fit()
result = scaler.transform(data)   # 變換數(shù)據(jù)
result = scaler.fit_transform(data)    # 擬合和變換一步達(dá)成
data = scaler.inverse_transform(result)  # 逆向變換

.partial_fit():該方法是一種增量學(xué)習(xí)的方式,可以逐步從流式數(shù)據(jù)中學(xué)習(xí)縮放參數(shù),當(dāng)數(shù)據(jù)量太大導(dǎo)致 .fit() 接口報(bào)錯(cuò)時(shí),可以使用該接口

我們把大批量的數(shù)據(jù)想象成一個(gè)大湖,既然我們無(wú)法一次性將這個(gè)大湖中的所有水進(jìn)行處理(學(xué)習(xí)),但我們可以將其延伸出來(lái)一條小河,對(duì)順著小何流動(dòng)的水(數(shù)據(jù)流)不斷進(jìn)行處理(學(xué)習(xí))。

  • 增量學(xué)習(xí):是一種可以逐步從新數(shù)據(jù)中學(xué)習(xí)的機(jī)器學(xué)習(xí)方法。它不需要重新訓(xùn)練整個(gè)模型,而是可迭代地更新模型參數(shù)。
  • 流式數(shù)據(jù):指的是連續(xù)不斷產(chǎn)生的數(shù)據(jù)流

Z-score標(biāo)準(zhǔn)化:統(tǒng)一量綱,且變換后的數(shù)據(jù)服從均值為0方差為1的標(biāo)準(zhǔn)正態(tài)分布。

常用接口如下:和MinMaxScaler基本一樣

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
data = pd.DataFrame(np.random.randint(10, 100, (5, 2)))  # 準(zhǔn)備測(cè)試數(shù)據(jù)
# 常用接口
scaler = StandardScaler()  # 創(chuàng)建對(duì)象
scaler.fit(data)  # 擬合數(shù)據(jù)
scaler.partial_fit(data)  # 數(shù)據(jù)量大的時(shí)候fit()報(bào)錯(cuò),可以使用partial_fit()
result = scaler.transform(data)  # 變換數(shù)據(jù)
result = scaler.fit_transform(data)  # 擬合和變換一步達(dá)成
data = scaler.inverse_transform(result)  # 逆向變換
# 常用屬性
scaler.var_  # 擬合后查看各列數(shù)據(jù)的方差
scaler.mean_  # 擬合后查看各列數(shù)據(jù)的均值

對(duì)于 StandardScaler 和 MinMaxScaler 來(lái)說(shuō),空值NaN會(huì)被當(dāng)做是缺失值,在 fit 的時(shí)候忽略,在 transform 的時(shí)候保持缺失 NaN 的狀態(tài)顯示。

缺失值處理

SimpleImputer 是sklearn中的簡(jiǎn)單填充方案,可以填充均值、中位數(shù)、眾數(shù)或特定值

常用參數(shù):

missing_values:改組數(shù)據(jù)中的缺失值是什么樣的,默認(rèn)為 np.nan

strategy:填充策略,默認(rèn)為'mean'

  • 'mean':均值填充
  • 'median':中位數(shù)填充
  • 'most_frequent':眾數(shù)填充
  • 'constant':填充固定值,該值在 fill_value參數(shù)中設(shè)置

fill_value:在 strategy 參數(shù)設(shè)置為 'constant' 時(shí),設(shè)置填充值

copy:默認(rèn)為T(mén)rue,給處理后的數(shù)據(jù)創(chuàng)建副本并返回,否則在原對(duì)象上進(jìn)行修改

常用接口:

import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer
data = pd.DataFrame(np.random.randint(10, 100, (5, 2)))  # 準(zhǔn)備測(cè)試數(shù)據(jù)
# 常用接口
imp_mean = SimpleImputer()  # 均值填充缺失值
imp_median = SimpleImputer(strategy='median')  # 中位數(shù)填充缺失值
imp_mode = SimpleImputer(strategy='most_frequent')  # 眾數(shù)填充
imp_0 = SimpleImputer(strategy='constant', fill_value=0)  # 0填充
imp_mean.fit(data)  # 擬合數(shù)據(jù)
result = imp_mean.transform(data)  # 變換數(shù)據(jù)
result = imp_mean.fit_transform(data)  # 擬合和變換一步到位

除了使用sklearn中的SimpleImputer進(jìn)行簡(jiǎn)單填充,利用pandas也可以直接進(jìn)行填充:

import pandas as pd
import numpy as np
data = pd.DataFrame(np.random.randint(10, 100, (5, 2)))  # 準(zhǔn)備測(cè)試數(shù)據(jù)
data.iloc[0:2, 0:2] = np.nan
# 使用pandas進(jìn)行缺失值填充
result = data.fillna(0)  # 0填充所有缺失值
# 均值填充第0列,中位數(shù)填充、眾數(shù)填充同理
result = data.iloc[:, 0] = data.iloc[:, 0].fillna(data.iloc[:, 0].mean())  
result = data.dropna(axis=0)  # 刪除所有含有缺失值的樣本數(shù)據(jù)

注意:pandas中的.mean().median()方法返回對(duì)應(yīng)均值或中位數(shù),但由于眾數(shù)可能含有多個(gè),取眾數(shù).mode()方法返回的是一個(gè)Series對(duì)象,填充時(shí)取其中的任意值即可,一般取索引為0的值。

中位數(shù)只可能是一個(gè)或者兩個(gè),若為兩個(gè),則取這兩個(gè)數(shù)的均值,但眾數(shù)則可能有很多個(gè)

編碼和啞變量

LabelEncoder和OrdinalEncoder分別用于給標(biāo)簽和特征數(shù)據(jù)進(jìn)行編碼,主要用于非名義變量。

import pandas as pd
from sklearn.preprocessing import LabelEncoder, OrdinalEncoder, OneHotEncoder
# 準(zhǔn)備測(cè)試數(shù)據(jù)
data_dic = {
    '性別': ['男', '女', '女', '男', '女'],
    '學(xué)歷': ['小學(xué)', '初中', '初中', '大學(xué)', '高中'],
    '標(biāo)簽': ['標(biāo)簽3', '標(biāo)簽1', '標(biāo)簽2', '標(biāo)簽3', '標(biāo)簽2'],
}
data = pd.DataFrame(data_dic) 
# 常用接口
le = LabelEncoder()  # 創(chuàng)建對(duì)象
oe = OrdinalEncoder()
le = le.fit(data.loc[:, '標(biāo)簽'])  # 擬合數(shù)據(jù)
result = le.transform(data.loc[:, '標(biāo)簽'])  # 變換數(shù)據(jù)
result = le.fit_transform(data.loc[:, '標(biāo)簽'])  # 擬合和變換一步達(dá)成
data = le.inverse_transform(result)  # 逆向變換
data = pd.DataFrame(data_dic)
# 一般這樣寫(xiě)
result = LabelEncoder().fit_transform(data.loc[:, '標(biāo)簽']) 
result = OrdinalEncoder().fit_transform(data.loc[:, ['性別', '學(xué)歷']])
# 常用屬性
le.classes_   # 返回原來(lái)的字符串標(biāo)簽唯一值數(shù)組, 按該數(shù)組順序編號(hào)
oe.categories_    # 返回原來(lái)的字符串標(biāo)簽數(shù)組, 按該數(shù)組順序編號(hào)

OrdinalEcoder和LabelEncoder用法和接口幾乎一致,區(qū)別在于LabelEncoder可以處理一維數(shù)據(jù),且使用.classes_屬性來(lái)查看標(biāo)簽編號(hào)數(shù)組,OrdinalEncoder不能處理一維數(shù)據(jù),且使用.categories_屬性來(lái)查看標(biāo)簽編號(hào)數(shù)組

OneHotEncoder獨(dú)熱編碼主要用于名義變量,將特征轉(zhuǎn)換為啞變量。

特征可以轉(zhuǎn)換為啞變量,標(biāo)簽也可以,許多算法可以處理多標(biāo)簽問(wèn)題,但這樣的做法在現(xiàn)實(shí)中不常見(jiàn)。

常用參數(shù):

categories:表示每個(gè)特征都有哪些類(lèi)別,默認(rèn)為 'auto',一般情況我們都用默認(rèn)值

  • 'auto':為自行判斷
  • 嵌套列表:列表中里面每個(gè)元素都是一個(gè)包含特征類(lèi)別的列表。

'handle_unknown':表示對(duì)于未注明特征或類(lèi)別的處理方式,默認(rèn)為 'error'

  • 'error':設(shè)置categories后,算法遇到了列表中沒(méi)有包含的特征或類(lèi)別時(shí),會(huì)報(bào)錯(cuò),
  • 'ignore':未在 categories 注明的特征或類(lèi)別的啞變量都會(huì)顯示0,在逆向變換時(shí)未知特征或類(lèi)別則會(huì)顯示None
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
# 準(zhǔn)備測(cè)試數(shù)據(jù)
data_dic = {
    '性別': ['男', '女', '女', '男', '女'],
    '學(xué)歷': ['小學(xué)', '初中', '初中', '大學(xué)', '高中'],
    '標(biāo)簽': ['標(biāo)簽3', '標(biāo)簽1', '標(biāo)簽2', '標(biāo)簽3', '標(biāo)簽2'],
}
data = pd.DataFrame(data_dic) 
# 常用接口
encoder = OneHotEncoder()
encoder.fit(data[['性別']])  # 擬合數(shù)據(jù)
result = encoder.transform(data[['性別']])  # 變換數(shù)據(jù)
result = encoder.fit_transform(data[['性別']])  # 擬合和變換一步到位
data = encoder.inverse_transform(result)  # 逆向變換
# 一般這樣寫(xiě)
result = OneHotEncoder().fit_transform(data[['性別']])

注意:OneHotEncoder在transform后返回的是稀疏矩陣,需要使用 .toarray() 方法轉(zhuǎn)為矩陣(二維數(shù)組);inverse_transfrom可以接收稀疏矩陣也可以接收正常的矩陣,返回正常的矩陣。

此外,在經(jīng)過(guò)OneHotEncoder處理后我們需要自行使用pandas將啞變量拼接到原矩陣(pd.concat())和刪除原來(lái)的特征(pd.drop())

連續(xù)型特征處理

Binarizer用于將數(shù)據(jù)二值化,所謂數(shù)據(jù)二值化,就是設(shè)置一個(gè)閾值,小于等于該閾值的記為0,大于該閾值的記為1。

常用接口:

import numpy as np
from sklearn.preprocessing import Binarizer
data = np.arange(10, 20).reshape(-1, 1)
bin = Binarizer(threshold=15)  # 默認(rèn)threshold為0
bin.fit(data)  # 擬合數(shù)據(jù)
result = bin.transform(data)  # 變換數(shù)據(jù)
result = bin.fit_transform(data)  # 擬合和變換一步達(dá)成
# 一般這樣用
result = Binarizer(threshold=15).fit_transform(data)

KBinsDiscretizer用于將連續(xù)型變量劃分為分類(lèi)變量,能夠?qū)⑦B續(xù)型變量排序后按順序分箱后編碼。

常用參數(shù):

'n_bins':每個(gè)特征中分箱的個(gè)數(shù),默認(rèn)為5,

'encode':編碼方式,默認(rèn)為 'onehot'

  • 'onehot':獨(dú)熱編碼為啞變量,返回一個(gè)稀疏矩陣
  • 'onehot-dense':獨(dú)熱編碼為啞變量,返回一個(gè)密集矩陣 (一般的矩陣)
  • 'ordinal':每個(gè)特征的每箱數(shù)據(jù)都被編碼為一個(gè)整數(shù),返回編碼后的矩陣

'strategy':定義分箱方式,默認(rèn)為 'quantile'

  • 'uniform':等寬分箱,每個(gè)特征的每箱數(shù)據(jù)中的極差不得高于 max(x)−min(x)Nbins\frac{max(x)-min(x)}{N_{bins}}Nbins?max(x)−min(x)?,其中 xxx 表示某特征下的數(shù)據(jù),NbinsN_{bins}Nbins? 表示分箱個(gè)數(shù)
  • 'quantile':等位分箱,即每個(gè)特征中的每個(gè)箱內(nèi)的樣本數(shù)量都相同
  • 'kmeans':按kmeans聚類(lèi)分箱,每個(gè)箱中的值到最近的一維k均值聚類(lèi)的簇心的距離都相同

常用接口:

import numpy as np
import pandas as pd
from sklearn.preprocessing import KBinsDiscretizer
data = pd.DataFrame(np.random.randint(10, 100, (5, 2)))  # 準(zhǔn)備測(cè)試數(shù)據(jù)
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='quantile')
est.fit(data)  # 擬合數(shù)據(jù)
result = est.transform(data)  # 變換數(shù)據(jù)
result = est.fit_transform(data)  # 擬合和變換一步到位
data = est.inverse_transform(result)  # 
# 一般這樣用
result = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='quantile').fit_transform(data)

需要注意的是,這里的inverse_transform已經(jīng)無(wú)法將數(shù)據(jù)轉(zhuǎn)為原來(lái)的數(shù)據(jù),因?yàn)樵谶M(jìn)行分箱離散化時(shí),原始的連續(xù)值已經(jīng)被轉(zhuǎn)換到了分箱區(qū)間中,inverse_transform不可能恢復(fù)到與原始值完全相同的結(jié)果,但是它可以通過(guò)區(qū)間映射,將分類(lèi)變量映射回連續(xù)值的范圍中,從而部分恢復(fù)原始數(shù)據(jù)的連續(xù)分布區(qū)間,結(jié)果并不會(huì)每一個(gè)值都完全等于原始數(shù)據(jù),但整體上逼近了原始數(shù)據(jù)的分布范圍。

不建議使用inverse_transform,因?yàn)槟嫦蜃儞Q后的數(shù)據(jù)已經(jīng)不是原本的數(shù)據(jù)了。

到此這篇關(guān)于詳解python sklearn中的數(shù)據(jù)預(yù)處理方法的文章就介紹到這了,更多相關(guān)python sklearn數(shù)據(jù)預(yù)處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Django中輸出matplotlib生成的圖片方法

    在Django中輸出matplotlib生成的圖片方法

    今天小編就為大家分享一篇在Django中輸出matplotlib生成的圖片方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 運(yùn)行Python編寫(xiě)的程序方法實(shí)例

    運(yùn)行Python編寫(xiě)的程序方法實(shí)例

    在本篇文章里小編給大家整理了關(guān)于運(yùn)行Python編寫(xiě)的程序方法實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-10-10
  • Python利用openpyxl操作Excel表格的完整指南

    Python利用openpyxl操作Excel表格的完整指南

    存測(cè)試數(shù)據(jù)有時(shí)候有大批量的數(shù)據(jù),存到TXT文件里面顯然不是最佳的方式,我們可以存到Excel里面去,下面我們就來(lái)看看如何使用Python自動(dòng)化操作Excel表格吧
    2026-03-03
  • Python連接SQLServer2000的方法詳解

    Python連接SQLServer2000的方法詳解

    這篇文章主要介紹了Python連接SQLServer2000的方法,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接過(guò)程中所遇到的常見(jiàn)問(wèn)題與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-04-04
  • Pyqt5自適應(yīng)布局實(shí)例

    Pyqt5自適應(yīng)布局實(shí)例

    今天小編就為大家分享一篇Pyqt5自適應(yīng)布局實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python實(shí)現(xiàn)指定ip端口掃描方式

    python實(shí)現(xiàn)指定ip端口掃描方式

    今天小編就為大家分享一篇python實(shí)現(xiàn)指定ip端口掃描方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python Web框架Flask中使用百度云存儲(chǔ)BCS實(shí)例

    Python Web框架Flask中使用百度云存儲(chǔ)BCS實(shí)例

    這篇文章主要介紹了Python Web框架Flask中使用百度云存儲(chǔ)BCS實(shí)例,本文調(diào)用了百度云存儲(chǔ)Python SDK中的相關(guān)類(lèi),需要的朋友可以參考下
    2015-02-02
  • Httprunner簡(jiǎn)介、安裝及基本使用教程

    Httprunner簡(jiǎn)介、安裝及基本使用教程

    httprunner是一款面向 HTTP(S) 協(xié)議的通用測(cè)試框架。只需編寫(xiě)維護(hù)一份 YAML/JSON 腳本,即可實(shí)現(xiàn)自動(dòng)化測(cè)試、性能測(cè)試、線上監(jiān)控、持續(xù)集成等多種測(cè)試需求,本文給大家介紹Httprunner安裝使用教程,感興趣的朋友一起看看吧
    2022-02-02
  • python基礎(chǔ)之入門(mén)必看操作

    python基礎(chǔ)之入門(mén)必看操作

    下面小編就為大家?guī)?lái)一篇python基礎(chǔ)之入門(mén)必看操作。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • PyTorch梯度下降反向傳播

    PyTorch梯度下降反向傳播

    這篇文章主要介紹了PyTorch反向傳播,反向傳播的目的是計(jì)算成本函數(shù)C對(duì)網(wǎng)絡(luò)中任意w或b的偏導(dǎo)數(shù),下文更多詳細(xì)內(nèi)容敘述需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論

新邵县| 鹤壁市| 任丘市| 岱山县| 兴宁市| 台北县| 汶上县| 从化市| 米泉市| 柏乡县| 河津市| 大连市| 哈尔滨市| 色达县| 丁青县| 衡阳市| 乌拉特前旗| 收藏| 五莲县| 剑阁县| 抚顺市| 张家界市| 九寨沟县| 绍兴县| 惠安县| 咸阳市| 天门市| 施甸县| 洪湖市| 雷波县| 平安县| 新昌县| 蓬莱市| 鄂伦春自治旗| 襄垣县| 崇仁县| 邵阳县| 鹰潭市| 京山县| 连城县| 沂源县|