Я пытаюсь уменьшить количество столбцов набора данных - PullRequest
0 голосов
/ 24 июня 2019

Я пытался уменьшить количество столбцов вектора X с формой (20000,8000), но получил сокращение строк набора данных, сделав его новым набором данных X_5000, его форма (5000, 8000).Пожалуйста, дайте мне знать, где я делаю ошибку.ток у меня есть - X - вектор формы (20000,8000) Обязательно - X_5000 - вектор формы (5000, 8000) Я использую модель дерева решений и использовал feature_importance, чтобы уменьшить число нет.функций.

clf = DecisionTreeClassifier()

clf.fit(X, y)

class_prob_sorted = (-clf.feature_importances_).argsort()              

top_5000_index= class_prob_sorted[:5000]    


X_5000=X.tocsr()[top_5000_index]

На самом деле я получил - печать (X_5000.shape) - (5000, 8000)

Ожидается - печать (X_5000.shape) - (20000, 5000)

1 Ответ

0 голосов
/ 25 июня 2019

Извините, если я неправильно понял ваш вопрос, но я все еще в замешательстве.Вы подгоняете свою модель к исходному 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(), то, похоже, он не вписывался в вопрос, так как у меня сложилось впечатление из моего очень краткого прочтения, что он предназначен для уменьшения разреженных матриц.Снова извиняюсь, если я неправильно прочитал ваш вопрос.

...