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

Top 10 nejlepších rysů pomocí třídy SelectKBest

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

10 nejdůležitějších rysů v datech

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

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.