Avage Scikit-learni eeltöötluse jõud andmete teisendamise torujuhtmete abil. Õppige looma töökindlaid ja tõhusaid masinõppe töövooge optimaalse mudeli jõudluse saavutamiseks.
Scikit-learni eeltöötlus: andmete teisendamise torujuhtmete meistriteos masinõppes
Masinõppe valdkonnas mõjutab teie andmete kvaliteet otseselt teie mudelite jõudlust. Toorandmed sisaldavad sageli vastuolusid, puuduvate väärtusi ja erinevaid skaalasid, mistõttu need ei sobi otseseks kasutamiseks. Scikit-learn, võimas Pythoni teek, pakub põhjalikku eeltöötlustehnikate komplekti, et teisendada teie andmed masinõppe algoritmidele sobivasse vormi. See artikkel sukeldub Scikit-learni eeltöötluse maailma, keskendudes andmete teisendamise torujuhtmete loomisele ja kasutamisele teie masinõppe töövoogude sujuvamaks muutmiseks.
Miks andmete eeltöötlus on kriitilise tähtsusega
Andmete eeltöötlus on toorandmete puhastamise, teisendamise ja korraldamise protsess, et muuta need masinõppemudelite jaoks sobivamaks. See on ülioluline samm, kuna masinõppe algoritmid on tundlikud sisendtunnuste skaala ja jaotuse suhtes. Ilma nõuetekohase eeltöötluseta võivad mudelid halvasti toimida, mis viib ebatäpsete ennustuste ja ebausaldusväärsete tulemusteni. Siin on mõned peamised põhjused, miks andmete eeltöötlus on hädavajalik:
- Parandatud mudeli jõudlus: Eeltöödeldud andmed võimaldavad mudelitel tõhusamalt õppida ja saavutada kõrgemat täpsust.
- Käsitleb puuduvaid väärtusi: Imputatsioonitehnikad täidavad puuduvad andmepunktid, takistades algoritmide kokkujooksmist või kallutatud tulemuste saamist.
- Standardiseerib tunnusmõõtkavasid: Skaleerimismeetodid tagavad, et kõik tunnusmõõtkavad annavad mudelisse võrdselt panuse, takistades suuremate väärtustega tunnusmõõtkavade domineerimist õppeprotsessis.
- Kodeerib kategoorilised muutujad: Kodeerimistehnikad teisendavad kategoorilised andmed numbrilisteks esitusteks, mida masinõppe algoritmid saavad mõista.
- Vähendab müra ja väljaväärtuseid: Eeltöötlus aitab leevendada väljaväärtuseid ja müraandmete mõju, mis viib töökindlamate mudeliteni.
Sissejuhatus Scikit-learni torujuhtmetesse
Scikit-learni torujuhtmed pakuvad võimalust ühendada mitu andmete teisendamise sammu üheks, korduvkasutatavaks objektiks. See lihtsustab teie koodi, parandab loetavust ja hoiab ära andmelekke mudeli hindamise ajal. Torujuhe on sisuliselt andmete teisendamise järjestus, millele järgneb lõplik estimaator (nt klassifikaator või regulaator). Siin on põhjused, miks torujuhtmed on nii kasulikud:
- Koodi korraldus: Torujuhtmed kapseldavad kogu andmete eeltöötluse ja modelleerimise töövoo ühte üksusesse, muutes teie koodi organiseeritumaks ja kergemini hooldatavaks.
- Andmelekke ennetamine: Torujuhtmed tagavad, et andmete teisendusi rakendatakse nii treening- kui ka testimisandmetele ühtlaselt, vältides andmelekkeid, mis võivad põhjustada üleliigset sobivust ja halba üldistatavust.
- Lihtsustatud mudeli hindamine: Torujuhtmed lihtsustavad teie mudeli jõudluse hindamist selliste tehnikate abil nagu ristvalideerimine, kuna kogu eeltöötlus- ja modelleerimistöövoog rakendatakse iga voldi kohta ühtlaselt.
- Sujuv juurutamine: Torujuhtmeid saab hõlpsasti tootmiskeskkondadesse juurutada, tagades, et andmeid töödeldakse eeltöödeldud samamoodi nagu treeningu ajal.
Levinumad andmete eeltöötlustehnikad Scikit-learnis
Scikit-learn pakub laia valikut eeltöötlustehnikaid. Siin on mõned kõige sagedamini kasutatavad:
1. Skaleerimine ja normaliseerimine
Skaleerimine ja normaliseerimine on tehnikad, mida kasutatakse numbriliste tunnusmõõtkavate teisendamiseks sarnasesse väärtuste vahemikku. See on oluline, kuna erineva skaalaga tunnusmõõtkavad võivad õppeprotsessi ebaproportsionaalselt mõjutada. Scikit-learn pakub mitmeid skaleerimis- ja normaliseerimismeetodeid:
- StandardScaler: Standardiseerib tunnusmõõtkavad, eemaldades keskmise ja skaleerides ühikvariatsioonile. See on laialdaselt kasutatav tehnika, mis eeldab, et andmed järgivad normaaljaotust.
Valem:
x_scaled = (x - keskmine) / standard_hälveNäide: Oletagem, et teil on eluasemete hinnad USA dollarites ja ruutjalades. Nende tunnusmõõtkavate skaleerimine tagab, et mudel ei anna ebaproportsionaalset tähtsust suuremate väärtustega tunnusmõõtkavale (nt eluasemete hinnad).
- MinMaxScaler: Skaleerib tunnusmõõtkavad määratud vahemikku, tavaliselt 0 ja 1 vahele. See on kasulik, kui soovite säilitada andmete algset jaotust.
Valem:
x_scaled = (x - min) / (max - min)Näide: Pilditöötlus kasutab sageli MinMaxScalerit piksliväärtuste normaliseerimiseks vahemikku [0, 1].
- RobustScaler: Skaleerib tunnusmõõtkavad, kasutades väljaväärtustele vastupidavaid statistilisi näitajaid, nagu mediaan ja kvartiilidevaheline ulatus (IQR). See on hea valik, kui teie andmed sisaldavad väljaväärtuseid.
Valem:
x_scaled = (x - mediaan) / IQRNäide: Finantsandmetes, kus väljaväärtused on levinud (nt äärmuslikud aktsiaturu kõikumised), võib RobustScaler pakkuda stabiilsemaid tulemusi.
- Normalizer: Normaliseerib proovid individuaalselt ühiknormiks. See on kasulik, kui tunnussvektori suurus on olulisem kui üksikud tunnussmõõtkavad.
Valem (L2 norm):
x_scaled = x / ||x||Näide: Tekstitöötluses on tunnussageduse-pöördpöördtunnussageduse (TF-IDF) vektorite normaliseerimine tavaline praktika.
2. Kategooriliste muutujate kodeerimine
Masinõppe algoritmid nõuavad tavaliselt numbrilist sisendit, seega tuleb kategoorilised muutujad teisendada numbrilisteks esitusteks. Scikit-learn pakub mitmeid kodeerimistehnikaid:
- OneHotEncoder: Loob iga tunnusmõõtkava kategooria jaoks binaarsed veerud. See sobib nominaalsete kategooriliste tunnusmõõtkavate jaoks (tunnusmõõtkavad ilma sisemise järjekorrata).
Näide: "riik" tunnusmõõtkava kodeerimine väärtustega nagu "USA", "Kanada" ja "UK" loob kolm uut veergu: "country_USA", "country_Canada" ja "country_UK".
- OrdinalEncoder: Määrab iga kategooria jaoks täisarvu väärtuse selle järjekorra alusel. See sobib ordinaalsete kategooriliste tunnusmõõtkavate jaoks (tunnusmõõtkavad, millel on tähenduslik järjekord).
Näide: "haridustaseme" tunnusmõõtkava kodeerimine väärtustega nagu "keskkool", "bakalaureus" ja "magister" määrab vastavalt täisarvud 0, 1 ja 2.
- LabelEncoder: Kodeerib sihtetikette väärtustega vahemikus 0 kuni n_klassid-1. Kasutage seda klassifitseerimisprobleemides sihtmuutuja kodeerimiseks.
Näide: "rämps" ja "mitte-rämps" siltide kodeerimine vastavalt 0 ja 1.
- TargetEncoder (vajab category_encoders teeki): Kodeerib kategoorilised tunnusmõõtkavad iga kategooria sihtmuutuja keskmise alusel. Võib põhjustada sihtmärgi lekkimist, kui seda ei kasutata ristvalideerimise seadistuses hoolikalt.
3. Puuduvate väärtuste käsitlemine
Puuduvad väärtused on reaalmaailma andmestikes levinud probleem. Scikit-learn pakub tehnikat puuduvate väärtuste imputeerimiseks (täitmiseks):
- SimpleImputer: Imputeerib puuduvad väärtused konstantse väärtuse, keskmise, mediaani või tunnusmõõtkava kõige sagedasema väärtuse abil.
- KNNImputer: Imputeerib puuduvad väärtused k-lähima naabri algoritmi abil. See leiab k lähimat proovi puuduvate väärtustega proovi jaoks ja kasutab nende naabrite keskmist väärtust puuduva väärtuse imputeerimiseks.
- IterativeImputer: Imputeerib puuduvad väärtused iteratiivse modelleerimise lähenemise abil. Iga puuduvate väärtustega tunnusmõõtkava modelleerib teiste tunnusmõõtkavate funktsioonina ja puuduvad väärtused ennustatakse iteratiivselt.
4. Tunnuste teisendamine
Tunnuste teisendamine hõlmab uute tunnusmõõtkavate loomist olemasolevatest. See võib parandada mudeli jõudlust, tabades mittelineaarseid seoseid või tunnusmõõtkavate vahelisi interaktsioone. Mõned tehnikad hõlmavad:
- PolynomialFeatures: Loob tunnusmõõtkavate polünoomilised kombinatsioonid. Näiteks, kui teil on kaks tunnusmõõtkavat x1 ja x2, võib PolynomialFeatures luua uued tunnusmõõtkavad nagu x1^2, x2^2, x1*x2.
- FunctionTransformer: Rakendab tunnusmõõtkavadele kohandatud funktsiooni. See võimaldab teil teha suvalisi teisendusi, nagu logaritmilised või eksponentsiaalsed teisendused.
- PowerTransformer: Rakendab võimsusteisenduse, et muuta andmed rohkem Gaussi-sarnaseks. See võib olla kasulik algoritmide jaoks, mis eeldavad normaalust, nagu lineaarne regressioon. (Sisaldab Box-Cox ja Yeo-Johnson teisendusi)
Andmete teisendamise torujuhtmete loomine Scikit-learniga
Nüüd paneme need eeltöötlustehnikad praktikasse, luues andmete teisendamise torujuhtmeid. Siin on samm-sammult juhend:
1. Vajalike teekide importimine
Alustage vajalike teekide importimisega Scikit-learnist:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder, SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pandas as pd
2. Laadige ja valmistage oma andmed ette
Laadige oma andmestik kasutades pandasit või mõnda muud sobivat meetodit. Tuvastage oma andmestikus numbrilised ja kategoorilised tunnusmõõtkavad. Näiteks:
data = {
'age': [25, 30, 35, 40, 45, None],
'country': ['USA', 'Canada', 'USA', 'UK', 'Canada', 'USA'],
'salary': [50000, 60000, 70000, 80000, 90000, 55000],
'purchased': [0, 1, 0, 1, 0, 1]
}
df = pd.DataFrame(data)
3. Määratlege eeltöötluse sammud
Looge oma kasutatavate eeltöötlusmuundurite eksemplarid. Näiteks numbriliste tunnusmõõtkavate käsitlemiseks võite kasutada StandardScaler ja SimpleImputer. Kategooriliste tunnusmõõtkavate jaoks võite kasutada OneHotEncoder. Kaaluge puuduvate väärtuste käsitlemise strateegiate lisamist enne skaleerimist või kodeerimist.
numerical_features = ['age', 'salary']
categorical_features = ['country']
numerical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
categorical_transformer = Pipeline(steps=[
('onehot', OneHotEncoder(handle_unknown='ignore'))
])
4. Looge ColumnTransformer
Kasutage ColumnTransformer erinevate muundurite rakendamiseks teie andmete erinevatele veerudele. See võimaldab teil töödelda numbrilisi ja kategoorilisi tunnusmõõtkava eraldi.
preprocessor = ColumnTransformer(
transformers=[
('num', numerical_transformer, numerical_features),
('cat', categorical_transformer, categorical_features)
])
5. Looge torujuhe
Looge Pipeline objekt, mis ühendab eeltöötluse sammud masinõppemudeliga. See tagab, et andmed töödeldakse eeltöödeldud viisil enne mudelisse saatmist.
pipeline = Pipeline(steps=[('preprocessor', preprocessor),
('classifier', LogisticRegression())])
6. Treenige ja hinnake mudelit
Jagage oma andmed treening- ja testimisandmeteks. Seejärel treenige torujuhet treeningandmetel ja hinnake selle jõudlust testimisandmetel.
X = df.drop('purchased', axis=1)
y = df['purchased']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
pipeline.fit(X_train, y_train)
score = pipeline.score(X_test, y_test)
print(f'Model accuracy: {score}')
Täielik näidisprogramm
Siin on täielik programm andmete teisendamise torujuhtme loomiseks ja treenimiseks:
import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder, SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
# Näidisandmed
data = {
'age': [25, 30, 35, 40, 45, None],
'country': ['USA', 'Canada', 'USA', 'UK', 'Canada', 'USA'],
'salary': [50000, 60000, 70000, 80000, 90000, 55000],
'purchased': [0, 1, 0, 1, 0, 1]
}
df = pd.DataFrame(data)
# Määratlege tunnusmõõtkavad
numerical_features = ['age', 'salary']
categorical_features = ['country']
# Looge muundurid
numerical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
categorical_transformer = Pipeline(steps=[
('onehot', OneHotEncoder(handle_unknown='ignore'))
])
# Looge ettevalmistaja
preprocessor = ColumnTransformer(
transformers=[
('num', numerical_transformer, numerical_features),
('cat', categorical_transformer, categorical_features)
])
# Looge torujuhe
pipeline = Pipeline(steps=[('preprocessor', preprocessor),
('classifier', LogisticRegression())])
# Jagage andmed
X = df.drop('purchased', axis=1)
y = df['purchased']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Treenige mudelit
pipeline.fit(X_train, y_train)
# Hinnake mudelit
score = pipeline.score(X_test, y_test)
print(f'Model accuracy: {score}')
Täiustatud torujuhtmete tehnikad
Kui olete põhitõdedega tuttav, saate uurida täiustatud torujuhtmete tehnikaid:
1. Kohandatud muundurid
Saate luua oma kohandatud muundurid, et teha spetsiifilisi andmete teisendusi, mida Scikit-learnis pole saadaval. Kohandatud muunduri loomiseks peate pärismaalt TransformerMixin ja BaseEstimator klasse ning rakendama fit ja transform meetodeid. See võib olla kasulik tunnusinseneri töö või domeenispetsiifiliste teisenduste jaoks. Pidage meeles, et lisage loetavuse tagamiseks sobivad dokumentatsioonistringid.
2. Tunnuste ühendamine
FeatureUnion võimaldab teil ühendada mitme muunduri väljund ühe tunnussvektoriks. See võib olla kasulik, kui soovite rakendada erinevaid teisendusi samadele tunnusmõõtkavadele või kombineerida erinevalt teisendatud tunnusmõõtkava. FeatureUnion klassi kasutatakse mitme muunduri väljundi ühendamiseks ühe tunnussvektoriks.
3. Võrgusilma otsing torujuhtmetega
Saate kasutada GridSearchCV oma torujuhtme hüperparameetrite optimeerimiseks, sealhulgas eeltöötluse sammude hüperparameetrite optimeerimiseks. See võimaldab teil automaatselt leida parima eeltöötlustehnikate ja mudeli parameetrite kombinatsiooni. Olge ettevaatlik suurenenud arvutusmaksumuse suhtes.
Parimad tavad andmete eeltöötluse torujuhtmete jaoks
Siin on mõned parimad tavad, mida meeles pidada andmete eeltöötluse torujuhtmete loomisel:
- Mõistke oma andmeid: Enne mis tahes eeltöötlustehnikate rakendamist võtke aega oma andmete mõistmiseks. Uurige oma tunnusmõõtkavate jaotusi, tuvastage puuduvad väärtused ja otsige väljaväärtuseid.
- Dokumenteerige oma torujuhe: Lisage oma koodi kommentaarid, et selgitada torujuhtme iga sammu. See muudab teie koodi mõistmise ja hooldamise lihtsamaks.
- Testige oma torujuhet: Testige põhjalikult oma torujuhet, et tagada selle õige toimimine. Kasutage üksustestide abil, et kontrollida, et torujuhtme iga samm annab oodatud väljundi.
- Vältige andmelekkeid: Olge oma andmete eeltöötluse ajal ettevaatlik, et vältida andmelekkeid. Veenduge, et kasutate ainult treeningandmetest saadud teavet treeningandmete eeltöötluseks. Kasutage torujuhtmeid, et tagada järjepidevus treening- ja testimisandmete vahel.
- Jälgige jõudlust: Jälgige oma mudeli jõudlust aja jooksul ja treenige seda vajadusel uuesti. Andmete jaotused võivad aja jooksul muutuda, seega on oluline perioodiliselt oma torujuhet uuesti hinnata ja vajadusel kohandusi teha.
Reaalse maailma näited
Uurime mõningaid reaalse maailma näiteid selle kohta, kuidas andmete teisendamise torujuhtmeid saab kasutada erinevates tööstusharudes:
- Rahandus: Krediidiriski modelleerimisel saab torujuhtmeid kasutada kliendiandmete eeltöötluseks, sealhulgas numbrilised tunnusmõõtkavad nagu sissetulek ja krediidiskoor, samuti kategoorilised tunnusmõõtkavad nagu tööhõive staatus ja laenu eesmärk. Puuduvaid väärtusi saab imputeerida tehnikate abil nagu keskmine imputatsioon või k-lähima naabri imputatsioon. Skaleerimine on oluline, et tagada, et erineva skaalaga tunnusmõõtkavad ei domineeriks mudelis.
- Tervishoid: Meditsiinidiagnostikas saab torujuhtmeid kasutada patsientide andmete eeltöötluseks, sealhulgas numbrilised tunnusmõõtkavad nagu vanus, vererõhk ja kolesterooli tase, samuti kategoorilised tunnusmõõtkavad nagu sugu ja haiguslugu. Kategooriliste tunnusmõõtkavate teisendamiseks numbrilisteks esitusteks saab kasutada ühe-kuuma kodeerimist.
- E-kaubandus: Tootesoovitussüsteemides saab torujuhtmeid kasutada kliendi- ja tootmisandmete eeltöötluseks, sealhulgas numbrilised tunnusmõõtkavad nagu ostusagedus ja tootereitingud, samuti kategoorilised tunnusmõõtkavad nagu tootekategooria ja kliendi demograafia. Torujuhtmed võivad sisaldada tekstieeltöötluse samme, nagu tokeenimine ja tüve tuletamine, et ekstraheerida tunnusmõõtkavad tootetutvustustest ja kliendiarvustustest.
- Tootmine: Ennustavas hoolduses saab torujuhtmeid kasutada masinate andurandmete eeltöötluseks, sealhulgas numbrilised tunnusmõõtkavad nagu temperatuur, rõhk ja vibratsioon, samuti kategoorilised tunnusmõõtkavad nagu masina tüüp ja töötingimused. RobustScaler võib siin olla eriti kasulik võimalike väljaväärtuse näitude tõttu.
Ülemaailmsete andmestike väljakutsete lahendamine
Ülemaailmsete andmestikega töötades kohtate sageli spetsiifilisi väljakutseid, mis nõuavad eeltöötluse ajal hoolikat kaalumist. Siin on mõned levinumad probleemid ja nende lahendamise strateegiad:
- Erinevad andmevormingud: Kuupäevad, numbrid ja valuutad võivad erinevates piirkondades olla erinevates vormingutes. Tagage ühtlane analüüs ja vormindamine. Näiteks võivad kuupäevad olla DD/MM/YYYY või MM/DD/YYYY vormingus. Kasutage kuupäeva teisenduste ja vormindamise käsitlemiseks sobivaid teeke.
- Keele erisused: Tekstandmed võivad olla erinevates keeltes, mis nõuavad tõlkimist või keelespetsiifilisi eeltöötlustehnikaid. Kaaluge Google Translate API (sobivate kasutuskaalutluste ja kuludega) kasutamist tõlkimiseks või NLTK kasutamist keelespetsiifiliseks tekstivöötluseks.
- Valuutakonversioon: Finantsandmed võivad olla erinevates valuutades. Teisendage kõik väärtused ühiseks valuutaks, kasutades ajakohaseid vahetuskursse. Kasutage usaldusväärseid API-sid täpsete ja reaalajas vahetuskursside saamiseks.
- Ajavööndid: Aegridade andmed võivad olla salvestatud erinevates ajavööndites. Teisendage kõik ajatemplid ühiseks ajavööndiks (nt UTC), et tagada järjepidevus. Ajavööndi teisenduste käsitlemiseks kasutage teeke nagu pytz.
- Kultuurilised erinevused: Kultuurilised nüansid võivad mõjutada andmete tõlgendamist. Näiteks võivad klientide rahulolu tulemused olla erinevate kultuuride vahel erinevalt tõlgendatud. Olge nende nüansside teadlik ja kaaluge neid oma eeltöötluse sammude kavandamisel.
- Andmete kvaliteedi probleemid: Andmete kvaliteet võib erinevate allikate vahel märkimisväärselt erineda. Vigade tuvastamiseks ja parandamiseks rakendage töökindlaid andmete valideerimise ja puhastamise protseduure.
Järeldus
Andmete eeltöötlus on masinõppe torujuhtme kriitiline samm. Scikit-learni torujuhtmeid kasutades saate oma töövoogu sujuvamaks muuta, andmelekkeid vältida ja oma mudelite jõudlust parandada. Nende tehnikate valdamine annab teile võimaluse luua laia valiku rakenduste jaoks töökindlamaid ja usaldusväärsemaid masinõppelahendusi. Pidage meeles, et kohandage eeltöötluse samme oma andmete spetsiifiliste omaduste ja masinõppemudeli nõuete järgi. Katsetage erinevate tehnikatega, et leida optimaalne kombinatsioon teie konkreetse probleemi jaoks. Investeerides aega nõuetekohasesse andmete eeltöötlusesse, saate oma masinõppe algoritmide täieliku potentsiaali avada ja saavutada paremaid tulemusi.