目标:从数据库获取数据到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()