【机器学习】01. python随机森林实现回归,相关性分析,特征重要性分析

背景:有个关于回归的任务,因保护客户数据资料,用鸢尾花数据集代替,完成随机森林算法实现部分功能。

完整代码在最后

1. 加载数据集

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import joblib

# 加载示例数据集
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

print(iris.DESCR)

此时会显示当前数据的部分相关描述

 :Summary Statistics:

    ============== ==== ==== ======= ===== ====================
                    Min  Max   Mean    SD   Class Correlation
    ============== ==== ==== ======= ===== ====================
    sepal length:   4.3  7.9   5.84   0.83    0.7826
    sepal width:    2.0  4.4   3.05   0.43   -0.4194
    petal length:   1.0  6.9   3.76   1.76    0.9490  (high!)
    petal width:    0.1  2.5   1.20   0.76    0.9565  (high!)
    ============== ==== ==== ======= ===== ====================

    :Missing Attribute Values: None
    :Class Distribution: 33.3% for each of 3 classes.
    :Creator: R.A. Fisher
    :Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
    :Date: July, 1988

2. 输出数据特征之间的相关性矩阵        

# 输出特征之间的相关性矩阵
correlation_matrix = np.corrcoef(X_train, rowvar=False)
# 使用热图可视化相关性矩阵
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', xticklabels=feature_names, yticklabels=feature_names)
plt.title('Correlation Matrix of Iris Features')
plt.show()

3. 训练模型并保存joblib文件

# 创建随机森林模型
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)

# 训练模型
rf_model.fit(X_train, y_train)

# 保存模型
joblib.dump(rf_model, 'random_forest_model.joblib')

4. 加载模型并预测输出均方误差和R方评估指标

# 加载模型
loaded_model = joblib.load('random_forest_model.joblib')

# 使用加载的模型进行预测
y_pred = loaded_model.predict(X_test)

# 评估模型性能
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
print(f'R-squared: {r2}')

Mean Squared Error: 0.0013833333333333336
R-squared: 0.9980206677265501

5. 特征重要性分析

# 输出特征的重要性
feature_importances = loaded_model.feature_importances_
print('Feature Importances:')
for i, importance in enumerate(feature_importances):
    print(f'Feature {i+1}: {importance}')

# 将特征重要性进行可视化
plt.figure(figsize=(10, 6))
sorted_idx = np.argsort(feature_importances)[::-1]  # 反向排序
plt.bar(list(range(len(feature_importances))), feature_importances[sorted_idx], align='center')
plt.xticks(list(range(len(feature_importances))),  np.array(feature_names)[sorted_idx], rotation=0)
plt.xlabel('Feature')
plt.ylabel('Importance Score')
plt.title('Feature Importance Scores')
plt.show()

Feature Importances:
Feature 1: 0.007247638926907056
Feature 2: 0.01241623468021743
Feature 3: 0.4956256973314748
Feature 4: 0.48471042906140077

6. 完整代码

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import joblib

# 加载示例数据集
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

# print(iris.DESCR)

# 创建随机森林模型
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)

# 训练模型
rf_model.fit(X_train, y_train)

# 保存模型
joblib.dump(rf_model, 'random_forest_model.joblib')

# 加载模型
loaded_model = joblib.load('random_forest_model.joblib')

# 使用加载的模型进行预测
y_pred = loaded_model.predict(X_test)

# 评估模型性能
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
print(f'R-squared: {r2}')


feature_names = iris.feature_names

# 输出特征之间的相关性矩阵
correlation_matrix = np.corrcoef(X_train, rowvar=False)
# 使用热图可视化相关性矩阵
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', xticklabels=feature_names, yticklabels=feature_names)
plt.title('Correlation Matrix of Iris Features')
plt.show()


# 输出特征的重要性
feature_importances = loaded_model.feature_importances_
print('Feature Importances:')
for i, importance in enumerate(feature_importances):
    print(f'Feature {i+1}: {importance}')

# 将特征重要性进行可视化
plt.figure(figsize=(10, 6))
sorted_idx = np.argsort(feature_importances)[::-1]  # 反向排序
plt.bar(list(range(len(feature_importances))), feature_importances[sorted_idx], align='center')
plt.xticks(list(range(len(feature_importances))),  np.array(feature_names)[sorted_idx], rotation=0)
plt.xlabel('Feature')
plt.ylabel('Importance Score')
plt.title('Feature Importance Scores')
plt.show()

后续还可以添加一些寻优逻辑,比如网格搜索,交叉验证等。

  • 21
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python机器学习编程与实战第8章《通信运营商客户流失分析与预测》介绍了如何使用Python进行通信运营商客户流失的分析和预测。 该章节主要分为以下几个部分: 1. 数据预处理:通过对客户数据进行清洗和处理,包括处理缺失值、异常值和重复值等,使数据能够被正确地应用于机器学习模型。 2. 特征工程:根据业务需求和问题目标,构建合适的特征集。通过使用Python特征选择技术和特征工程方法,选择和构建与客户流失相关的特征。 3. 数据可视化和探索性分析:使用Python的数据分析和可视化工具,如matplotlib和seaborn等,对客户数据进行可视化和探索性分析。可以通过可视化手段来发现数据的分布情况、相关性等,为后续建模做准备。 4. 模型建立与评估:使用Python机器学习算法对客户数据进行建模和预测。常用的模型包括逻辑回归、决策树、随机森林等。通过交叉验证等技术对模型进行评估和选择,找出预测准确率较高的模型。 5. 模型调优和部署:对选定的机器学习模型进行参数调优和特征选择,以提高模型的预测性能。最后,将优化后的模型进行部署,以便在实际业务环境中进行客户流失的预测和应用。 该章节的案例实战主要围绕通信运营商的客户流失问题展开,通过对数据的分析和建模,帮助运营商提前预测和识别可能流失的客户,从而采取相应措施进行客户保持和挽留,提高运营商的业务效益。 通过本章的学习,读者可以了解到如何使用Python进行客户流失分析和预测,同时对数据处理、特征工程、模型建立和评估等关键环节有一定的了解和实践经验。这对于从事数据分析和挖掘工作的人员和相关从业者具有重要的参考价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值