为什么我的PCA中的n-component只能是1(索引暗示1)

from sklearn.decomposition import PCApca = PCA(n_components=1, random_state=42).fit_transform(X_train)# 根据图表应该有43个组件,但它只允许1个。pca = pd.DataFrame(pca,columns=['pca'])#pca#X_train= pd.concat([X_train,pca],axis=1)

如果我将n_components更改为其他任何数字(例如,43),它会显示如下错误:

ValueError: Shape of passed values is (54708, 43), indices imply (54708, 1)

我在代码中使用以下内容来帮助我确定应该使用的组件数量,即43:

# 查找解释方差所需的组件数。# 代码来源:https://www.mikulskibartosz.name/pca-how-to-choose-the-number-of-components/from sklearn.decomposition import PCAfrom sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler()data_rescaled = scaler.fit_transform(X_train)pca = PCA().fit(data_rescaled)% matplotlib inlineimport matplotlib.pyplot as pltplt.rcParams["figure.figsize"] = (24,12)fig, ax = plt.subplots()xi = np.arange(1, 117, step=1)# 数字117是为了与y匹配,否则会出错。y = np.cumsum(pca.explained_variance_ratio_) # (explained_variance_ratio_)# 每个选定组件解释的方差百分比。# np.cumsum# 返回沿给定轴的元素的累积和。plt.ylim(0.0,1.1)plt.plot(xi, y, marker='o', linestyle='--', color='b')plt.xlabel('组件数量')plt.xticks(np.arange(0, 117, step=1)) # 从基于0的数组索引更改为基于1的人类可读标签plt.ylabel('累积方差(%)')plt.title('解释方差所需的组件数量')plt.axhline(y=0.95, color='r', linestyle='-')plt.text(0.5, 0.85, '95%截止阈值', color = 'red', fontsize=16)ax.grid(axis='x')plt.show()# 组件数量为43。

代码结果的图表:

enter image description here


回答:

试试这个:

pca = pd.DataFrame(pca,columns=[str(i) for i in range(pca.shape[1])])

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注