With the new day comes new strength and new thoughts – Eleanor Roosevelt

We Wszyscy mogliśmy stanąć przed problemem identyfikacji powiązanych cech ze zbioru danych i usunięcia nieistotnych lub mniej ważnych cech, które nie wnoszą wiele do naszej zmiennej docelowej w celu osiągnięcia lepszej dokładności naszego modelu.

Wybór cech jest jedną z podstawowych koncepcji w uczeniu maszynowym, która ma ogromny wpływ na wydajność modelu. Cechy danych, których używasz do szkolenia modeli uczenia maszynowego mają ogromny wpływ na wydajność, którą możesz osiągnąć.

Nieistotne lub częściowo istotne cechy mogą negatywnie wpłynąć na wydajność modelu.

Wybór cech i czyszczenie danych powinny być pierwszym i najważniejszym krokiem projektowania modelu.

W tym poście odkryjesz techniki wyboru cech, które możesz wykorzystać w uczeniu maszynowym.

Wybór cech jest procesem, w którym automatycznie lub ręcznie wybierasz te cechy, które najbardziej przyczyniają się do przewidywanej zmiennej lub danych wyjściowych, którymi jesteś zainteresowany.

Posiadanie nieistotnych cech w twoich danych może zmniejszyć dokładność modeli i sprawić, że twój model będzie się uczył na podstawie nieistotnych cech.

Jak wybrać cechy i jakie są korzyści z przeprowadzenia selekcji cech przed modelowaniem twoich danych?

– Redukuje przepełnienie: Mniej nadmiarowych danych oznacza mniej okazji do podejmowania decyzji na podstawie szumu.

– Poprawia dokładność: Mniej mylących danych oznacza poprawę dokładności modelowania.

– Redukuje czas szkolenia: mniejsza liczba punktów danych zmniejsza złożoność algorytmu, a algorytmy trenują szybciej.

Chcę podzielić się moim osobistym doświadczeniem w tym zakresie.

Przygotowałem model wybierając wszystkie cechy i uzyskałem dokładność około 65%, co nie jest całkiem dobre dla modelu predykcyjnego, a po dokonaniu selekcji cech i inżynierii cech bez dokonywania żadnych logicznych zmian w kodzie mojego modelu moja dokładność skoczyła do 81%, co jest całkiem imponujące

Teraz wiesz, dlaczego mówię, że selekcja cech powinna być pierwszym i najważniejszym krokiem projektowania modelu.

Metody selekcji cech:

Podzielę się 3 technikami selekcji cech, które są łatwe w użyciu i dają dobre wyniki.

1. Univariate Selection

2. Feature Importance

3.Correlation Matrix with Heatmap

Przyjrzyjrzyjmy się tym technikom po kolei na przykładzie

Możesz pobrać zbiór danych stąd https://www.kaggle.com/iabhishekofficial/mobile-price-classification#train.csv

Opis zmiennych w powyższym pliku

battery_power: Całkowita energia, którą bateria może przechowywać w jednym czasie mierzona w mAh

blue: Posiada Bluetooth lub nie

clock_speed: prędkość, z jaką mikroprocesor wykonuje instrukcje

dual_sim: Posiada wsparcie dual sim lub nie

fc: Megapiksele przedniej kamery

four_g: Ma 4G lub nie

int_memory: Pamięć wewnętrzna w gigabajtach

m_dep: Głębokość telefonu komórkowego w cm

mobile_wt: Waga telefonu komórkowego

n_cores: Liczba rdzeni procesora

pc: Megapiksele kamery podstawowej

px_height

Wysokość rozdzielczości pikseli

px_width: Szerokość rozdzielczości pikseli

ram: Random Access Memory w MegaBajtach

sc_h: Wysokość ekranu telefonu komórkowego w cm

sc_w: Szerokość ekranu telefonu komórkowego w cm

talk_time: najdłuższy czas, jaki wytrzyma pojedyncze ładowanie baterii, gdy jesteś

three_g: Ma 3G lub nie

touch_screen: Ma ekran dotykowy lub nie

wifi: Ma wifi lub nie

price_range: Jest to zmienna docelowa o wartości 0(niski koszt), 1(średni koszt), 2(wysoki koszt) i 3(bardzo wysoki koszt).

1. Univariate Selection

Testy statystyczne mogą być użyte do wybrania tych cech, które mają najsilniejszy związek ze zmienną wyjściową.

Biblioteka scikit-learn dostarcza klasę SelectKBest, która może być użyta z zestawem różnych testów statystycznych do wybrania określonej liczby cech.

Przykład poniżej wykorzystuje test statystyczny chiquared (chi²) dla cech nieujemnych do wybrania 10 najlepszych cech z Mobile Price Range Prediction Dataset.

import pandas as pd
import numpy as np
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2data = pd.read_csv("D://Blogs//train.csv")
X = data.iloc #independent columns
y = data.iloc #target column i.e price range#apply SelectKBest class to extract top 10 best features
bestfeatures = SelectKBest(score_func=chi2, k=10)
fit = bestfeatures.fit(X,y)
dfscores = pd.DataFrame(fit.scores_)
dfcolumns = pd.DataFrame(X.columns)
#concat two dataframes for better visualization
featureScores = pd.concat(,axis=1)
featureScores.columns = #naming the dataframe columns
print(featureScores.nlargest(10,'Score')) #print 10 best features

Top 10 Best Features using SelectKBest class

Feature Importance

Możesz uzyskać ważność każdej cechy w zbiorze danych, używając właściwości feature importance modelu.

Ważność cechy daje ci wynik dla każdej cechy twoich danych, im wyższy wynik tym ważniejsza lub bardziej istotna jest cecha w stosunku do twojej zmiennej wyjściowej.

Ważność cechy jest wbudowaną klasą, która jest dostarczana z klasyfikatorami opartymi na drzewach, będziemy używać klasyfikatora Extra Tree do wyodrębnienia 10 najlepszych cech dla zbioru danych.

import pandas as pd
import numpy as np
data = pd.read_csv("D://Blogs//train.csv")
X = data.iloc #independent columns
y = data.iloc #target column i.e price range
from sklearn.ensemble import ExtraTreesClassifier
import matplotlib.pyplot as plt
model = ExtraTreesClassifier()
model.fit(X,y)
print(model.feature_importances_) #use inbuilt class feature_importances of tree based classifiers
#plot graph of feature importances for better visualization
feat_importances = pd.Series(model.feature_importances_, index=X.columns)
feat_importances.nlargest(10).plot(kind='barh')
plt.show()

top 10 najważniejszych cech w danych

3.Macierz korelacji z mapą cieplną

Korelacja określa jak cechy są powiązane ze sobą lub zmienną docelową.

Korelacja może być dodatnia (wzrost jednej wartości cechy zwiększa wartość zmiennej docelowej) lub ujemna (wzrost jednej wartości cechy zmniejsza wartość zmiennej docelowej)

Heatmapa ułatwia określenie, które cechy są najbardziej powiązane ze zmienną docelową, wykreślimy heatmapę skorelowanych cech używając biblioteki seaborn.

import pandas as pd
import numpy as np
import seaborn as snsdata = pd.read_csv("D://Blogs//train.csv")
X = data.iloc #independent columns
y = data.iloc #target column i.e price range
#get correlations of each features in dataset
corrmat = data.corr()
top_corr_features = corrmat.index
plt.figure(figsize=(20,20))
#plot heat map
g=sns.heatmap(data.corr(),annot=True,cmap="RdYlGn")

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.