В этом руководстве по Python мы узнаем, как работает генетический алгоритм scikit Learn, а также рассмотрим различные примеры, связанные с генетическими алгоритмами.
Генетические алгоритмы полностью сосредоточены на естественном отборе и легко решают ограниченную и неограниченную эскалацию, или, можно сказать, проблему оптимизации.
В следующем коде мы импортируем GeneticSelectionCv, из которого сможем выбрать объект из набора данных:
- from __future__ import print_function используется для переноса функции печати из Python 3 в Python 2.6.
- x = num.hstack ((iris.data, e)) используется для укладки последовательности входного массива по столбцам.
- selectors = selectors.fit(x, Y) используется для подгонки данных в модель.
- print (selectors.support_) используется для печати выбранных данных.
from __future__ import print_function import numpy as num from sklearn import datasets, linear_model from genetic_selection import GeneticSelectionCV def main(): iris = datasets.load_iris() # Some noisy data not correlated e = num.random.uniform(0, 0.2, size=(len(iris.data), 30)) x = num.hstack((iris.data, e)) Y = iris.target estimators = linear_model.LogisticRegression(solver="liblinear", multi_class="ovr") selectors = GeneticSelectionCV(estimators, cv=6, verbose=2, scoring="accuracy", max_features=6, n_population=60, crossover_proba=0.6, mutation_proba=0.2, n_generations=50, crossover_independent_proba=0.6, mutation_independent_proba=0.06, tournament_size=4, n_gen_no_change=20, caching=True, n_jobs=-2) selectors = selectors.fit(x, Y) print(selectors.support_) if __name__ == "__main__": main()
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что выбранные функции печатаются на экране.
Изучение
- Scikit Learn Genetic opt определяется как наблюдаемый набор параметров, который оптимизирует показатели перекрестной проверки.
- Он использует эволюционные алгоритмы, которые выбирают функцию и разрабатывают различные модели классификации или регрессии.
В следующем коде мы импортируем различные библиотеки, из которых сможем найти задачу классификации с помощью генетических опций.
- GASearchCV используется для запуска процесса подгонки с использованием эволюционного алгоритма.
- data = load_digits() используется для загрузки данных.
- x = data.images.reshape ((nsample, -1)) используется для изменения формы изображений данных.
- cv = StratifiedKFold(n_splits=3, shuffle=True) используется в качестве стратегии перекрестной проверки и может быть просто int.
- evolution_estimator.fit(x_train, y_train) используется для обучения и оптимизации оценщиков.
import matplotlib.pyplot as plot from sklearn_genetic import GASearchCV from sklearn_genetic.space import Categorical, Integer, Continuous from sklearn.model_selection import train_test_split, StratifiedKFold from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_digits from sklearn.metrics import accuracy_score data = load_digits() nsample = len(data.images) x = data.images.reshape((nsample, -1)) y = data['target'] x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.33, random_state=42) _, axes = plot.subplots(nrows=1, ncols=4, figsize=(10, 3)) for axis, image, label in zip(axes, data.images, data.target): axis.set_axis_off() axis.imshow(image, cmap=plot.cm.gray_r, interpolation='nearest') axis.set_title('Training: %i' % label) param_grid = {'min_weight_fraction_leaf': Continuous(0.01, 0.5, distribution='log-uniform'), 'bootstrap': Categorical([True, False]), 'max_depth': Integer(2, 30), 'max_leaf_nodes': Integer(2, 35), 'n_estimators': Integer(100, 300)} classifier = RandomForestClassifier() cv = StratifiedKFold(n_splits=3, shuffle=True) # The main class from sklearn-genetic-opt evolved_estimator = GASearchCV(estimator=classifier, cv=cv, scoring='accuracy', param_grid=param_grid, n_jobs=-1, verbose=True) evolved_estimator.fit(x_train, y_train)
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что данные подбираются с помощью GASearchCV и печатаются на экране.
Выбор функций генетического алгоритма
- Выбор функций определяется как процесс, который уменьшает количество входных переменных, когда разработчик разрабатывает прогнозирующую модель.
- Генетический алгоритм — это процесс естественного отбора оптимального значения задач.
В следующем коде мы импортируем несколько библиотек, с помощью которых мы сможем выбирать функции с помощью функции генетического отбора.
- data = load_breast_cancer() используется для загрузки набора данных о раке молочной железы.
- dataframe = pds.DataFrame(data.data, columns=data.feature_names) используется для импорта набора данных.
- models = models.fit(x, y) используется для подгонки данных в модель.
- print (‘Выбор функции:’, x.columns[models.support_]) используется для печати выбранной функции на экране.
from sklearn.datasets import load_breast_cancer from genetic_selection import GeneticSelectionCV from sklearn.tree import DecisionTreeClassifier import pandas as pds import numpy as num data = load_breast_cancer() dataframe = pds.DataFrame(data.data, columns=data.feature_names) dataframe['target'] = data.target x = dataframe.drop(['target'], axis=1) y = dataframe['target'].astype(float) estimators = DecisionTreeClassifier() models = GeneticSelectionCV( estimators, cv=5, verbose=0, scoring="accuracy", max_features=5, n_population=100, crossover_proba=0.5, mutation_proba=0.2, n_generations=50, crossover_independent_proba=0.5, mutation_independent_proba=0.04, tournament_size=3, n_gen_no_change=10, caching=True, n_jobs=-1) models = models.fit(x, y) print('Feature Selection:', x.columns[models.support_])
После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что выбранная функция печатается на экране.
Алгоритм генетического отбора
В этом разделе мы узнаем о том, как scikit Learn алгоритм генетического отбора работает в Python.
Генетический отбор в scikit Learning определяется как процесс естественного отбора, направленный на поиск наилучшего значения функции.
В следующем коде мы импортируем GeneticSelectionCV из Genetic_selection, с помощью которого селектор выбирает лучшую функцию:
- from __future__ import print_function используется для переноса функции печати из Python 3 в Python 2.6.
- e = np.random.uniform (0, 0,1, size=(len(iris.data), 20)) используется для равномерной генерации случайных чисел.
- x = np.hstack ((iris.data, e)) используется для укладки последовательности столбцов входного массива.
- GeneticSelectionCV() используется для случайной генерации из выборочного пространства набора функций.
- selectors = selectors.fit(x, y) используется для подгонки модели.
- print (selectors.support_) используется для печати выбранных данных.
from __future__ import print_function import numpy as num from sklearn import datasets, linear_model from genetic_selection import GeneticSelectionCV def main(): iris = datasets.load_iris() e = np.random.uniform(0, 0.1, size=(len(iris.data), 20)) x = np.hstack((iris.data, e)) y = iris.target estimators = linear_model.LogisticRegression(solver="liblinear", multi_class="ovr") selectors = GeneticSelectionCV(estimators, cv=10, verbose=4, scoring="accuracy", max_features=8, n_population=70, crossover_proba=0.7, mutation_proba=0.4, n_generations=80, crossover_independent_proba=0.7, mutation_independent_proba=0.07, tournament_size=5, n_gen_no_change=20, caching=True, n_jobs=-4) selectors = selectors.fit(x, y) print(selectors.support_) if __name__ == "__main__": main()
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что выбранные данные печатаются на экране.
Преимущества и недостатки
Преимущества:
- Генетический алгоритм прост для понимания: человек легко может понять, что происходит в этом алгоритме.
- Генетический алгоритм очень хорош для шумной среды.
- Генетический алгоритм ищется по набору хромосом или популяции точек, а не по одной точке.
- Генетический алгоритм использует вероятностное правило перехода, а не детерминированное правило.
- Генетические алгоритмы можно легко распараллелить.
- Генетический алгоритм может легко или хорошо работать с непрерывными или дискретными задачами.
- Генетические алгоритмы поддерживают многоцелевую оптимизацию.
- Генетический алгоритм является вероятностным, зависящим от времени, нелинейным и нестационарным.
- Генетический алгоритм требует меньше информации.
- Генетический алгоритм с использованием хромосом.
Недостатки:
- Генетический алгоритм требует или нуждается в специальном определении.
- Генетический алгоритм требует меньше информации о задаче, но операторы пишут и получить представление сложно.
- Генетический алгоритм имеет вычислительную сложность.
- Генетический алгоритм требует очень много времени.