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
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()
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")
.