决议树与PCA降维在电信客户流失预测中的应用
在数据分析和机器学习领域,电信客户流失预测是一个经典的案例。本文将通过Python代码实现,探讨决议树模子在电信客户流失预测中的应用,并结合PCA降维技术优化模子性能,同时对比降维前后的模子结果。
数据预备
我们从一个名为“电信客户流失数据.xlsx”的Excel文件中导入数据。这些数据包含了电信客户的各种特性以及他们是否流失的标签。通过pandas库的read_excel函数,我们可以方便地将数据加载到DataFrame中。然后,我们将数据集分为特性变量(data)和目的变量(target),其中特性变量是客户的各种属性,目的变量是客户是否流失。
- import pandas as pd
- # 导入数据
- datas = pd.read_excel("电信客户流失数据.xlsx")
- # 将变量与结果划分开
- data = datas.iloc[:, :-1] # 特征变量
- target = datas.iloc[:, -1] # 目标变量
复制代码 数据预处理惩罚
为了使数据得当模子练习,我们首先对特性变量举行标准化处理惩罚。使用StandardScaler对数据举行标准化,使每个特性的均值为0,标准差为1。这一步调对于很多机器学习算法来说都是须要的,由于它可以消除差别特性之间量纲和数值范围的差异,进步模子的性能和稳定性。
- from sklearn.preprocessing import StandardScaler
- # 数据标准化
- scaler = StandardScaler()
- data_scaled = scaler.fit_transform(data)
复制代码 模子练习与评估
我们选择决议树作为分类模子。决议树是一种简单而强盛的分类算法,它通过递归地划分特性空间来构建树结构,从而实现对数据的分类。我们设置了决议树的最大深度为4,以防止模子过于复杂而导致过拟合。使用train_test_split函数将数据集划分为练习集和测试集,其中测试集占20%。然后,我们使用练习集对决议树模子举行练习,并在练习集和测试集上分别举行预测,生成混淆矩阵和分类报告。
- from sklearn.model_selection import train_test_split
- from sklearn.tree import DecisionTreeClassifier
- from sklearn.metrics import classification_report, confusion_matrix
- import matplotlib.pyplot as plt
- # 划分数据集
- data_train, data_test, target_train, target_test = train_test_split(
- data_scaled, target, test_size=0.2, random_state=42)
- # 定义决策树
- dtr = DecisionTreeClassifier(criterion='gini', max_depth=4, random_state=42)
- dtr.fit(data_train, target_train)
- # 训练集混淆矩阵
- train_predicted = dtr.predict(data_train)
- print("训练集分类报告:")
- print(classification_report(target_train, train_predicted))
- # 测试集混淆矩阵
- test_predicted = dtr.predict(data_test)
- print("测试集分类报告:")
- print(classification_report(target_test, test_predicted))
复制代码 为了更直观地展示模子的分类结果,我们绘制了混淆矩阵的可视化图。混淆矩阵是一个表格,用于描述分类模子在测试集上的分类结果。通过混淆矩阵,我们可以清楚地看到模子对每个类别的预测情况,包括真正例、假正例、真负例和假负例的数量。
- # 绘制可视化混淆矩阵
- def cm_plot(y, yp):
- cm = confusion_matrix(y, yp)
- plt.matshow(cm, cmap=plt.cm.Blues)
- plt.colorbar()
- for x in range(len(cm)):
- for y in range(len(cm)):
- plt.annotate(cm[x, y], xy=(y, x), horizontalalignment='center',
- verticalalignment='center')
- plt.ylabel('True label')
- plt.xlabel('Predicted label')
- # 绘制训练集混淆矩阵
- cm_plot(target_train, train_predicted)
- plt.title("训练集混淆矩阵")
- plt.show()
- # 绘制测试集混淆矩阵
- cm_plot(target_test, test_predicted)
- plt.title("测试集混淆矩阵")
- plt.show()
复制代码
PCA降维
PCA(主成分分析)是一种常用的降维技术,它通过将原始数据投影到新的特性空间,保存数据的主要方差信息,从而减少数据的维度。在本例中,我们设置PCA保存95%的方差,这意味着降维后的数据将保存原始数据95%的信息。我们对练习集和测试集分别举行PCA降维,并使用降维后的数据重新练习决议树模子。
- from sklearn.decomposition import PCA
- # 应用 PCA 降维
- pca = PCA(n_components=0.95) # 保留95%的方差
- data_train_pca = pca.fit_transform(data_train)
- data_test_pca = pca.transform(data_test)
- # 定义决策树
- dtr_pca = DecisionTreeClassifier(criterion='gini', max_depth=4, random_state=42)
- dtr_pca.fit(data_train_pca, target_train)
- # 测试集混淆矩阵(降维后)
- test_predicted_pca = dtr_pca.predict(data_test_pca)
- print("降维后测试集分类报告:")
- print(classification_report(target_test, test_predicted_pca))
复制代码 模子性能对比
通过对比降维前后的模子性能,我们可以发现一些有趣的现象。在未降维的情况下,模子的正确率达到了一定的程度,但在降维后,模子的正确率可能会有所变化。这可能是由于PCA降维固然减少了数据的维度,但同时也可能丢失了一些对分类有帮助的信息。然而,如果降维后的模子性能仍旧可以担当,那么PCA降维就可以在一定程度上简化模子,进步模子的练习速率和服从。
- # 对决策树测试集进行评分
- accuracy_no_pca = dtr.score(data_test, target_test)
- print(f"未降维的准确率: {accuracy_no_pca:.4f}")
- # 降维后的准确率
- accuracy_with_pca = dtr_pca.score(data_test_pca, target_test)
- print(f"降维后的准确率: {accuracy_with_pca:.4f}")
- # 输出结果
- print(f"降维前后准确率对比:")
- print(f"未降维: {accuracy_no_pca:.4f}")
- print(f"降维后: {accuracy_with_pca:.4f}")
复制代码 可视化决议树
为了更好地明白决议树模子的结构,我们可以将决议树可视化。通过plot_tree函数,我们可以清晰地看到决议树的每个节点和分支,相识模子是怎样举行分类的。
- from sklearn.tree import plot_tree
- # 可视化决策树(未降维)
- plt.figure(figsize=(12, 8))
- plot_tree(dtr, filled=True, feature_names=data.columns, class_names=["未流失", "流失"])
- plt.title("未降维的决策树")
- plt.show()
- # 可视化决策树(降维后)
- plt.figure(figsize=(12, 8))
- plot_tree(dtr_pca, filled=True, class_names=["未流失", "流失"])
- plt.title("降维后的决策树")
- plt.show()
复制代码 运行结果
总结
通过本文的实验,我们可以看到决议树模子在电信客户流失预测中的应用结果,以及PCA降维对模子性能的影响。在实际应用中,我们可以根据详细的数据和需求,选择合适的模子和降维方法,以达到最佳的预测结果。同时,可视化工具如混淆矩阵的可视化图和决议树的可视化图,也可以帮助我们更好地明白和评估模子的性能。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |