Извините, если я неправильно понял ваш вопрос, но я все еще в замешательстве.Вы подгоняете свою модель к исходному X, находите наиболее важные функции, используя clf.feature_importances_
(который является одномерным массивом, следовательно, сообщения об ошибках), а затем пытаетесь уменьшить X только до этих функций?Если так:
clf.fit(X, y)
#map indices of columns to most important features - argsort loses order
important = clf.important_features_
important_dict = dict( zip( [i for i in range( len( important ))], important ))
#sort the dict in reverse order to get list of indices of the most important columns
top_5000_index = sorted( important_dict, key=important_dict.get, reverse=True )[0:5000]
#add the rows to a new X
reduced_X = []
reduced_y = []
for i in top_5000_index:
reduced_X.append( X[:,i] )
reduced_y.append( y[i] ) #if you need the labels for later
reduced_X = np.array( reduced_X )
reduced_y = np.array( reduced_y )
Тогда остается только один вопрос: почему 5000 функций?Может быть, вы должны установить порог важности и захватить функции выше этого порога.
Что касается X.tocsr()
, то, похоже, он не вписывался в вопрос, так как у меня сложилось впечатление из моего очень краткого прочтения, что он предназначен для уменьшения разреженных матриц.Снова извиняюсь, если я неправильно прочитал ваш вопрос.