Примените сокращение PCA после выбора n компонентов - PullRequest
0 голосов
/ 09 июля 2020

У меня есть набор данных, и я хочу уменьшить размерность с помощью метода PCA.
Я импортирую набор данных, разделяю его на наборы для обучения и проверки и применяю PCA, чтобы увидеть, какова совокупная сумма дисперсии.

df = read_csv("train.csv")
X = df.drop(['label'], axis = 1)
y = df['label']
X_train, X_validation, y_train, y_validation = train_test_split(X, y, test_size = 0.2, random_state = 42)
model = PCA()
model.fit_transform(X_train_scaled)
variance = model.explained_variance_
cum_var = np.cumsum(variance)/np.sum(variance)

plt.figure(figsize = (15,15))
plt.bar(range(1,26), cum_var*100, alpha = 0.5, align = 'center', label = 'cummulative variance')
plt.legend()
plt.ylabel('Variance')
plt.xlabel('Principal components')

for x,y in zip(range(1,26),cum_var):
    label = "{:.2f}".format(y)
    plt.annotate(label, # this is the text
             (x,y), # this is the point to label
             textcoords = "offset points", # how to position the text
             xytext = (0,10), # distance from text to points (x,y)
             ha = 'center')
plt.show()

Я выбираю n_components = 16.
Как я могу подать заявку n_components = 16 в X_train и X_validation?

1 Ответ

0 голосов
/ 09 июля 2020

Как только вы узнаете необходимое количество компонентов, вы можете просто запустить PCA снова, установив n_components=16, и просто оставить новые уменьшенные функции в качестве X_train:

model = PCA(n_components=16)
model.fit(X_train)
X_train = model.transform(X_train)
X_validation = model.transform(X_validation)
...