説明: これは機械学習の実践プロジェクトです (データ + コード + ドキュメント + ビデオ説明) データ + コード + ドキュメント + ビデオ説明が必要な場合は、記事の最後に直接アクセスして入手できます。
1. プロジェクトの背景
アリコロニー最適化 (ACO) は、自然の生物界に由来する新しいバイオニック進化アルゴリズムであり、1990 年代初頭にイタリアの学者 M. ドリゴ、V. マニエッツォ、A. コローニによって採用されました。自然界におけるアリの集団的な経路探索行動」。アリは、何の指示もなしに巣から食料源までの最短経路を見つける能力を持っており、環境に応じて変化する可能性があり、適応的に新しい経路を探索し、新しい選択を生み出します。その理由は、アリが餌を探しているとき、アリが歩く道に特別な分泌物であるフェロモン(フェロモンとも呼ばれます)を放出することができ、時間が経つにつれてその物質が徐々に揮発し、その後のアリがこの道を選ぶかどうかは、そのときその道にあるフェロモンの強さに比例し、より多くのアリがその道を通過するほど、その道が残したフェロモンも増加し、ますますアリがこの道を選択する確率が高くなります。この経路上のフェロモンの強度が増加し、強度の高いフェロモンがより多くのアリを引き寄せるという正のフィードバック機構が形成され、この正のフィードバック機構を通じてアリは最終的に最短経路を見つけることができます。
このプロジェクトでは、ACO アリ コロニー最適化アルゴリズムを使用して、Catboost 回帰モデルを最適化するための最適なパラメーター値を見つけます。
2. データ取得
今回のモデリングデータはインターネットから取得したもの(このプロジェクトの作成者が作成)、データ項目の統計は次のとおりです。
データ詳細は以下の通りです(一部表示)。
3. データの前処理
3.1 Pandas ツールを使用してデータを表示する
Pandas ツールの head() メソッドを使用して、データの最初の 5 行を表示します。
キーコード:
3.2 データ欠落ビュー
データ情報を表示するには、Pandas ツールの info() メソッドを使用します。
上図からわかるように、変数は合計11個あり、データには欠損値がなく、合計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. ACO アリ コロニー最適化アルゴリズムを構築して、CATBOOST 回帰モデルを最適化します。
主に ACO アリ コロニー最適化アルゴリズムを使用して、ターゲット分類の CATBOOST 回帰アルゴリズムを最適化します。
6.1 ACO アリコロニー最適化アルゴリズムによって発見された最適パラメータ
キーコード:
各反復のプロセスデータ:
最適なパラメータ:
6.2 最適パラメータ値構築モデル
7. モデルの評価
7.1 評価指標と結果
評価指標には主に説明可能な分散値、平均絶対誤差、平均二乗誤差、R二乗値などが含まれます。
上の表から、R 二乗が 0.9827 であることがわかります。これは、モデルがうまく機能していることを意味します。
キーコードは次のとおりです。
7.2 実測値と予測値の比較表
上図から、実際の値と予測値の変動は基本的に同じであり、モデル フィッティング効果が良好であることがわかります。
8. 結論と展望
要約すると、この論文では、ACO アリ コロニー最適化アルゴリズムを使用して CATBOOST 回帰アルゴリズムの最適なパラメーター値を見つけて回帰モデルを構築し、最終的に提案したモデルがうまく機能することを証明しました。このモデルは、日常の製品の予測に使用できます。
# ====定义惩罚项函数======
def calc_e(X):
"""计算蚂蚁的惩罚项,X 的维度是 size * 2 """
ee = 0
"""计算第一个约束的惩罚项"""
e1 = X[0] + X[1] - 6
ee += max(0, e1)
"""计算第二个约束的惩罚项"""
e2 = 3 * X[0] - 2 * X[1] - 5
ee += max(0, e2)
return ee
# ******************************************************************************
# 本次机器学习项目实战所需的资料,项目资源如下:
# 项目说明:
# 链接:https://pan.baidu.com/s/1c6mQ_1YaDINFEttQymp2UQ
# 提取码:thgk
# ******************************************************************************
# ===定义子代和父辈之间的选择操作函数====
def update_best(parent, parent_fitness, parent_e, child, child_fitness, child_e, X_train, X_test, y_train, y_test):
"""
针对不同问题,合理选择惩罚项的阈值。本例中阈值为0.1
:param parent: 父辈个体
:param parent_fitness:父辈适应度值
:param parent_e :父辈惩罚项
:param child: 子代个体
:param child_fitness 子代适应度值
:param child_e :子代惩罚项
:return: 父辈 和子代中较优者、适应度、惩罚项
"""
if abs(parent[0]) > 0: # 判断取值
depth = int(abs(parent[0])) + 3 # 赋值
else:
depth = int(abs(parent[0])) + 5 # 赋值
if abs(parent[1]) > 0: # 判断取值
learning_rate = (int(abs(parent[1])) + 1) / 10 # 赋值
else:
learning_rate = (int(abs(parent[1])) + 1) / 10 # 赋值
プロジェクトの実践の詳細については、機械学習プロジェクトの実践コレクションのリストを参照してください。