С реализациями Python

Примечание. Оригинал статьи в оригинале представлен на сайте автора по адресу nidhikayadav.org.

Из последних нескольких статей вы, возможно, получили представление о том, что такое выбор функций. Короче говоря, он используется для повышения точности, уменьшения шума и в то же время уменьшения вычислительной сложности за счет сокращения ненужных функций из больших наборов данных. Кроме того, он также информирует о важности функции.

Выбор признаков можно рассматривать как задачу комбинаторной оптимизации, где нам даны n признаков, и для каждого признака необходимо принять решение: выбрать или пометить признак как важный, либо считать его избыточным, либо шумом.

В этой статье вы узнаете, как можно использовать генетические алгоритмы для выбора признаков. Вот ключевые моменты, а за ними следует рабочий код на Python.

  1. Цель состоит в том, чтобы создать популяцию кандидатов, которую можно будет оценить по ключевым характеристикам набора данных.
  2. В каждой итерации генетического алгоритма (ГА) создаются новые функции как часть концепций ГА, отбора, размножения и мутации. Однако мы используем пакет Python, а именно генетический алгоритм. Эта библиотека скрывает или инкапсулирует внутреннюю работу генетических алгоритмов, а также скрывает процесс генерации следующего кандидата.
  3. Эта библиотека Python минимизирует целевую функцию.
  4. Мы взяли целевую функцию как точность, генерируемую системой, когда GA выбирает подмножество признаков для участия в задаче классификации.
  5. Конечный результат кода представляет собой подмножество функций, которые можно использовать для будущего прогнозирования данных целевого класса.
  6. Код на питоне с пояснениями.

Реализация 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.

Спасибо за чтение.