-- coding: utf-8 --
“”"
@author: CDA教研组
申明:CDA版权所有
官网:http://edu.cda.cn
“”"
第一步:手动测试主成分数量
#1、导入数据 (CDA版权所有)
import pandas as pd
model_data = pd.read_csv(“profile_bank.csv”)
data = model_data.loc[ :,‘CNT_TBM’:‘CNT_CSC’]
data.head()
#- 2、查看相关系数矩阵,判定做变量降维的必要性(非必须)
corr_matrix = data.corr(method=‘pearson’)
#corr_matrix = corr_matrix.abs()
corr_matrix
#- 3、做主成分之前,进行中心标准化
from sklearn import preprocessing
data = preprocessing.scale(data)
#- 4、使用sklearn的主成分分析,用于判断保留主成分的数量
from sklearn.decomposition import PCA
‘’‘说明:1、第一次的n_comp…
说明:2、观察explained_variance_rat…
完整代码和更多课程详见http://edu.cdn.cn敏捷算法
‘’’
pca=PCA(n_components=3)
newData=pca.fit(data)
print(pca.explained_variance_)
print(pca.explained_variance_ratio_)
[1.60786876 1.00252275 0.7339482 ]
[0.40196317 0.25062818 0.18348521]
‘’‘通过主成分在每个变量上的权重的绝对值大小,确定每个主成分的代表性
‘’’
pd.DataFrame(pca.components_).T
第二步:根据主成分分析确定需要保留的主成分数量,进行因子分析
#- 1、导入包,并对输入的数据进行主成分提取。为保险起见,data需要进行中心标准化
from fa_kit import FactorAnalysis
from fa_kit import plotting as fa_plotting
fa = FactorAnalysis.load_data_samples(
data,
preproc_demean=True,
preproc_scale=True
)
fa.extract_components()
#- 2、设定提取主成分的方式。默认为“broken_stick”方法,建议使用“top_n”法
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
array([0, 1, 2], dtype=int64)
#- 3、通过最大方差法进行因子旋转
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
#- 说明:可以通过第三张图观看每个因子在每个变量上的权重,权重越高,代表性越强
#- 4、获取因子得分
pd.DataFrame(fa.comps[“rot”])
import numpy as np
fas = pd.DataFrame(fa.comps[“rot”])
data = pd.DataFrame(data)
score = pd.DataFrame(np.dot(data, fas))
第三步:根据因子得分进行数据分析
fa_scores=score.rename(columns={0: “ATM_POS”, 1: “TBM”, 2: “CSC”})
fa_scores.head()
第四步:使用因子得分进行k-means聚类
####4.1 k-means聚类的第一种方式:不进行变量分布的正态转换–用于寻找异常值
#- 1、查看变量的偏度
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
TBM 51.881233
CSC 6.093417
ATM_POS 2.097633
dtype: float64
#- 2、进行k-means聚类
from sklearn.cluster import KMeans
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
#MiniBatchKMeans()分批处理
#kmeans = cluster.KMeans(n_clusters=3, init=‘random’, n_init=1)
result=kmeans.fit(fa_scores)
#print(result)
#- 3、对分类结果进行解读
model_data_l=model_data.join(pd.DataFrame(result.labels_))
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
model_data_l.head()
import matplotlib
get_ipython().magic(‘matplotlib inline’)
model_data_l.clustor.value_counts().plot(kind = ‘pie’)
AxesSubplot:ylabel=‘clustor’
####4.2 k-means聚类的第二种方式:进行变量分布的正态转换–用于客户细分
#- 1、进行变量分布的正态转换
import numpy as np
from sklearn import preprocessing
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
fa_scores_trans.head()
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
skew
CSC 0.000540
TBM 0.000086
ATM_POS 0.000023
dtype: float64
#- 2、进行k-means聚类
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3) #MiniBatchKMeans()分批处理
#kmeans = cluster.KMeans(n_clusters=3, init=‘random’, n_init=1)
result=kmeans.fit(fa_scores_trans)
#print(result)
#- 3、对分类结果进行解读
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
import matplotlib
get_ipython().magic(‘matplotlib inline’)
model_data_l.clustor.value_counts().plot(kind = ‘pie’)
AxesSubplot:ylabel=‘clustor’
from sklearn import tree
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
#当前支持计算信息增益和GINI
clf.fit(model_data, result.labels_)
DecisionTreeClassifier(max_depth=3, min_samples_leaf=100, min_samples_split=100,
random_state=12345)