【发布时间】:2019-12-20 14:25:33
【问题描述】:
我正在使用 Python,我有大约 100 万条记录和大约 50 列的数据集
其中一些列有不同的类型(例如 IssueCode 列可以有 7000 个不同的代码,另一列 SolutionCode 可以有 1000 个代码)
我正在尝试建立一个预测模型。
因此我必须使用 get_dummies 转换数据
但这导致了这个错误内存错误
文件 "C:\Users\am\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", 第 963 行,在 _get_dummies_1d dummy_mat = np.eye(number_of_cols, dtype=dtype).take(codes, axis=0)
内存错误
我尝试了另一种解决方案,即保留不使用 one-hot-encoding 的列
现在我在尝试构建模型时收到此错误
ValueError:无法将字符串转换为浮点数:'ABC'
我检查了这个解决方案
get_dummies python memory error
我将所有列都转换为 int8 但仍然是同样的错误
df = pd.concat([df.drop('IssueCode', 1), pd.get_dummies(df['IssueCode'],prefix = 'IssueCode_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('SolutionCode', 1), pd.get_dummies(df['SolutionCode'],prefix = 'SolutionCode_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('Col1', 1), pd.get_dummies(df['Col1'],prefix = 'Col1_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('Col2', 1), pd.get_dummies(df['Col2'],prefix = 'Col2_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('Col3', 1), pd.get_dummies(df['Col3'],prefix = 'Col3_').astype(np.int8)], axis=1)
由于内存错误,我无法获取_dummies,由于字符串浮动错误,我无法获取_dummies
如何解决这个问题
这是我的代码
from sklearn.model_selection import cross_val_predict
import pymssql
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
import datetime
import random
from sklearn.ensemble import RandomForestRegressor
pd.set_option('display.max_rows', 5000)
pd.set_option('display.max_columns', 5000)
pd.set_option('display.width', 10000)
TaskTime = 900
RunTime = 120
sFolder = "/mnt/c/temp/"
def Lead0(value):
return "0" + str(value) if value < 10 else str(value)
dNow = datetime.datetime.now()
sNow = Lead0(dNow.year) + Lead0(dNow.month) + Lead0(dNow.day) + Lead0(dNow.hour) + Lead0(dNow.minute) + Lead0(dNow.second)
print(sNow)
conn = pymssql.connect(server="MyServer", database="MyDB", port="1433", user="***", password="*****")
df = pd.read_sql("SELECT * FROM MyTable where MyDate between '1 jul 2018' and '30 jun 2019'", conn)
conn.close()
#df = pd.get_dummies(df)
#When I uncomment this I get Memory Error
mdl = RandomForestRegressor(n_estimators = 500)
y_pred = cross_val_predict(mdl, X, y, cv=5)
#This is causing error String to float
【问题讨论】:
标签: python scikit-learn one-hot-encoding