[英]Converting numeric feature into categorical feature
我正在解決一個從歷史數據預測未來電子商店銷售的問題。 我正在使用的功能之一是商品價格(浮動)。 我通過實驗發現,將它添加到現有的特征列表會降低我的xgboost
模型的擬合和驗證准確性(增加預測 RMSE)。 我懷疑價格的影響可能是高度非線性的,記憶棒、筆記本電腦、手機等的價格會達到峰值。
無論如何,我有以下想法來解決這個問題:如果我將浮動項目價格轉換為分類變量,並能夠指定映射,例如值或十分位數的范圍,如何? 然后,我可以使用訓練目標值item price對該分類變量進行均值編碼。
這有意義嗎? 你能給我一個指向 Python“線性/十分位數直方圖”的指針,它返回一個浮點數列表,返回一個並行列表,每個浮點數屬於哪個 bin/decile?
恕我直言,您可以使用qcut
、 KBinsDiscretizer
或cut
。
一些例子,
>>> df = pd.DataFrame(np.random.randn(10), columns=['a'])
>>> df
a
0 0.060278
1 -0.618677
2 -0.472467
3 1.539958
4 -0.181974
5 1.563588
6 -1.693140
7 1.868881
8 1.072179
9 0.575978
對於qcut
,
>>> df['cluster'] = pd.qcut(df.a, 5, labels=range(1, 6))
>>> df
a cluster
0 0.060278 3
1 -0.618677 1
2 -0.472467 2
3 1.539958 4
4 -0.181974 2
5 1.563588 5
6 -1.693140 1
7 1.868881 5
8 1.072179 4
9 0.575978 3
對於KBinsDiscretizer
,
>>> (df['cluster'] =
KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='quantile')
.fit_transform(df.a.values.reshape(-1, 1)))
>>> df
a cluster
0 0.060278 1.0
1 -0.618677 0.0
2 -0.472467 0.0
3 1.539958 2.0
4 -0.181974 1.0
5 1.563588 2.0
6 -1.693140 0.0
7 1.868881 2.0
8 1.072179 2.0
9 0.575978 1.0
對於cut
,
>>> df['cluster'] = pd.cut(df.a, 5, labels=range(1, 6))
>>> df
a cluster
0 0.060278 3
1 -0.618677 2
2 -0.472467 2
3 1.539958 5
4 -0.181974 3
5 1.563588 5
6 -1.693140 1
7 1.868881 5
8 1.072179 4
9 0.575978 4
最后,看一下可能有用: pandas.qcut 和 pandas.cut 有什么區別?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.