概述
建立模型分析特征数据时,很可能会面临特征数据维度过大的问题。例如,根据已有的信用卡持有人信息及其违约数据来建立信用卡违约预测模型时,数据可能包含申请人的收入、年龄、性别、婚姻状况、工作单位等数百个维度的特征。如果将所有特征数据都用来拟合模型,会提高模型的复杂度,造成过拟合风险显著增大,且不同的特征数据间可能存在共线性。此时就需要对数据进行降维,以浓缩特征向量。
代码实战
import numpy as np
# 也可以通过pandas库构造DataFrame数据,效果一样
X = np.array([[1, 1], [2, 2], [3, 3]])
from sklearn.decomposition import PCA
pca = PCA(n_components=1)
pca.fit(X)
X_transformed = pca.transform(X)
print(X_transformed)
#数据降维其实是通过线性组合完成的,通过如下代码可以获取线性组合系数。
print(pca.components_)
a = pca.components_[0][0]
b = pca.components_[0][1]
print(str(a) + ' * X + ' + str(b) + ' * Y')
import pandas as pd
X = pd.DataFrame([[45, 0.8, 9120], [40, 0.12, 2600], [38, 0.09,3042], [30, 0.04, 3300], [39, 0.21, 3500]], columns=['年龄(岁)', '负债比率', '月收入(元)'])
# 标准化
from sklearn.preprocessing import StandardScaler
X_new = StandardScaler().fit_transform(X)
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(X_new)
X_transformed = pca.transform(X_new)
print(pca.components_)
dim = ['年龄(岁)', '负债比率', '月收入(元)']
for i in pca.components_:
formula = []
for j in range(len(i)):
formula.append(str(i[j]) + ' * ' + dim[j])
print(" + ".join(formula))
分成了两个主成分