Python implementiert den ACO-Algorithmus zur Optimierung von Ameisenkolonien, um den Projektkampf mit dem Catboost-Regressionsmodell (CatBoostRegressor-Algorithmus) zu optimieren

Erläuterung: Dies ist ein praktisches Projekt für maschinelles Lernen (mit Daten + Code + Dokumentation + Videoerklärung). Wenn Sie Daten + Code + Dokumentation + Videoerklärung benötigen, können Sie diese direkt am Ende des Artikels abrufen.




1. Projekthintergrund

Ant Colony Optimization (ACO) ist ein neuer bionischer Evolutionsalgorithmus, der aus der natürlichen biologischen Welt abgeleitet ist und Anfang der 1990er Jahre von den italienischen Wissenschaftlern M. Dorigo, V. Maniezzo und A. Colorni übernommen wurde. Ein bevölkerungsbasierter heuristischer Zufallssuchalgorithmus, der das simuliert kollektives Wegfindungsverhalten von Ameisen in der Natur". Ameisen haben die Fähigkeit, ohne Aufforderung den kürzesten Weg vom Nest zur Nahrungsquelle zu finden, und können sich mit der Umgebung verändern, adaptiv nach neuen Wegen suchen und neue Entscheidungen treffen. Das Grundlegende Der Grund dafür ist, dass Ameisen auf der Suche nach Nahrung auf dem Weg, den sie gehen, ein spezielles Sekret abgeben können – Pheromone (auch Pheromone genannt). Die Wahl dieses Pfades ist proportional zur Intensität des Pheromons auf diesem Pfad zu diesem Zeitpunkt. Wenn immer mehr Ameisen einen Pfad passieren, wird auch das von ihm hinterlassene Pheromon immer höher, und die Wahrscheinlichkeit, dass Ameisen diesen Pfad wählen, ist immer höher erhöht die Intensität des Pheromons auf diesem Weg. Und das Pheromon mit hoher Intensität lockt mehr Ameisen an und bildet so einen positiven Rückkopplungsmechanismus. Durch diesen positiven Rückkopplungsmechanismus können Ameisen schließlich den kürzesten Weg finden.

Dieses Projekt verwendet den ACO-Ameisenkolonie-Optimierungsalgorithmus, um den optimalen Parameterwert zur Optimierung des Catboost-Regressionsmodells zu finden.

2. Datenerfassung

Die Modellierungsdaten für diesen Zeitraum stammen aus dem Internet (zusammengestellt vom Autor dieses Projekts), und die Statistiken der Datenelemente lauten wie folgt:

Die Datendetails lauten wie folgt (Teilanzeige):

 

3. Datenvorverarbeitung

3.1 Daten mit Pandas-Tools anzeigen

Verwenden Sie die head()-Methode des Pandas-Tools, um die ersten fünf Datenzeilen anzuzeigen:

Schlüsselcode:

 

3.2 Datenansicht fehlt

Verwenden Sie die info()-Methode des Pandas-Tools, um Dateninformationen anzuzeigen:

Wie aus der obigen Abbildung ersichtlich ist, gibt es insgesamt 11 Variablen und es fehlen keine Werte in den Daten, insgesamt gibt es 1000 Daten.

Schlüsselcode:

3.3 Daten deskriptive Statistik

Verwenden Sie die Methode discover() des Pandas-Tools, um den Mittelwert, die Standardabweichung, das Minimum, das Quantil und das Maximum der Daten anzuzeigen.

Der Schlüsselcode lautet wie folgt:

 

4. Explorative Datenanalyse

4.1 Histogramm von y-Variablen

Verwenden Sie die hist()-Methode des Matplotlib-Tools, um ein Histogramm zu zeichnen:

Wie aus der obigen Abbildung ersichtlich ist, konzentriert sich die y-Variable hauptsächlich zwischen -400 und 400.

4.2 Korrelationsanalyse

Wie aus der obigen Abbildung ersichtlich ist, ist die Korrelation umso stärker, je größer der Wert ist. Ein positiver Wert ist eine positive Korrelation und ein negativer Wert ist eine negative Korrelation.

5. Feature-Engineering

5.1 Erstellen Sie Funktionsdaten und Etikettendaten

Der Schlüsselcode lautet wie folgt:

5.2 Datensatzaufteilung

Verwenden Sie die Methode train_test_split (), um nach 80 % Trainingssatz und 20 % Testsatz zu dividieren. Der Schlüsselcode lautet wie folgt:

6. Erstellen Sie den ACO-Ameisenkolonie-Optimierungsalgorithmus, um das CATBOOST-Regressionsmodell zu optimieren

Verwenden Sie hauptsächlich den ACO-Ameisenkolonie-Optimierungsalgorithmus, um den CATBOOST-Regressionsalgorithmus für die Zielklassifizierung zu optimieren.

6.1 Optimale Parameter, die durch den ACO-Algorithmus zur Optimierung von Ameisenkolonien ermittelt wurden

Schlüsselcode:

Prozessdaten für jede Iteration:

 Optimale Parameter:

6.2 Optimales Parameterwert-Konstruktionsmodell

 

7. Modellbewertung

7.1 Bewertungsindikatoren und Ergebnisse

Zu den Bewertungsindikatoren gehören hauptsächlich der erklärbare Varianzwert, der mittlere absolute Fehler, der mittlere quadratische Fehler, der R-Quadrat-Wert usw.

Aus der obigen Tabelle ist ersichtlich, dass das R-Quadrat 0,9827 beträgt, was bedeutet, dass das Modell gut funktioniert.

Der Schlüsselcode lautet wie folgt:

 7.2 Vergleichstabelle von tatsächlichem Wert und vorhergesagtem Wert

Aus der obigen Abbildung ist ersichtlich, dass die Schwankungen des tatsächlichen Werts und des vorhergesagten Werts grundsätzlich gleich sind und der Modellanpassungseffekt gut ist.

8. Fazit und Ausblick

Zusammenfassend lässt sich sagen, dass dieser Artikel den ACO-Algorithmus zur Optimierung von Ameisenkolonien verwendet, um die optimalen Parameterwerte des CATBOOST-Regressionsalgorithmus zu finden und ein Regressionsmodell zu erstellen, das schließlich beweist, dass das von uns vorgeschlagene Modell gut funktioniert. Dieses Modell kann zur Prognose von Alltagsprodukten verwendet werden.

# ====定义惩罚项函数======
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  # 赋值

 Weitere Projektpraxis finden Sie in der Liste der Praxissammlungen für maschinelles Lernen:

Liste der tatsächlichen Kampfsammlungen maschineller Lernprojekte


 

Supongo que te gusta

Origin blog.csdn.net/weixin_42163563/article/details/130846407
Recomendado
Clasificación