如何解决scikit-learn训练时出错:无法分配具有形状的数组
我有以下几列:Col1:字符串,Col2:浮动,Col3:浮动。在预测期间,我要预测Col3
的值:
import pickle
import numpy as np
from sklearn import model_selection
from sklearn import linear_model
from sklearn.preprocessing import OneHotEncoder
from sklearn import preprocessing
from sklearn.preprocessing import StandardScaler
x_columns_to_encode = ['Col1']
x_columns_to_scale = ['Col2']
y_columns_to_scale = ['Col3']
# Instantiate encoder/scaler
scaler = StandardScaler()
ohe = OneHotEncoder(sparse=False)
# Scale and Encode Separate Columns
x_scaled_columns = scaler.fit_transform(df1[x_columns_to_scale])
x_encoded_columns = ohe.fit_transform(df1[x_columns_to_encode])
y_scaled_columns = scaler.fit_transform(df1[y_columns_to_scale])
df = np.concatenate([x_scaled_columns,x_encoded_columns],axis=1)
validation_size = 0.50
seed = 7
x_train,x_validation,y_train,y_validation = model_selection.train_test_split(df,y_scaled_columns,test_size=validation_size,random_state=seed)
bestScore = 0.0
model = linear_model.LinearRegression()
score = model.fit(x_train,y_train).score(x_validation,y_validation)
print(score)
运行此代码时出现错误:
“无法分配形状为(2763330,25380)和数据类型为float64的数组”
有人可以帮助我了解我在哪里犯错吗?
解决方法
一种热编码会为分类列中的每个唯一类生成一个新列。如果您的分类列中的唯一类过多,则可能会耗尽内存。
这可能有助于向我们展示您的数据,因此我们可以提供更好的建议。
在此期间,您可以尝试以下选项:
- 为一个热编码矩阵使用稀疏表示。由于一个热编码矩阵具有许多为0的条目,因此可以节省大量空间。
- 使用标签编码。但是,请小心,因为标签编码假定类之间存在序数关系。如果类之间没有序数关系,最好使用基于树的模型,因为它们不使用数学方程式建立模型,因此在决策树进行拆分时序数关系不相关。 请参阅this以获得清晰的解释。
- 对某些类进行逻辑分组。例如,假设您的分类列具有“ tiger”,“ lion”和“ cheetah”类,则可以将它们在逻辑上归为一类,例如“ big_cats”。这将减少唯一类的数量,因此添加的新列的数量也将减少。
- 完全丢弃分类列。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。