説明: これは機械学習の実践プロジェクトです (データ + コード + ドキュメント + ビデオ説明) データ + コード + ドキュメント + ビデオ説明が必要な場合は、記事の最後に直接アクセスして入手できます。
1.プロジェクトの背景
バットアルゴリズムは、2010年に楊教授が群知能に基づいて提案したヒューリスティック探索アルゴリズムであり、大域最適解を探索するのに有効な手法である。反復最適化に基づいて、アルゴリズムはランダムな解のセットに初期化され、その後、最適な解を反復的に検索し、最適な解の周りでランダムな飛行によって局所的な新しい解を生成して、局所的な探索速度を向上させます。このアルゴリズムは実装が簡単でパラメータが少ないという特徴があります。
収束速度が遅い、局所最適に陥りやすい、解の精度が低いなどの基本的なbatアルゴリズムの欠陥を考慮して、制約のない最適化問題を解決するために局所探索と組み合わせたハイブリッドbatアルゴリズムを提案します。このアルゴリズムは、カオス シーケンスを使用してコウモリの位置と速度を初期化し、グローバル検索の多様性の基礎を築きます。パウエル検索を統合してアルゴリズムの局所検索能力を強化し、収束速度を高速化します。突然変異戦略を使用して、アルゴリズムが局所最適に陥ることをある程度回避します。
このプロジェクトは、HBA ハイブリッド Bat インテリジェンス アルゴリズムを通じて Catboost 分類モデルを最適化します。
2.データの取得
今回のモデリングデータはインターネットから取得したもの(このプロジェクトの作成者が作成)、データ項目の統計は次のとおりです。
データ詳細は以下の通りです(一部表示)。
3.データの前処理
3.1 Pandasツールでデータを表示する
Pandas ツールの head() メソッドを使用して、データの最初の 5 行を表示します。
キーコード:
3.2データ欠落ビュー
データ情報を表示するには、Pandas ツールの info() メソッドを使用します。
上図からわかるように、変数は合計 9 つあり、データには欠損値がなく、合計 1000 個のデータがあります。
キーコード:
3.3データ記述統計
Pandas ツールの description() メソッドを使用して、データの平均、標準偏差、最小値、分位数、および最大値を表示します。
キーコードは次のとおりです。
4.探索的データ分析
4.1 y 変数のヒストグラム
Matplotlib ツールの Lot() メソッドを使用して、ヒストグラムを描画します。
4.2 y=1 サンプル x1 変数分布ヒストグラム
Matplotlib ツールの hist() メソッドを使用して、ヒストグラムを描画します。
4.3相関分析
上図からわかるように、値が大きいほど相関が強いことを示しており、正の値は正の相関、負の値は負の相関を示します。
5.特徴量エンジニアリング
5.1特徴データとラベルデータの確立
キーコードは次のとおりです。
5.2データセットの分割
train_test_split() メソッドを使用して、80% のトレーニング セットと 20% のテスト セットに従って分割します。キー コードは次のとおりです。
6. CATBOOST 分類モデルを最適化するための HBA ハイブリッド Bat 最適化アルゴリズムを構築します。
主に HBA ハイブリッド Bat 最適化アルゴリズムを使用して、オブジェクト分類の CATBOOST 分類アルゴリズムを最適化します。
6.1 最適なパラメータ値を見つけるための HBA ハイブリッド Bat 最適化アルゴリズム
最適なパラメータ:
6.2 最適パラメータ値構築モデル
7. モデルの評価
7.1 評価指標と結果
評価指標としては主に正答率、適合率、再現率、F1スコアなどが挙げられます。
上の表から、F1 スコアが 0.8925 であることがわかり、モデルがうまく機能していることがわかります。
キーコードは次のとおりです。
7.2 分類レポート
上の図からわかるように、分類 0 の F1 スコアは 0.91、分類 1 の F1 スコアは 0.89 です。
7.3 混同行列
上の図からわかるように、実際には 0 であるが 0 ではないと予測されるサンプルが 10 個あり、実際には 1 であるが 1 ではないと予測されるサンプルが 10 個あり、全体的な予測精度は良好です。
8.結論と展望
要約すると、この論文では、HBA ハイブリッド バット インテリジェント最適化アルゴリズムを使用して、Catboost アルゴリズムの最適なパラメーター値を見つけて分類モデルを構築し、最終的に提案したモデルが適切に機能することを証明します。このモデルは、日常の製品の予測に使用できます。
for t in range(N_gen):
print('***********************当前迭代次数为:', t + 1, '******************************')
# 对所有蝙蝠/位置进行循环
for i in range(N_pop):
Q[i] = np.random.uniform(Qmin, Qmax) # 生成随机数
v[i] = v[i] + (Sol[i] - best) * Q[i] # 速度
S[i] = Sol[i] + v[i] # 位置
# ******************************************************************************
# 本次机器学习项目实战所需的资料,项目资源如下:
# 项目说明:
# 链接:https://pan.baidu.com/s/1c6mQ_1YaDINFEttQymp2UQ
# 提取码:thgk
# ******************************************************************************
# y=1样本x1变量分布直方图
fig = plt.figure(figsize=(8, 5)) # 设置画布大小
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
data_tmp = df.loc[df['y'] == 1, 'x1'] # 过滤出y=1的样本
# 绘制直方图 bins:控制直方图中的区间个数 auto为自动填充个数 color:指定柱子的填充色
plt.hist(data_tmp, bins='auto', color='g')
プロジェクトの実践の詳細については、機械学習プロジェクトの実践コレクションのリストを参照してください。