Python は PSO 粒子群最適化アルゴリズムを実装して、ランダム フォレスト回帰モデル (RandomForestRegressor アルゴリズム) プロジェクトの戦闘を最適化します。

説明: これは機械学習の実践プロジェクトです (データ + コード + ドキュメント + ビデオ説明) データ + コード + ドキュメント + ビデオ説明が必要な場合は、記事の最後に直接アクセスして入手できます。



 


1. プロジェクトの背景

PSOとは、Particle Swarm Optimization(粒子群最適化)の英語略称で、1995年にEberhartとKennedyによって提案された母集団ベースの確率的最適化手法です。粒子群アルゴリズムは、昆虫、動物の群れ、鳥、魚などの群れの行動を模倣します。これらのグループは協力して餌を探し、グループの各メンバーは自分の経験や他のメンバーの経験を学習することで常に変化します。その検索モード。

このプロジェクトでは、PSO 粒子群最適化ランダム フォレスト回帰アルゴリズムを使用して回帰モデルを構築します。

2. データ取得

今回のモデリングデータはインターネットから取得したもの(このプロジェクトの作成者が作成)、データ項目の統計は次のとおりです。

データ詳細は以下の通りです(一部表示)。

 

3. データの前処理

3.1 Pandas ツールを使用してデータを表示する

Pandas ツールの head() メソッドを使用して、データの最初の 5 行を表示します。

キーコード:

 

3.2 データ欠落ビュー

データ情報を表示するには、Pandas ツールの info() メソッドを使用します。

上図からわかるように、変数は合計 9 つあり、データには欠損値がなく、合計 1000 個のデータがあります。

キーコード:

 

3.3 データ記述統計

Pandas ツールの description() メソッドを使用して、データの平均、標準偏差、最小値、分位数、および最大値を表示します。

キーコードは次のとおりです。

 

4. 探索的データ分析

4.1 y 変数のヒストグラム

Matplotlib ツールの hist() メソッドを使用して、ヒストグラムを描画します。

上の図からわかるように、y 変数は主に -400 ~ 400 の間に集中しています。

4.2 相関分析

上図からわかるように、値が大きいほど相関が強いことを示しており、正の値は正の相関、負の値は負の相関を示します。

5. 特徴量エンジニアリング

5.1 特徴データとラベルデータの確立

キーコードは次のとおりです。

5.2 データセットの分割

train_test_split() メソッドを使用して、80% のトレーニング セットと 20% のテスト セットに従って分割します。キー コードは次のとおりです。

6. PSO 粒子群最適化ランダムフォレスト回帰モデルの構築

主に PSO 粒子群最適化アルゴリズムを使用して、ターゲット回帰のランダム フォレスト回帰アルゴリズムを最適化します。

6.1 最適なパラメータ値を見つけるための PSO 粒子群最適化アルゴリズム

最適なパラメータ:

6.2 最適パラメータ値構築モデル

 

7. モデルの評価

7.1 評価指標と結果

評価指標には主に説明可能な分散値、平均絶対誤差、平均二乗誤差、R二乗値などが含まれます。

上の表から、R 二乗が 0.8217 であることがわかります。これは、モデルがうまく機能していることを意味します。

キーコードは次のとおりです。

 7.2 実測値と予測値の比較表

上図から、実際の値と予測値の変動は基本的に同じであり、モデル フィッティング効果が良好であることがわかります。

8. 結論と展望

要約すると、この論文は、PSO 粒子群最適化アルゴリズムを使用して、ランダム フォレスト回帰アルゴリズムの最適なパラメーター値を見つけて回帰モデルを構築し、最終的に提案したモデルがうまく機能することを証明します。このモデルは、日常の製品の予測に使用できます。

# y变量分布直方图
fig = plt.figure(figsize=(8, 5))  # 设置画布大小
plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
data_tmp = df['y']  # 过滤出y变量的样本
# 绘制直方图  bins:控制直方图中的区间个数 auto为自动填充个数  color:指定柱子的填充色
plt.hist(data_tmp, bins='auto', color='g')
plt.xlabel('y')  # 设置x轴名称
plt.ylabel('数量')  # 设置y轴名称



# ******************************************************************************
 
# 本次机器学习项目实战所需的资料,项目资源如下:
 
# 项目说明:
 
# 链接:https://pan.baidu.com/s/1c6mQ_1YaDINFEttQymp2UQ
 
# 提取码:thgk
 
# ******************************************************************************



if abs(params[0]) > 0:  # 判断取值
        max_depth = int(abs(params[0]) / 100) + 2  # 赋值
else:
        max_depth = int(abs(params[0]) / 100) + 5  # 赋值

if abs(params[1]) > 0:  # 判断取值
        min_samples_leaf = int(abs(params[1])) + 1  # 赋值
else:
        min_samples_leaf = int(abs(params[1])) + 5  # 赋值

 プロジェクトの実践の詳細については、機械学習プロジェクトの実践コレクションのリストを参照してください。

機械学習プロジェクトの実戦集一覧


おすすめ

転載: blog.csdn.net/weixin_42163563/article/details/131630941