我正在使用梯度增强进行分类问题。像往常一样,在分类之前,我想扩展我的特征矩阵(878049, 3208
)。
A = LabelEncoder().fit_transform(training_data['col1'].values.reshape(-1, 1).ravel())
B = LabelEncoder().fit_transform(training_data['col2'].values.reshape(-1, 1).ravel())
C = LabelEncoder().fit_transform(training_data['col3'].values.reshape(-1, 1).ravel())
然后:
A_1 = OneHotEncoder().fit_transform(A.reshape(-1, 1)).A
B_2 = OneHotEncoder().fit_transform(B.reshape(-1, 1)).A
C_3 = OneHotEncoder().fit_transform(C.reshape(-1, 1)).A
D_4 = CountVectorizer().fit_transform(training_data['Col_4'].values)
然后:
print(A_1.shape, B_2.shape, C_3.shape, D_4.shape)
>>> (878049, 10) (878049, 2249) (878049, 7) (878049, 942)
X = np.column_stack((A_1.A, B_2, C_3, D_4))
这是一切都冻结的时候:
scaler = StandardScaler()
X_new = scaler.partial_fit(X)
然而,虽然我尝试partial_fit()
功能,但我的整个计算机都冻结了。因此,在这种情况下我能做些什么?。
我还尝试在坚持阵列之前缩放每个功能。然而,我相信这实际上是错误的。有什么建议吗?。
更新 我还试图在缩放之前选择特征。但是,我认为这是错误的。
答案 0 :(得分:2)
partial_fit
的{{3}}解释了正在发生的事情。以下是相关部分:
partial_fit(X,y =无)
所有X都作为单个批次进行处理
所以你的任务是使用部分数据多次调用partial_fit (而不是像你一样用你的所有数据调用它一次)。
尝试这样的事情(未经测试的代码;只是为了给你一个想法):
scaler = StandardScaler()
n = X.shape[0] # number of rows
batch_size = 1000 # number of rows in each call to partial_fit
index = 0 # helper-var
while index < n:
partial_size = min(batch_size, n - index) # needed because last loop is possibly incomplete
partial_x = X[index:index+partial_size]
scaler.partial_fit(partial_x)
index += partial_size
partial_fit
返回None
(在您的代码中也使用错误)partial_fit
后,您可以使用scaler.transform
来获取重新调整后的数据:也许您需要在循环中使用