With the new day comes new strength and new thoughts – Eleanor Roosevelt
We kunnen allemaal te maken hebben gehad met dit probleem: het identificeren van de gerelateerde kenmerken uit een reeks gegevens en het verwijderen van de irrelevante of minder belangrijke kenmerken die niet veel bijdragen aan onze doelvariabele, om zo een betere nauwkeurigheid van ons model te bereiken.
Feature Selection is een van de kernbegrippen bij machinaal leren, die van grote invloed is op de prestaties van uw model. De gegevenskenmerken die u gebruikt om uw machine learning-modellen te trainen, hebben een enorme invloed op de prestaties die u kunt bereiken.
Irrelevante of gedeeltelijk relevante kenmerken kunnen de prestaties van het model negatief beïnvloeden.
Feature-selectie en dataschoning moeten de eerste en belangrijkste stap van uw modelontwerp zijn.
In deze post ontdekt u kenmerkselectietechnieken die u kunt gebruiken in Machine Learning.
Feature Selection is het proces waarbij je automatisch of handmatig die features selecteert die het meest bijdragen aan je voorspellingsvariabele of output waarin je geïnteresseerd bent.
Het hebben van irrelevante features in je gegevens kan de nauwkeurigheid van de modellen verminderen en ervoor zorgen dat je model leert op basis van irrelevante features.
Hoe selecteer je features en wat zijn voordelen van het uitvoeren van feature selection voordat je je data modelleert?
– Vermindert Overfitting: Minder overbodige gegevens betekent minder kans om beslissingen te nemen op basis van ruis.
– Verbetert de nauwkeurigheid: Minder misleidende gegevens betekent dat de nauwkeurigheid van de modellering verbetert.
– Vermindert de trainingstijd: minder datapunten verminderen de complexiteit van algoritmen en algoritmen trainen sneller.
Ik wil hier mijn persoonlijke ervaring mee delen.
Ik heb een model gemaakt door alle features te selecteren en ik kreeg een nauwkeurigheid van ongeveer 65%, wat niet erg goed is voor een voorspellend model. Na het doen van wat feature selectie en feature engineering zonder logische veranderingen in mijn modelcode te doen, sprong mijn nauwkeurigheid naar 81%, wat behoorlijk indrukwekkend is
Nu weet je waarom ik zeg dat feature selectie de eerste en belangrijkste stap van je modelontwerp moet zijn.
Feature Selectie Methoden:
Ik zal 3 Feature selectie technieken delen die makkelijk te gebruiken zijn en ook goede resultaten geven.
1. Univariate Selection
2. Feature Importance
3.Correlatiematrix met Heatmap
Laten we deze technieken eens één voor één bekijken met een voorbeeld
U kunt de dataset hier downloaden https://www.kaggle.com/iabhishekofficial/mobile-price-classification#train.csv
Beschrijving van variabelen in bovenstaand bestand
battery_power: Totale energie die een batterij in één keer kan opslaan, gemeten in mAh
blue: Heeft Bluetooth of niet
clock_speed: de snelheid waarmee de microprocessor instructies uitvoert
dual_sim: Heeft dual sim ondersteuning of niet
fc: Front Camera megapixels
four_g: Heeft 4G of niet
int_memory: Intern geheugen in Gigabytes
m_dep: Diepte van de mobiele telefoon in cm
mobile_wt: Gewicht van de mobiele telefoon
n_cores: Aantal kernen van de processor
pc: Primaire camera megapixels
px_height
Pixel Resolutie Hoogte
px_width: Pixel Resolutie Breedte
ram: Random Access Memory in MegaBytes
sc_h: Schermhoogte van mobiel in cm
sc_w: Schermbreedte van mobiel in cm
talk_time: de langste tijd dat een enkele batterijlading meegaat als u
three_g: Heeft 3G of niet
touch_screen: Heeft touchscreen of niet
wifi: Heeft wifi of niet
prijs_bereik: Dit is de doelvariabele met een waarde van 0(lage kosten), 1(gemiddelde kosten), 2(hoge kosten) en 3(zeer hoge kosten).
1. Univariate Selection
Statistische tests kunnen worden gebruikt om die kenmerken te selecteren die de sterkste relatie met de outputvariabele hebben.
De scikit-learn-bibliotheek biedt de SelectKBest-klasse die kan worden gebruikt met een reeks verschillende statistische tests om een specifiek aantal kenmerken te selecteren.
Het onderstaande voorbeeld gebruikt de chi-kwadraat (chi²) statistische test voor niet-negatieve kenmerken om 10 van de beste kenmerken uit de Mobile Price Range Prediction Dataset te selecteren.
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
U kunt het belang van elke feature van uw dataset verkrijgen door de feature importance eigenschap van het model te gebruiken.
Het belang van een kenmerk geeft u een score voor elk kenmerk van uw gegevens, hoe hoger de score, hoe belangrijker of relevanter het kenmerk is voor uw outputvariabele.
Het belang van een kenmerk is een ingebouwde klasse die wordt geleverd met boom-gebaseerde classifiers, we zullen Extra Tree Classifier gebruiken voor het extraheren van de top 10 kenmerken voor de dataset.
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.Correlatiematrix met Heatmap
Correlatie geeft aan hoe de kenmerken aan elkaar of aan de doelvariabele zijn gerelateerd.
Correlatie kan positief zijn (toename van een waarde van een kenmerk verhoogt de waarde van de doelvariabele) of negatief (toename van een waarde van een kenmerk verlaagt de waarde van de doelvariabele)
Heatmap maakt het gemakkelijk om te identificeren welke kenmerken het meest gerelateerd zijn aan de doelvariabele, we zullen heatmap van gecorreleerde kenmerken plotten met behulp van de seaborn-bibliotheek.
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")