Med den nye dag kommer ny styrke og nye tanker – Eleanor Roosevelt
Vi alle kan have stået over for dette problem med at identificere de relaterede funktioner fra et datasæt og fjerne de irrelevante eller mindre vigtige funktioner, der ikke bidrager meget til vores målvariabel, for at opnå en bedre nøjagtighed for vores model.
Feature Selection er et af de centrale koncepter inden for maskinlæring, som i høj grad påvirker din models ydeevne. De datafunktioner, som du bruger til at træne dine maskinlæringsmodeller, har en enorm indflydelse på den ydelse, du kan opnå.
Irrelevante eller delvist relevante funktioner kan påvirke modellens ydeevne negativt.
Funktionsselektion og datarengøring bør være det første og vigtigste trin i din modeludformning.
I dette indlæg vil du opdage teknikker til funktionsselektion, som du kan bruge i maskinlæring.
Feature Selection er den proces, hvor du automatisk eller manuelt vælger de funktioner, der bidrager mest til din forudsigelsesvariabel eller output, som du er interesseret i.
Har du irrelevante funktioner i dine data, kan det mindske modellernes nøjagtighed og få din model til at lære baseret på irrelevante funktioner.
Hvordan vælges funktioner, og hvad er fordelene ved at udføre funktionsvalg før modellering af dine data?
– Reducerer Overfitting: Mindre redundante data betyder mindre mulighed for at træffe beslutninger baseret på støj.
– Forbedrer præcisionen:
– Reducerer træningstiden: Færre datapunkter reducerer algoritmens kompleksitet, og algoritmer træner hurtigere.
Jeg vil gerne dele min personlige erfaring med dette.
Jeg forberedte en model ved at vælge alle funktioner, og jeg fik en nøjagtighed på omkring 65%, hvilket ikke er ret godt for en prædiktiv model, og efter at have foretaget nogle funktionsvalg og funktionsteknik uden at foretage nogen logiske ændringer i min modelkode sprang min nøjagtighed til 81%, hvilket er ret imponerende
Nu ved du, hvorfor jeg siger, at funktionsvalg bør være det første og vigtigste trin i dit modeldesign.
Feature Selection Metoder:
Jeg vil dele 3 Feature udvælgelsesteknikker, der er nemme at bruge og også giver gode resultater.
1. Univariate Selection
2. Feature Importance
3.Korrelationsmatrix med heatmap
Lad os se på disse teknikker en efter en med et eksempel
Du kan downloade datasættet her https://www.kaggle.com/iabhishekofficial/mobile-price-classification#train.csv
Beskrivelse af variabler i ovenstående fil
battery_power: Samlet energi, som et batteri kan lagre på én gang målt i mAh
blue: Har Bluetooth eller ej
clock_speed: Den hastighed, hvormed mikroprocessoren udfører instruktioner
dual_sim: Har dual sim-understøttelse eller ej
fc: Frontkamera megapixel
four_g: Har 4G eller ej
int_memory: Har 4G eller ej
int_memory: Intern hukommelse i gigabyte
m_dep: Mobilens dybde i cm
mobile_wt: Vægt af mobiltelefonen
n_cores: Antal kerner i processoren
pc: Primært kamera megapixel
px_height
Pixelopløsningshøjde
px_width: Pixelopløsningsbredde
ram: Random Access Memory i megabyte
sc_h: Random Access Memory i megabyte
sc_h: Skærmhøjde på mobil i cm
sc_w: Screen Width of mobile in cm
talk_time: Den længste tid, som en enkelt batteriopladning varer, når du er
three_g: Har 3G eller ej
touch_screen: Har touchscreen eller ej
wifi: Har wifi eller ej
price_range: Har wifi eller ej
prisklasse: Dette er målvariablen med en værdi på 0 (lav pris), 1 (middel pris), 2 (høj pris) og 3 (meget høj pris).
1. Univariate udvælgelse
Statistiske test kan bruges til at vælge de funktioner, der har den stærkeste sammenhæng med udgangsvariablen.
Scikit-learn-biblioteket indeholder klassen SelectKBest, der kan bruges sammen med en række forskellige statistiske test til at vælge et bestemt antal funktioner.
Eksemplet nedenfor bruger den statistiske chi²-test (chi²) for ikke-negative funktioner til at vælge 10 af de bedste funktioner fra datasættet til forudsigelse af prisintervaller for mobiltelefoner.
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
Funktionens betydning
Du kan få funktionens betydning for hver funktion i dit datasæt ved at bruge funktionens betydningsevne i modellen.
Feature importance giver dig en score for hver funktion i dine data, og jo højere scoren er, jo vigtigere eller mere relevant er funktionen for din udgangsvariabel.
Feature importance er en indbygget klasse, der leveres med Tree Based Classifiers, vi vil bruge Extra Tree Classifier til at udtrække de 10 bedste funktioner for datasættet.
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.Korrelationsmatrix med varmekort
Korrelation angiver, hvordan funktionerne er relateret til hinanden eller målvariablen.
Korrelationen kan være positiv (en stigning i en værdi af en funktion øger værdien af målvariablen) eller negativ (en stigning i en værdi af en funktion mindsker værdien af målvariablen)
Heatmap gør det nemt at identificere, hvilke funktioner der er mest relateret til målvariablen, vi vil plotte heatmap af korrelerede funktioner ved hjælp af seaborn-biblioteket.
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")