С реализациями Python
Примечание. Оригинал статьи в оригинале представлен на сайте автора по адресу nidhikayadav.org.
Из последних нескольких статей вы, возможно, получили представление о том, что такое выбор функций. Короче говоря, он используется для повышения точности, уменьшения шума и в то же время уменьшения вычислительной сложности за счет сокращения ненужных функций из больших наборов данных. Кроме того, он также информирует о важности функции.
Выбор признаков можно рассматривать как задачу комбинаторной оптимизации, где нам даны n признаков, и для каждого признака необходимо принять решение: выбрать или пометить признак как важный, либо считать его избыточным, либо шумом.
В этой статье вы узнаете, как можно использовать генетические алгоритмы для выбора признаков. Вот ключевые моменты, а за ними следует рабочий код на Python.
- Цель состоит в том, чтобы создать популяцию кандидатов, которую можно будет оценить по ключевым характеристикам набора данных.
- В каждой итерации генетического алгоритма (ГА) создаются новые функции как часть концепций ГА, отбора, размножения и мутации. Однако мы используем пакет Python, а именно генетический алгоритм. Эта библиотека скрывает или инкапсулирует внутреннюю работу генетических алгоритмов, а также скрывает процесс генерации следующего кандидата.
- Эта библиотека Python минимизирует целевую функцию.
- Мы взяли целевую функцию как точность, генерируемую системой, когда GA выбирает подмножество признаков для участия в задаче классификации.
- Конечный результат кода представляет собой подмножество функций, которые можно использовать для будущего прогнозирования данных целевого класса.
- Код на питоне с пояснениями.
Реализация Python
Установить библиотеку
pip install geneticalgorithm
Импортируйте необходимые библиотеки
import pandas as pd import numpy as np import sklearn from sklearn import svm from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from geneticalgorithm import geneticalgorithm as ga
Прочтите набор данных
dataset = pd.read_csv('/content/colon_cancer.csv') numRows, numCols = np.shape(dataset)
Определите целевую функцию для оптимизации с помощью генетического алгоритма
def f(combinational_array): print('the new ga array is: ') print(combinational_array) arrayToTest = getIndx(combinational_array) print(arrayToTest) X=dataset.iloc[0:numRows, arrayToTest].values Y = dataset.iloc[0:numRows, numCols-1].values X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3) svmModel = svm.SVC() svmModel.fit(X_train, Y_train) X_Predict = svmModel.predict(X_test) predictedValue = accuracy_score(X_Predict, Y_test) print ("predictedValue: ") print(predictedValue) return -1 * predictedValue
Определение вспомогательной функции
def getIndx(arrayIndx): lenArr = len(arrayIndx) arrayOutput=np.zeros(lenArr) j=0 for i in range(lenArr): if arrayIndx[i] >= 0.5: arrayOutput[j] = i j=j+1 if j==0: return ([0]) arrayReturn=np.zeros(j) for i in range(j): arrayReturn[i] = arrayOutput[i] return arrayReturn
Определите параметры и вызовите генетический алгоритм, чтобы выполнить выбор признаков. Размерность данных о раке толстой кишки, использованных здесь, превышает 1500, поэтому давайте протестируем меньшую длину, скажем, 10 признаков. При расчете полных данных увеличьте количество функций, по крайней мере, до одной четверти количества столбцов для начала. 10 функций взяты в качестве примера, чтобы показать, как это работает.
length = 10 # length = int(numCols/4) print("length is : ", length) varbound=np.array([[0,1]]*length) model=ga(function=f,dimension=length,variable_type='int', variable_boundaries=varbound) model.run()
Пример вывода выглядит следующим образом:
Пример вывода с дополнительными функциями выглядит следующим образом:
Цель состоит в том, чтобы выбрать как количество функций, так и сами функции, используя встроенные реализации на основе GA.
Спасибо за чтение.