S novým dnem přichází nová síla a nové myšlenky – Eleanor Rooseveltová
My. všichni možná setkali s tímto problémem identifikace souvisejících rysů ze souboru dat a odstranění irelevantních nebo méně důležitých rysů, které k naší cílové proměnné příliš nepřispívají, abychom dosáhli lepší přesnosti našeho modelu.
Výběr prvků je jedním ze základních konceptů strojového učení, který má obrovský vliv na výkonnost vašeho modelu. Funkce dat, které používáte k trénování svých modelů strojového učení, mají obrovský vliv na výkon, kterého můžete dosáhnout.
Nerelevantní nebo částečně relevantní funkce mohou negativně ovlivnit výkonnost modelu.
Výběr funkcí a čištění dat by měly být prvním a nejdůležitějším krokem návrhu vašeho modelu.
V tomto příspěvku objevíte techniky výběru funkcí, které můžete použít ve strojovém učení.
Výběr funkcí je proces, při kterém automaticky nebo ručně vybíráte ty funkce, které nejvíce přispívají k predikční proměnné nebo výstupu, který vás zajímá.
Mít v datech irelevantní funkce může snížit přesnost modelů a způsobit, že se váš model bude učit na základě irelevantních funkcí.
Jak vybrat funkce a jaké jsou výhody provedení výběru funkcí před modelováním dat?
– Snižuje nadměrné přizpůsobení:
– Zlepšuje přesnost:
– Zkracuje dobu trénování: Menší počet datových bodů snižuje složitost algoritmu a algoritmy se trénují rychleji.
Chci se s vámi podělit o své osobní zkušenosti.
Připravil jsem model výběrem všech rysů a dosáhl jsem přesnosti kolem 65 %, což není pro prediktivní model docela dobré, a po provedení výběru rysů a inženýrství rysů, aniž bych provedl nějaké logické změny v kódu modelu, moje přesnost vyskočila na 81 %, což je docela působivé
Teď už víte, proč říkám, že výběr rysů by měl být prvním a nejdůležitějším krokem návrhu vašeho modelu.
Metody výběru příznaků:
Podělím se s vámi o 3 techniky výběru příznaků, které se snadno používají a také dávají dobré výsledky.
1. Výběr příznaků. Jednorozměrný výběr
2. Významnost rysů
3.Korelační matice s tepelnou mapou
Podívejme se na tyto techniky postupně na příkladu
Soubor dat si můžete stáhnout odtud https://www.kaggle.com/iabhishekofficial/mobile-price-classification#train.csv
Popis proměnných ve výše uvedeném souboru
battery_power: Celková energie, kterou baterie dokáže uložit za jeden čas, měřená v mAh
modrá: Má nebo nemá Bluetooth
clock_speed: Rychlost, kterou mikroprocesor vykonává instrukce
dual_sim: Má nebo nemá podporu dual sim
fc: Přední fotoaparát: megapixely
čtyři_g: Má 4G, nebo ne
int_memory: Interní paměť v gigabajtech
m_dep: Hloubka mobilu v cm
mobile_wt: Hmotnost mobilního telefonu
n_cores: Počet jader procesoru
pc: Megapixely primárního fotoaparátu
px_height
Výška rozlišení pixelů
px_width: Šířka rozlišení pixelů
ram: Random Access Memory v megabajtech
sc_h: Výška obrazovky mobilu v cm
sc_w: Šířka obrazovky mobilu v cm
talk_time: nejdelší doba, po kterou vydrží jedno nabití baterie, když jste
three_g: Má nebo nemá 3G
dotykový_obraz: Má dotykový displej, nebo ne
wifi: Má wifi, nebo ne
cenový_rozsah: Jedná se o cílovou proměnnou s hodnotou 0(nízká cena), 1(střední cena), 2(vysoká cena) a 3(velmi vysoká cena).
1. Jednorozměrný výběr
Statistické testy lze použít k výběru těch rysů, které mají nejsilnější vztah s výstupní proměnnou.
Knihovna scikit-learn poskytuje třídu SelectKBest, kterou lze použít se sadou různých statistických testů k výběru určitého počtu rysů.
Následující příklad používá statistický test chí-kvadrát (chi²) pro nezáporné rysy k výběru 10 nejlepších rysů z datové sady Mobile Price Range Prediction.
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
Důležitost rysu
Důležitost rysu každého rysu datové sady můžete získat pomocí vlastnosti důležitost rysu modelu.
Důležitost rysu poskytuje skóre pro každý rys vašich dat, přičemž čím vyšší je skóre, tím důležitější nebo relevantnější je rys vůči vaší výstupní proměnné.
Důležitost funkce je vestavěná třída, která se dodává s klasifikátory založenými na stromu, my budeme používat extra stromový klasifikátor pro extrakci 10 nejlepších funkcí pro datovou sadu.
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. Korelační matice s tepelnou mapou
Korelace uvádí, jak spolu rysy souvisejí nebo jak souvisí cílová proměnná.
Korelace může být kladná (zvýšení jedné hodnoty rysu zvýší hodnotu cílové proměnné) nebo záporná (zvýšení jedné hodnoty rysu sníží hodnotu cílové proměnné)
Heatmapa umožňuje snadno určit, které rysy jsou nejvíce spojeny s cílovou proměnnou, pomocí knihovny seaborn vykreslíme heatmapu korelovaných rysů.
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")
.