2016-11-22 10 views
1

私は次のエラーを取得せずにSklearn特徴抽出方法のいずれかを使用することができませんでした:Sklearnの特徴選択

「はTypeError:フレキシブルタイプで削減を実行することはできません」の例から作業

、特徴抽出メソッドは分類されていない問題に対してのみ機能するように見えます。私はもちろん、分類の問題をやろうとしています。これをどうすれば解決できますか?

例コード:

from sklearn.feature_selection import RFE 
from sklearn.linear_model import LinearRegression 
from sklearn.datasets import load_boston 
import random 

# Load data 
boston = load_boston() 
X = boston["data"] 
Y = boston["target"] 

# Make a classification problem 
classes = ['a', 'b', 'c'] 
Y = [random.choice(classes) for entry in Y] 

# Perform feature selection 
names = boston["feature_names"] 
lr = LinearRegression() 
rfe = RFE(lr, n_features_to_select=1) 
rfe.fit(X, Y) 

print "Features sorted by their rank:" 
print sorted(zip(map(lambda x: round(x, 4), rfe.ranking_), names)) 
+0

あなたのload_boston()メソッドはどこですか? –

+0

線形回帰による分類問題へのアプローチは正しい方法ではないかもしれません。 http://stats.stackexchange.com/questions/22381/why-not-approach-classification-through-regression – PabTorre

答えて

1

私は次のようにあなたの問題を解決すると思います。

X = np.array(X, dtype = 'float_') 
Y = np.array(X, dtype = 'float_') 

fitメソッドを呼び出す前に行います。 float_の代わりにint_を使用することもできます。これは、必要なデータタイプに完全に依存します。

ラベルがstringの場合は、LabelEncoderを使用して、ラベルを整数にエンコードできます。

from sklearn import preprocessing  
le = preprocessing.LabelEncoder() 
le = le.fit_transform(Y) 
model.fit(X, le) 
+0

ラベルを整数にエンコードしても問題はありませんか?特徴選択方法は、クラス2がクラス3よりも「少ない」ことを理解するかもしれないが、実際にはこの関係は存在しない。 –

+0

いいえ、問題はありません。ラベルは単なるラベルなので、分類作業には関係ありません。文字列ラベルと変換された整数ラベルの間のマッピングを取得することもできます。 –

関連する問題