Неверная форма ввода при применении fit_transform в LDA - PullRequest
1 голос
/ 26 марта 2019

Я применил метод get_dummies() к своему набору данных после того, как тот разделил набор данных для целей обучения и тестирования, когда я попытался применить метод LDA fit_transform(), который он выводит:

ValueError: неправильная форма ввода (26905, 8)

Что я делаю не так? Я не уверен, что проблема в методе get_dummies() или в чем-то еще, чего мне не хватает

# Sample Code


df = pd.read_csv('/Users/rushirajparmar/Downloads/Problem 16 (1)/Problem 16/Problem 16/train_file.csv')


df.drop(['UsageClass','CheckoutType','CheckoutYear','CheckoutMonth'],axis = 1,inplace = True)


Y=pd.get_dummies(df,columns = ['MaterialType'])
X=pd.get_dummies(df,columns = ['Title','Creator','Subjects','Publisher','PublicationYear'])


X.drop(['MaterialType'],axis = 1,inplace = True)


Y.drop(['ID','Checkouts','Title','Creator','Subjects','Publisher','PublicationYear'],axis = 1,inplace = True)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.15)


from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)


from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
lda = LDA(n_components = 1)
X_train = lda.fit_transform(X_train, y_train)
X_test = lda.transform(X_test)

Dataset:

Вот train_file.csv для справки

1 Ответ

1 голос
/ 26 марта 2019

Вам не нужно применять get_dummies к целевым переменным.Вы можете напрямую передать мультиклассовые метки на LDA.

Из документации:

fit_transform (X, y = Нет, ** fit_params)

Подгонка к данным, затем преобразование их.

Подгоняет преобразователь к X и y с необязательными параметрами fit_params и возвращает преобразованную версию X.

Параметры:
X: массив массива фигур [n_samples, n_features] Учебный набор.

y: numpy array of shape [n_samples] Целевые значения.

Возвращает: X_new: numpy массив формы [n_samples, n_features_new] Преобразованный массив.

Следовательно, ваш y долженбыть одномерным.

X_train, X_test, y_train, y_test = train_test_split(X, df['MaterialType'], test_size = 0.15)

lda = LDA(n_components = 1)
X_train = lda.fit_transform(X_train, y_train)
...