Bow*_*eng 4 python pandas lightgbm
我想用LightGBM预测tradeMoney的房子,但我得到的麻烦,当我指定categorical_feature的lgb.Dataset的LightGBM。
我得到data.dtypes如下:
type(train)
pandas.core.frame.DataFrame
train.dtypes
area float64
rentType object
houseFloor object
totalFloor int64
houseToward object
houseDecoration object
region object
plate object
buildYear int64
saleSecHouseNum int64
subwayStationNum int64
busStationNum int64
interSchoolNum int64
schoolNum int64
privateSchoolNum int64
hospitalNum int64
drugStoreNum int64
Run Code Online (Sandbox Code Playgroud)
我LightGBM用来训练它如下:
categorical_feats = ['rentType', 'houseFloor', 'houseToward', 'houseDecoration', 'region', 'plate']
folds = KFold(n_splits=5, shuffle=True, random_state=2333)
oof_lgb = np.zeros(len(train))
predictions_lgb = np.zeros(len(test))
feature_importance_df = pd.DataFrame()
for fold_, (trn_idx, val_idx) in enumerate(folds.split(train.values, target.values)):
print("fold {}".format(fold_))
trn_data = lgb.Dataset(train.iloc[trn_idx], label=target.iloc[trn_idx], categorical_feature=categorical_feats)
val_data = lgb.Dataset(train.iloc[val_idx], label=target.iloc[val_idx], categorical_feature=categorical_feats)
num_round = 10000
clf = lgb.train(params, trn_data, num_round, valid_sets = [trn_data, val_data], verbose_eval=500, early_stopping_rounds = 200)
oof_lgb[val_idx] = clf.predict(train.iloc[val_idx], num_iteration=clf.best_iteration)
predictions_lgb += clf.predict(test, num_iteration=clf.best_iteration) / folds.n_splits
print("CV Score: {:<8.5f}".format(r2_score(target, oof_lgb)))
Run Code Online (Sandbox Code Playgroud)
但即使我指定了categorical_features.
ValueError:数据的 DataFrame.dtypes 必须是 int、float 或 bool。没想到字段rentType、houseFloor、houseToward、houseDecoration、region、plate中的数据类型
以下是要求:
LightGBM 版本:2.2.3
Pandas 版本:0.24.2
Python 版本:3.6.8
|Anaconda, Inc.| (默认,2019 年 2 月 21 日,18:30:04)[MSC v.1916 64 位 (AMD64)]
请问有人可以帮我吗?
问题是 lightgbm 只能处理category类型的特征,而不是object. 这里提取了所有可能的分类特征的列表。这些特征在代码中被编码为整数。但是当objectslightgbm发现并非所有特征都已转换为数字时,s没有任何反应,因此会抱怨。
所以解决方案是做
for c in categorical_feats:
train[c] = train[c].astype('category')
Run Code Online (Sandbox Code Playgroud)
在你的简历循环之前
| 归档时间: |
|
| 查看次数: |
11275 次 |
| 最近记录: |