Python中的主成分分析内在维度映射到要素名称?

时间:2017-06-27 15:26:33

标签: python machine-learning pca

目标:从数据库获取数据到pandas DataFrame,预处理,运行PCA,获取内在维度,在多元线性回归中使用主要特征。

1)我已连接到我的MS SQL数据库并从sql stmt获取所有数据到pandas数据帧。 ---> shape = 54K行X 90个特征(列名)

2)接下来,我已经预处理了数据。 3)接下来,我建立了管道来扩展,拟合,将数据转换为StandardScaler和PCA,包含20个组件。

现在在X轴上构建PCA特征的条形图和Y轴上的Explained Var后,我看到我可以使用内在尺寸7。 如何将7转换为功能/列名称? 7意味着占据我数据帧的前7列吗? 目的:接下来,我将在多元线性回归中使用这些列。

如果需要,这是我到目前为止所做的:

from sqlalchemy import create_engine
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import pyodbc


engine = create_engine('mssql+pyodbc://uid:pwd@servername/dbname?driver=SQL+Server+Native+Client+11.0')
con = engine.connect()

stmt = """Select Col1 ... Col90 from table where Col1 = alpha, ..."""

rs = con.execute(stmt)

df = pd.DataFrame(rs.fetchall())
df.columns = rs.keys()

df_number_columns = df.loc[:,'Age':]

scaler = StandardScaler()
model = PCA(n_components=20)

pipeline = make_pipeline(scaler, model)

df_number_columns = df_number_columns.convert_objects(convert_numeric=True)

column_names = np.array(rs.keys())
idx_2_start = np.where(column_names == 'Age')[0][0]

df_number_columns.columns = column_names[idx_2_start:]

pipeline.fit_transform(df_number_columns)

features = range(model.n_components_)
plt.bar(features, model.explained_variance_)
plt.xlabel('PCA Feature')
plt.ylabel('Variance')
plt.xticks(features)

plt.show()

0 个答案:

没有答案