В этом руководстве по 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()
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что выбранные данные печатаются на экране.

Преимущества и недостатки
Преимущества:
- Генетический алгоритм прост для понимания: человек легко может понять, что происходит в этом алгоритме.
- Генетический алгоритм очень хорош для шумной среды.
- Генетический алгоритм ищется по набору хромосом или популяции точек, а не по одной точке.
- Генетический алгоритм использует вероятностное правило перехода, а не детерминированное правило.
- Генетические алгоритмы можно легко распараллелить.
- Генетический алгоритм может легко или хорошо работать с непрерывными или дискретными задачами.
- Генетические алгоритмы поддерживают многоцелевую оптимизацию.
- Генетический алгоритм является вероятностным, зависящим от времени, нелинейным и нестационарным.
- Генетический алгоритм требует меньше информации.
- Генетический алгоритм с использованием хромосом.
Недостатки:
- Генетический алгоритм требует или нуждается в специальном определении.
- Генетический алгоритм требует меньше информации о задаче, но операторы пишут и получить представление сложно.
- Генетический алгоритм имеет вычислительную сложность.
- Генетический алгоритм требует очень много времени.