2016-11-22 4 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. Вы также можете использовать int_ вместо float_. Это полностью зависит от типа данных, который вам нужен.

Если ваши метки string, вы можете использовать LabelEncoder для кодирования меток в целые числа.

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

Не приведет ли кодирование меток к целым? Метод выбора функции может понять, что класс 2 «меньше», чем класс 3, в то время как на самом деле этого отношения не существует. –

+0

Нет, это не должно создавать никаких проблем. Ярлыки - это просто ярлык, это не должно иметь значения для задачи классификации. Вы также можете получить сопоставление между вашими строковыми метками и преобразованной целочисленной меткой. –