深度學(xué)習(xí)數(shù)據(jù)預(yù)處理簡(jiǎn)單介紹
深度學(xué)習(xí)的數(shù)據(jù)預(yù)處理包括以下幾個(gè)方面:
- 數(shù)據(jù)讀取和加載:將數(shù)據(jù)從存儲(chǔ)介質(zhì)中讀取到內(nèi)存中,用于后續(xù)的處理和訓(xùn)練。
- 數(shù)據(jù)清洗和去噪:對(duì)數(shù)據(jù)進(jìn)行處理,修復(fù)缺失值和錯(cuò)誤,去除噪聲和異常值等。
- 數(shù)據(jù)歸一化和縮放:對(duì)數(shù)據(jù)進(jìn)行歸一化和縮放,使得數(shù)據(jù)具有相同的范圍和分布,以提高模型的訓(xùn)練效果。
- 數(shù)據(jù)變換和映射:對(duì)數(shù)據(jù)進(jìn)行特征提取、降維和變換,以減少數(shù)據(jù)的維度和提取有用的特征。
- 數(shù)據(jù)增強(qiáng)和擴(kuò)展:通過對(duì)數(shù)據(jù)進(jìn)行旋轉(zhuǎn)、裁剪、翻轉(zhuǎn)、加噪聲等操作,增加數(shù)據(jù)的數(shù)量和多樣性,提高模型的泛化能力和魯棒性。
- 數(shù)據(jù)劃分和驗(yàn)證:將原始數(shù)據(jù)集劃分為訓(xùn)練集、驗(yàn)證集和測(cè)試集,用于模型的訓(xùn)練、調(diào)優(yōu)和評(píng)估。
- 數(shù)據(jù)保存和加載:將數(shù)據(jù)和模型保存到磁盤或云存儲(chǔ),用于后續(xù)的部署和應(yīng)用。
在每個(gè)方面,具體的處理方法和技術(shù)都有很多種,需要根據(jù)具體的問題和數(shù)據(jù)特征進(jìn)行選取和應(yīng)用。
在深度學(xué)習(xí)中,數(shù)據(jù)預(yù)處理是非常關(guān)鍵的一個(gè)步驟。本教程將介紹一些數(shù)據(jù)預(yù)處理的基礎(chǔ)技巧,包括數(shù)據(jù)清洗、歸一化、平衡數(shù)據(jù)集等。
數(shù)據(jù)清洗
數(shù)據(jù)清洗是指刪除或糾正數(shù)據(jù)集中的錯(cuò)誤或不完整的數(shù)據(jù)。數(shù)據(jù)清洗可以有效地避免噪聲的影響,提高模型的準(zhǔn)確性。
常見的數(shù)據(jù)清洗方法包括:
- 刪除缺失數(shù)據(jù):刪除數(shù)據(jù)中包含缺失值的行或列。
- 數(shù)據(jù)平滑:平滑噪聲的方法包括濾波和移動(dòng)平均。
- 去重:刪除數(shù)據(jù)集中的重復(fù)數(shù)據(jù)。
- 異常檢測(cè):檢測(cè)并刪除異常數(shù)據(jù)。
- 缺失值填充:增加一些缺失值
- 重復(fù)值刪除:去掉一些重復(fù)數(shù)據(jù),和去重類似
- 數(shù)據(jù)類型轉(zhuǎn)換:把數(shù)據(jù)轉(zhuǎn)換為不同的類型
1. 刪除缺失數(shù)據(jù)
在數(shù)據(jù)中有時(shí)會(huì)存在缺失的情況,比如某一行或某一列中某些數(shù)據(jù)沒有被記錄,這些缺失值可能會(huì)對(duì)后續(xù)處理產(chǎn)生負(fù)面影響。因此,我們需要將這些缺失數(shù)據(jù)清除掉。
import pandas as pd
# 讀取csv文件
df = pd.read_csv('data.csv')
# 刪除包含缺失值的行或列
df = df.dropna(axis=0, subset=['col1', 'col2'])
在這段代碼中,我們使用 Pandas 庫(kù)中的 read_csv
函數(shù)來讀取 csv 文件,然后使用 dropna
函數(shù)刪除包含缺失值的行或列,其中 axis=0
參數(shù)表示刪除行, subset=['col1', 'col2']
參數(shù)表示對(duì)列 ‘col1’ 和 ‘col2’ 中含有缺失值的行進(jìn)行刪除。
2. 數(shù)據(jù)平滑
在一些數(shù)據(jù)中可能會(huì)存在噪聲,而噪聲會(huì)影響模型的表現(xiàn),因此需要對(duì)數(shù)據(jù)進(jìn)行平滑處理,以減少噪聲的影響。
import numpy as np
from scipy.ndimage.filters import gaussian_filter
# 生成帶噪聲的數(shù)據(jù)
data = np.random.uniform(low=0.0, high=1.0, size=(100,))
noise = np.random.normal(loc=0, scale=0.1, size=(100,))
data_with_noise = data + noise
# 進(jìn)行高斯濾波
data_smooth = gaussian_filter(data_with_noise, sigma=3)
首先,我們使用 Numpy 庫(kù)中的 np.random
模塊生成一個(gè)隨機(jī)的數(shù)據(jù)集,并添加了一些噪聲。然后使用 Scipy 庫(kù)中的 gaussian_filter
函數(shù)對(duì)數(shù)據(jù)進(jìn)行高斯濾波,其中 sigma=3
表示設(shè)定高斯核的標(biāo)準(zhǔn)差為 3。
3. 去重
在某些數(shù)據(jù)集中,可能會(huì)包含一些重復(fù)的數(shù)據(jù),這些重復(fù)數(shù)據(jù)會(huì)對(duì)模型的準(zhǔn)確性產(chǎn)生負(fù)面影響,因此需要將這些重復(fù)的數(shù)據(jù)刪除。
# 生成帶重復(fù)數(shù)據(jù)的數(shù)據(jù)集
data = [1, 2, 2, 3, 4, 4, 4, 5]
# 使用 Pandas 庫(kù)去重
unique_data = pd.DataFrame(data, columns=['col1']).drop_duplicates()
這段代碼中,我們首先生成了一個(gè)包含重復(fù)數(shù)據(jù)的數(shù)據(jù)集,然后使用 Pandas 庫(kù)中的 drop_duplicates
函數(shù)對(duì)數(shù)據(jù)集進(jìn)行去重,其中 columns=['col1']
表示以列 ‘col1’ 作為唯一標(biāo)識(shí),如果該列中有重復(fù)數(shù)據(jù),則將其刪除。
4. 異常檢測(cè)
檢測(cè)異常數(shù)據(jù)的方法有很多種,常見的方法包括箱線圖、z-score等,這里根據(jù)數(shù)據(jù)集的特點(diǎn)和具體的需求進(jìn)行適當(dāng)選擇。
import numpy as np
# 生成帶異常數(shù)據(jù)的數(shù)據(jù)集
data = [1, 2, 3, 4, 100]
# 使用 z-score 進(jìn)行異常檢測(cè)
mean_value = np.mean(data)
std_value = np.std(data)
threshold = 2.0
outliers = []
for x in data:
if abs(x - mean_value) > threshold * std_value:
outliers.append(x)
這段代碼中,我們首先生成了一個(gè)包含異常數(shù)據(jù)的數(shù)據(jù)集,然后使用 z-score 進(jìn)行異常檢測(cè),將均值加減兩倍標(biāo)準(zhǔn)差之外的數(shù)據(jù)都視為異常數(shù)據(jù),并將其放入列表 outliers 中。
5. 缺失值填充
在數(shù)據(jù)中,有時(shí)候可能會(huì)有一些缺失值,這會(huì)影響到數(shù)據(jù)的計(jì)算和分析,因此需要進(jìn)行缺失值填充。
import pandas as pd
# 生成帶缺失值的數(shù)據(jù)集
data = {'name': ['A', 'B', 'C', 'D'], 'age': [20, None, 22, 24], 'gender': ['M', 'F', None, 'F']}
df = pd.DataFrame(data)
# 使用均值填充缺失值
df = df.fillna(df.mean())
這段代碼中,我們首先生成了一個(gè)帶缺失值的數(shù)據(jù)集,然后使用 Pandas 庫(kù)中的 fillna
函數(shù)對(duì)缺失值進(jìn)行填充,其中 df.mean()
表示使用列的均值來填充缺失值。
6. 重復(fù)值刪除
在數(shù)據(jù)集中,有時(shí)可能會(huì)有一些完全相同的數(shù)據(jù)記錄,這些記錄對(duì)數(shù)據(jù)分析不會(huì)產(chǎn)生太大的影響,并且刪除這些記錄可以為后續(xù)的分析提供更準(zhǔn)確的數(shù)據(jù)。
import pandas as pd
# 生成帶重復(fù)值的數(shù)據(jù)集
data = {'name': ['A', 'B', 'B', 'C', 'C'], 'age': [20, 22, 22, 24, 24], 'gender': ['M', 'F', 'F', 'F', 'F']}
df = pd.DataFrame(data)
# 使用唯一值篩選器刪除重復(fù)值
df = df.drop_duplicates()
這段代碼中,我們首先生成了一個(gè)帶重復(fù)值的數(shù)據(jù)集,然后使用 Pandas 庫(kù)中的 drop_duplicates
函數(shù)對(duì)數(shù)據(jù)集進(jìn)行去重,保留第一次出現(xiàn)的記錄,同時(shí)刪除后續(xù)的記錄。
7. 數(shù)據(jù)類型轉(zhuǎn)換
在深度學(xué)習(xí)中,很多時(shí)候需要對(duì)數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,如將字符串類型轉(zhuǎn)換成整型或浮點(diǎn)型數(shù)據(jù)。
import pandas as pd
# 生成帶字符串類型的數(shù)據(jù)集
data = {'name': ['A', 'B', 'C', 'D'], 'age': ['20', '22', '24', '26']}
df = pd.DataFrame(data)
# 將字符串類型轉(zhuǎn)換為整型
df['age'] = df['age'].astype(int)
這段代碼中,我們首先生成了一個(gè)帶字符串類型的數(shù)據(jù)集,然后使用 Pandas 庫(kù)中的 astype
函數(shù)將 ‘a(chǎn)ge’ 列的數(shù)據(jù)類型轉(zhuǎn)換成整型。我們還可以使用 float
、str
等其他類型,具體根據(jù)需要進(jìn)行選擇。
小結(jié)
數(shù)據(jù)清洗是深度學(xué)習(xí)中十分重要的步驟,本文介紹了數(shù)據(jù)清洗常用的操作,包括刪除缺失數(shù)據(jù)、數(shù)據(jù)平滑、去重、異常檢測(cè)、缺失值填充、重復(fù)值刪除以及數(shù)據(jù)類型轉(zhuǎn)換,并提供了相應(yīng)的 Python 代碼。在實(shí)踐中,我們可以根據(jù)具體數(shù)據(jù)集的特點(diǎn)和需求選擇相應(yīng)的方法來進(jìn)行數(shù)據(jù)清洗。
歸一化
在深度學(xué)習(xí)中,歸一化(Normalization)是一項(xiàng)常見的數(shù)據(jù)預(yù)處理步驟,它的目的是將輸入數(shù)據(jù)的范圍縮放到一個(gè)相對(duì)較小的范圍內(nèi),這有助于增加模型的穩(wěn)定性和準(zhǔn)確性。在歸一化后,數(shù)據(jù)的分布就會(huì)更加接近于標(biāo)準(zhǔn)分布,更符合模型的假設(shè),同時(shí)避免了一些特征過大或過小導(dǎo)致的問題。
常見的歸一化方法包括:
- 最小-最大歸一化:將數(shù)據(jù)縮放到給定的區(qū)間內(nèi),通常是[0,1]或[-1,1]。
- z-score歸一化:將數(shù)據(jù)縮放為均值為0,標(biāo)準(zhǔn)方差為1的正態(tài)分布。
最小-最大歸一化
最小-最大歸一化方法是將數(shù)據(jù)線性縮放到一個(gè)給定的范圍之內(nèi),通常是[0, 1]或[-1, 1]。具體來說,通過以下公式將數(shù)據(jù)縮放到指定區(qū)間:
x
′
=
x
?
x
m
i
n
x
m
a
x
?
x
m
i
n
x'=\frac{x-x_{min}}{x_{max}-x_{min}}
x′=xmax??xmin?x?xmin??
其中 x x x是原始數(shù)據(jù), x m i n x_{min} xmin?和分 x m a x x_{max} xmax?別是數(shù)據(jù)的最小值和最大值, x ′ x' x′是歸一化后的數(shù)據(jù)。
最小-最大歸一化的實(shí)現(xiàn)代碼如下:
def min_max_normalization(data):
"""最大-最小歸一化"""
return (data - np.min(data)) / (np.max(data) - np.min(data))
data = np.array([1, 2, 3, 4, 5])
print("原始數(shù)據(jù):", data)
print("最大-最小歸一化后:", min_max_normalization(data))
輸出結(jié)果為:
原始數(shù)據(jù): [1 2 3 4 5]
最大-最小歸一化后: [0. 0.25 0.5 0.75 1. ]
可以看到,在使用最大-最小歸一化后,數(shù)據(jù)被縮放到[0,1][0,1]的范圍內(nèi)。
z-score歸一化
z-score歸一化方法是將數(shù)據(jù)縮放為均值為0,標(biāo)準(zhǔn)差為1的分布,類似于一個(gè)標(biāo)準(zhǔn)正態(tài)分布。具體來說,通過以下公式將數(shù)據(jù)轉(zhuǎn)換為z-score:
x
′
=
x
?
μ
σ
x'=\frac{x-\mu}{\sigma}
x′=σx?μ?
其中
x
x
x是原始數(shù)據(jù),
μ
\mu
μ是數(shù)據(jù)的均值,
σ
σ
σ是數(shù)據(jù)的標(biāo)準(zhǔn)差,
x
’
x’
x’是歸一化后的數(shù)據(jù)。
我們使用一個(gè)隨機(jī)的數(shù)據(jù)集,預(yù)處理時(shí)使用z-score歸一化:
def z_score_normalization(data):
"""z-score歸一化"""
mean = np.mean(data)
std = np.std(data)
return (data - mean) / std
np.random.seed(1)
data = np.random.randn(5)
print("原始數(shù)據(jù):", data)
print("z-score歸一化后:", z_score_normalization(data))
輸出結(jié)果為:
原始數(shù)據(jù): [ 1.62434536 -0.61175641 -0.52817175 -1.07296862 0.86540763]
z-score歸一化后: [ 1.11627197 -0.3168376 -0.2550353 -0.88956586 0.34516678]
可以看到,在使用z-score歸一化后,原始數(shù)據(jù)被轉(zhuǎn)換為均值為0,標(biāo)準(zhǔn)差為1的分布。
小數(shù)定標(biāo)標(biāo)準(zhǔn)化
小數(shù)定標(biāo)標(biāo)準(zhǔn)化(Decimal Scaling)是一種簡(jiǎn)單的歸一化方法,它把值都放大或縮小成某個(gè)基數(shù)的整數(shù)次冪,通常取10的整數(shù)次冪。這種方法在計(jì)算機(jī)內(nèi)部實(shí)現(xiàn)比較容易,因?yàn)橹恍枰蜃蠡蛳蛴乙苿?dòng)小數(shù)點(diǎn)即可。
x
′
=
x
1
0
k
x'=\frac{x}{10^k}
x′=10kx?
其中
x
x
x是原始數(shù)據(jù),
k
k
k是要移動(dòng)的冪次。
我們使用一個(gè)含有較大值的數(shù)據(jù)集,預(yù)處理時(shí)使用小數(shù)定標(biāo)標(biāo)準(zhǔn)化:
import numpy as np
def decimal_scaling(data, k):
"""小數(shù)定標(biāo)標(biāo)準(zhǔn)化"""
return data / (10 ** k)
data = np.array([1000, 2000, 3000, 4000, 5000])
print("原始數(shù)據(jù):", data)
print("小數(shù)定標(biāo)標(biāo)準(zhǔn)化后:", decimal_scaling(data, 3))
輸出結(jié)果為:
原始數(shù)據(jù): [1000 2000 3000 4000 5000]
小數(shù)定標(biāo)標(biāo)準(zhǔn)化后: [1. 2. 3. 4. 5.]
可以看到,在使用小數(shù)定標(biāo)標(biāo)準(zhǔn)化后,原始數(shù)據(jù)矩陣中的每個(gè)值都被縮小了103103倍。
范圍縮放法
范圍縮放法(Scaling)是一種將原始數(shù)據(jù)縮放到特定區(qū)間的常用手段,常見的應(yīng)用是將數(shù)據(jù)縮放到一個(gè)為實(shí)現(xiàn)指定功能而設(shè)置的特定取值范圍內(nèi)。
x
′
=
x
?
x
m
i
n
a
x'=\frac{x-x_{min}}{a}
x′=ax?xmin??
其中x是原始數(shù)據(jù),
x
m
i
n
x_{min}
xmin?是數(shù)據(jù)的最小值,a是數(shù)據(jù)的范圍。
我們使用一個(gè)含有不同范圍的數(shù)據(jù)集,預(yù)處理時(shí)使用范圍縮放法:
def scaling(data, x_min, x_max, a):
"""范圍縮放法"""
return (data - x_min) / a
data = np.array([1, 2, 3, 4, 5])
print("原始數(shù)據(jù):", data)
print("范圍縮放法后:", scaling(data, np.min(data), np.max(data), 2))
輸出結(jié)果為:
原始數(shù)據(jù): [1 2 3 4 5]
范圍縮放法后: [0. 0.25 0.5 0.75 1. ]
可以看到,在使用范圍縮放法后,數(shù)據(jù)被縮放到[0,2][0,2]的范圍內(nèi)。
Sigmoid歸一化
我們使用一個(gè)隨機(jī)的數(shù)據(jù)集,預(yù)處理時(shí)使用Sigmoid歸一化:
def sigmoid_normalization(data):
"""Sigmoid歸一化"""
return 1 / (1 + np.exp(-data))
np.random.seed(1)
data = np.random.randn(5)
print("原始數(shù)據(jù):", data)
print("Sigmoid歸一化后:", sigmoid_normalization(data))
輸出結(jié)果為:
原始數(shù)據(jù): [ 1.62434536 -0.61175641 -0.52817175 -1.07296862 0.86540763]
Sigmoid歸一化后: [0.83540418 0.35010885 0.37144016 0.25415724 0.70419688]
可以看到,在使用Sigmoid歸一化后,原始數(shù)據(jù)矩陣中的每個(gè)值都被轉(zhuǎn)化到[0,1][0,1]的區(qū)間內(nèi)。
Tanh歸一化
我們使用一個(gè)隨機(jī)的數(shù)據(jù)集,預(yù)處理時(shí)使用Tanh歸一化:
def tanh_normalization(data):
"""Tanh歸一化"""
return np.tanh(data)
np.random.seed(1)
data = np.random.randn(5)
print("原始數(shù)據(jù):", data)
print("Tanh歸一化后:", tanh_normalization(data))
輸出結(jié)果為:
原始數(shù)據(jù): [ 1.62434536 -0.61175641 -0.52817175 -1.07296862 0.86540763]
Tanh歸一化后: [ 0.9255347 -0.54185332 -0.47922714 -0.79410112 0.69529199]
可以看到,在使用Tanh歸一化后,原始數(shù)據(jù)被轉(zhuǎn)換為[?1,1][?1,1]的區(qū)間內(nèi)。
小結(jié)
歸一化是深度學(xué)習(xí)中一個(gè)重要的預(yù)處理步驟,它可以將數(shù)據(jù)的范圍縮放到一個(gè)合適的區(qū)間內(nèi),提高模型的穩(wěn)定性和準(zhǔn)確性。本文介紹了幾種歸一化,并提供了實(shí)現(xiàn)代碼。在選擇歸一化的方法時(shí),需要根據(jù)具體的情況進(jìn)行選擇。
平衡數(shù)據(jù)集
在某些情況下,數(shù)據(jù)集可能存在類別不平衡的問題,即不同類別的樣本數(shù)量不同。這會(huì)導(dǎo)致模型對(duì)數(shù)量較少的類別的準(zhǔn)確性下降。
常用的平衡數(shù)據(jù)集方法包括:
- 過采樣:在數(shù)量較少的類別中增加樣本數(shù)。
- 欠采樣:減少數(shù)量較多的類別的樣本數(shù)。
- 合成數(shù)據(jù):合成與數(shù)據(jù)集相似的數(shù)據(jù)
- 加權(quán):給不同數(shù)據(jù)分配不同權(quán)重
在深度學(xué)習(xí)模型的訓(xùn)練過程中,數(shù)據(jù)集中不同類別的樣本數(shù)量不一致容易導(dǎo)致模型訓(xùn)練過程中出現(xiàn)偏差,使得模型預(yù)測(cè)結(jié)果不理想。為此,常常需要對(duì)數(shù)據(jù)集進(jìn)行平衡,使得不同類別的樣本數(shù)量相當(dāng),提高模型預(yù)測(cè)能力和魯棒性。主要的數(shù)據(jù)平衡方法包括:
欠采樣(undersampling)
欠采樣方法主要用于解決數(shù)據(jù)集中某些類別的樣本相對(duì)較多,而其他類別的樣本數(shù)量較少的情況。欠采樣的目標(biāo)是通過減少多數(shù)類別樣本數(shù)量,使得多數(shù)類別和少數(shù)類別具有相近的樣本數(shù)量。
Python示例:
from collections import Counter
from sklearn.datasets import make_classification
from imblearn.under_sampling import RandomUnderSampler
# 生成不均衡的二分類數(shù)據(jù)
X, y = make_classification(n_samples=10000, n_features=10, n_classes=2, weights=[0.9, 0.1])
# 查看樣本數(shù)量
print(Counter(y)) # 輸出: Counter({0: 8995, 1: 1005})
# 對(duì)數(shù)據(jù)進(jìn)行欠采樣
rus = RandomUnderSampler(random_state=42)
X_resampled, y_resampled = rus.fit_resample(X, y)
# 查看欠采樣后的樣本數(shù)量
print(Counter(y_resampled)) # 輸出: Counter({0: 1005, 1: 1005})
過采樣(oversampling)
過采樣方法主要用于解決數(shù)據(jù)集中某些類別的樣本相對(duì)較少,而其他類別的樣本數(shù)量較多的情況。過采樣的目標(biāo)是通過增加少數(shù)類別樣本數(shù)量,使得多數(shù)類別和少數(shù)類別具有相近的樣本數(shù)量。
Python示例:
from collections import Counter
from sklearn.datasets import make_classification
from imblearn.over_sampling import RandomOverSampler
# 生成不均衡的二分類數(shù)據(jù)
X, y = make_classification(n_samples=10000, n_features=10, n_classes=2, weights=[0.1, 0.9])
# 查看樣本數(shù)量
print(Counter(y)) # 輸出: Counter({1: 8998, 0: 1002})
# 對(duì)數(shù)據(jù)進(jìn)行過采樣
ros = RandomOverSampler(random_state=42)
X_resampled, y_resampled = ros.fit_resample(X, y)
# 查看過采樣后的樣本數(shù)量
print(Counter(y_resampled)) # 輸出: Counter({0: 8998, 1: 8998})
合成數(shù)據(jù)(data synthesis)
合成數(shù)據(jù)方法主要是通過對(duì)數(shù)據(jù)進(jìn)行人工合成,產(chǎn)生與原始數(shù)據(jù)集不同但具有相似特征和類別分布的新的合成數(shù)據(jù),常用的方法有SMOTE等。
Python示例:
from collections import Counter
from sklearn.datasets import make_classification
from imblearn.over_sampling import SMOTE
# 生成不均衡的二分類數(shù)據(jù)
X, y = make_classification(n_samples=10000, n_features=10, n_classes=2, weights=[0.1, 0.9])
# 查看樣本數(shù)量
print(Counter(y)) # 輸出: Counter({1: 9007, 0: 993})
# 對(duì)數(shù)據(jù)進(jìn)行SMOTE合成
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)
# 查看SMOTE合成后的樣本數(shù)量
print(Counter(y_resampled)) # 輸出: Counter({0: 9007, 1: 9007})
加權(quán)(weighted)
加權(quán)方法主要是通過對(duì)數(shù)據(jù)樣本的權(quán)重進(jìn)行調(diào)整,給予少數(shù)類別更高的權(quán)重,使得在訓(xùn)練模型的過程中,少數(shù)類別樣本更加受到重視,提高在少數(shù)類別上的分類能力。
Python示例:
from collections import Counter
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
# 生成不均衡的二分類數(shù)據(jù)
X, y = make_classification(n_samples=10000, n_features=10, n_classes=2, weights=[0.1, 0.9])
# 查看樣本數(shù)量
print(Counter(y)) # 輸出: Counter({1: 8977, 0: 1023})
# 對(duì)樣本進(jìn)行加權(quán)
sample_weight = [1 if i == 1 else 10 for i in y]
# 建立邏輯回歸模型
lr = LogisticRegression(class_weight='balanced', random_state=42, solver='lbfgs')
lr.fit(X, y, sample_weight=sample_weight)
# 輸出分類報(bào)告
y_pred = lr.predict(X)
print(classification_report(y, y_pred))
其中,sample_weight
參數(shù)表示對(duì)每個(gè)樣本賦予的權(quán)重,將類別為0的樣本權(quán)重設(shè)置為1,類別為1的樣本權(quán)重設(shè)置為10。class_weight
參數(shù)傳入balanced
表示自動(dòng)平衡類別權(quán)重,讓模型更關(guān)注少數(shù)類別的分類精度。文章來源:http://www.zghlxwxcb.cn/news/detail-428581.html
總結(jié)
本教程介紹了數(shù)據(jù)預(yù)處理的基礎(chǔ)技巧,包括數(shù)據(jù)清洗、歸一化和平衡數(shù)據(jù)集,并給出了一些處理的代碼演示。這些方法可以提高模型的準(zhǔn)確性和穩(wěn)定性,適用于各類深度學(xué)習(xí)任務(wù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-428581.html
到了這里,關(guān)于數(shù)據(jù)預(yù)處理簡(jiǎn)單介紹,并給出具體的代碼示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!