簡體   English   中英

為什么它會自動轉換為 numpy.ndarray?

[英]Why it did convert to numpy.ndarray automaticly?

我在我的數據庫中進行預測變量和 class 之間的划分,所以我意識到我必須先進行 LabelEncoder 轉換,然后是 OneHotEncoder,在第一個數據庫中我是這樣做的:

label_encoder_workclass = LabelEncoder()
label_encoder_education = LabelEncoder()
label_encoder_marital = LabelEncoder()
label_encoder_occupation = LabelEncoder()
label_encoder_relationship = LabelEncoder()
label_encoder_race = LabelEncoder()
label_encoder_sex = LabelEncoder()
label_encoder_country = LabelEncoder()

X_census[:,1] = label_encoder_workclass.fit_transform(X_census[:,1])
X_census[:,3] = label_encoder_education.fit_transform(X_census[:,3])
X_census[:,5] = label_encoder_marital.fit_transform(X_census[:,5])
X_census[:,6] = label_encoder_occupation.fit_transform(X_census[:,6])
X_census[:,7] = label_encoder_relationship.fit_transform(X_census[:,7])
X_census[:,8] = label_encoder_race.fit_transform(X_census[:,8])
X_census[:,9] = label_encoder_sex.fit_transform(X_census[:,9])
X_census[:,13] = label_encoder_country.fit_transform(X_census[:, 13])

onehotenconder_census = ColumnTransformer(transformers=[('OneHot', OneHotEncoder(), [1,3,5,6,7,8,9,13])], remainder='passthrough')

X_census = onehotenconder_census.fit_transform(X_census).toarray()

在這樣的第二個數據庫中:

label_encoder_personHomeOwnership = LabelEncoder()
label_encoder_loanIntent = LabelEncoder()
label_encoder_loanGrade = LabelEncoder()
label_encoder_cbPersonDefaultOnFile = LabelEncoder()

X_credit[:,2] = label_encoder_personHomeOwnership.fit_transform(X_credit[:,2])
X_credit[:,4] = label_encoder_loanIntent.fit_transform(X_credit[:,4])
X_credit[:,5] = label_encoder_loanGrade.fit_transform(X_credit[:,5])
X_credit[:,9] = label_encoder_personHomeOwnership.fit_transform(X_credit[:,9])

oneHotEncoder_credit = ColumnTransformer(transformers=[('OneHot', OneHotEncoder(), [2,4,5,9])], remainder='passthrough')

X_credit = oneHotEncoder_credit.fit_transform(X_credit)

讓我感興趣的是為什么在第一個中我必須使用toarray()方法將其轉換為 numpy.ndarray 類型的 object 而在第二個中我沒有,它會自動轉換。

請有人向我提出這個問題。 我做錯什么了嗎?

非常感謝您提前

ColumnTransformer 的幫助頁面

sparse_thresholdfloat,默認=0.3

如果不同 Transformer 的 output 包含稀疏矩陣,如果整體密度低於此值,這些將被堆疊為稀疏矩陣。 使用 sparse_threshold=0 始終返回密集。 當轉換后的 output 由所有密集數據組成時,堆疊結果將是密集的,該關鍵字將被忽略。

在您的情況下,第一個示例比第二個示例具有更多稀疏條目,因此它被轉換為稀疏矩陣。 .toarray()方法將其從稀疏轉換為密集。

如果 memory 不是問題,將其設置為sparse_threshold=0將確保您每次都獲得密集矩陣。

例如,如果我們有很多類別的列:

from sklearn.compose import ColumnTransformer
import numpy as np

np.random.seed(111)

X = np.random.randint(0,10,(100,10))
ct = ColumnTransformer(transformers=[('OneHot', OneHotEncoder(),
np.arange(10))], remainder='passthrough')

type(ct.fit_transform(X))
scipy.sparse.csr.csr_matrix

ct = ColumnTransformer(transformers=[('OneHot', OneHotEncoder(),
np.arange(10))], remainder='passthrough',sparse_threshold=0)

type(ct.fit_transform(X))
numpy.ndarray

與類別較少的列相比:

X = np.random.randint(0,2,(100,10))
ct = ColumnTransformer(transformers=[('OneHot', OneHotEncoder(),
np.arange(10))], remainder='passthrough')

type(ct.fit_transform(X))
numpy.ndarray

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM