Rreth grupit të të dhënave
Kontekst
Të dhënat e NASA-s rrjedhin nga një seri eksperimentesh në seksionet dy dhe tre-dimensionale të tehut të fletës së ajrit që u kryen në një tunel anekoik të erës për arsye aerodinamike dhe akustike. Depoja e Mësimit të Makinerisë UCI dha informacionin. https://archive.ics.uci.edu/ml/datasets/airfoil+self-noise
Detajet e grupit të të dhënave:
Seti i të dhënave të NASA-s përfshin shumë fletë ajrore NACA 0012 të madhësive të ndryshme (n0012-il) me shpejtësi të ndryshme të tunelit të erës dhe kënde sulmi. Në çdo eksperiment, hapësira e fletës ajrore dhe pozicioni i vëzhguesit ishin identike.
Seti i të dhënave: Shiko grupin e të dhënave
Ju mund të merrni grupin e të dhënave nga lidhja e mësipërme për të praktikuar.
Atributet e mëposhtme janë pjesë e grupit të të dhënave:
1. Frekuenca, në Hertz.
2. Këndi i sulmit, në gradë.
3. Gjatësia e akordit, në metra.
4. Shpejtësia e rrjedhës së lirë, në metra për sekondë.
5. Trashësia e zhvendosjes së anës thithëse, në metra.
Dalja e vetme është:
6. Niveli i shkallëzuar i presionit të zërit, në decibel.
Informacioni i atributit:
Karakteristikat e hyrjes:
- f: Frekuenca në Hertz [Hz].
- alfa: Këndi i sulmit (AoA, α), në gradë [°].
- c: Gjatësia e akordit, në metra [m].
- U_infinity: Shpejtësia e rrjedhës së lirë, në metra për sekondë [m/s].
- delta: Trashësia e zhvendosjes së anës së thithjes (𝛿), në metra [m].
Prodhimi:
- SSPL: Niveli i shkallëzuar i presionit të zërit, në decibel [dB].
Së pari duhet të importojmë biblioteka të caktuara. Për shkak se shumica e bibliotekave Python kanë një koleksion metodash të dobishme, shkrimi i kodit të ri është rrallë i nevojshëm. Si rezultat, unë importova bibliotekat më poshtë.
# importing libraries import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import scipy.stats as stats from sklearn.preprocessing import MinMaxScaler from sklearn.preprocessing import KBinsDiscretizer from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA from sklearn.model_selection import train_test_split from sklearn.model_selection import cross_val_score, cross_val_predict from sklearn import metrics from sklearn.model_selection import KFold from sklearn.linear_model import LinearRegression from sklearn.linear_model import Lasso from sklearn.linear_model import Ridge
Pandas përdoret kryesisht për analizën e të dhënave me një sërë formatesh skedarësh, duke përfshirë Microsoft Excel, JSON, SQL dhe vlera të ndara me presje. Për më tepër, ai është në gjendje të kryejë detyra të manipulimit të të dhënave duke përfshirë bashkimin, riformësimin, zgjedhjen, pastrimin, etj. Aty ku është e nevojshme, do të përshkruaj më shumë biblioteka.
Unë kam shtuar skriptet më poshtë për të hyrë në llogarinë tënde të Google Drive, në mënyrë që të mund të qasesh te skedarët që janë ruajtur atje. Kur të ekzekutohet kodi më poshtë, ne duhet të vendosim shtegun për të marrë lejen që duhet të futim këtu.
# Getting the dataset. data = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/AirfoilSelfNoise.csv")
Unë përdor grupin e të dhënave të papërpunuara.
#getting dataset info data.info()
Ka 1503 rreshta dhe 6 kolona tipare në këtë grup të dhënash. ne mund të shohim emrat e të 6 kolonave, llojet e të dhënave të tyre, numrin e rreshtave dhe vlerat jo-nul, etj. Nuk ka tipare të klasifikuara në asnjërën nga kolonat; janë të gjitha numerike. Të dhënat nuk kanë as vlera null.
Hapi 01: Përpunimi paraprak i të dhënave
Është thelbësore të bëjmë të paktën një parapërpunim minimal të të dhënave tona përpara se t'i futim ato në modelin tonë, pasi informacioni kuptimplotë që mund të nxirret nga grupi i të dhënave ndikon drejtpërdrejt në cilësinë e modelit. Përpunimi paraprak i të dhënave është një fazë kyçe në mësimin e makinerive.
Hapi 01-A: Pastrimi i të dhënave - Identifikimi dhe trajtimi i vlerave që mungojnë, regjistrimet e dublikave
# Checking null values data.isnull().values.any() # Checking for duplicate values print(data.duplicated().value_counts())
Në daljen e mësipërme, mund të shohim që dalja është false. Pra, mund të arrijmë në përfundimin se nuk ka vlera zero dhe vlera të dyfishta në këtë grup të dhënash.
Kolonat Frekuenca, Këndi i sulmit, Gjatësia e Akordit dhe Shpejtësia e Rrjedhës së Lirë janë paraqitur në figurën e mësipërme me vlerat e tyre të veçanta në boshtin x dhe numërimin e frekuencës së tyre në boshtin y. Pavarësisht nga fakti se 1503 rreshtat e të dhënave të disa kolonave ishin diskrete, llojet e të dhënave numerike të të tjerave.
Hapi 01-B: Trajtimi i të dhënave të jashtme
Një artikull që ndryshon shumë nga objektet e tjera quhet i jashtëm. Gabimet e shumta mund të jenë fajtore. Për të krijuar një model me cilësi të lartë, ne duhet të analizojmë të dhënat e jashtme në grupin e të dhënave të ofruara.
Karakteristikat e frekuencës dhe këndit të sulmit kanë disa vlera të jashtme në ato kolona. Këto pika të jashtme duhet të eliminohen.
kështu që së pari hiqni pjesën e jashtme në kolonën Frekuenca
Duke zëvendësuar vlerat e jashtme me kufij më të lartë dhe më të ulët, u eliminuan vlerat e jashtme në kolonën e frekuencës. Më poshtë u përdorën për të përcaktuar kufijtë e poshtëm dhe të sipërm
Ekspertët që kanë tejkaluar kufirin e sipërm janë zëvendësuar me vlerën e kufirit të sipërm, ndërsa ato që kanë rënë nën kufirin e poshtëm janë zëvendësuar me kufirin e poshtëm. Hapat e mëposhtëm u ndërmorën për të zëvendësuar pikat e jashtme:
# upper_limit and lower_limit to remove outliers Q1 = data["f"].quantile(0.25) Q3 = data["f"].quantile(0.75) print("Q1 : ", Q1) print("Q2 : ", Q3) IQR = Q3-Q1 print("IQR : ", IQR) l_limit = Q1 - 1.5*IQR u_limit = Q3 + 1.5*IQR print("lower limit : ",l_limit) print("upper limit : ",u_limit) # replacing outliers data['f'] = np.where(data['f']>u_limit, u_limit, data['f']) data['f'] = np.where(data['f']<l_limit, l_limit, data['f']) # after outliers removed sns.boxplot(data["f"]) plt.xlabel("Frequency(in Hertz)", fontsize=15) plt.title("Boxplot for Frequency (without outliers)", fontsize=20) plt.show()
Të jashtmet në kolonën e këndit të sulmit
Pjesat e jashtme në kolonën delta
Teknikat e transformimit të veçorive
Histogramet më poshtë e bëjnë të lehtë për të parë se si sillet grupi i të dhënave për secilin atribut. Për më tepër, anshmëria e të dhënave tregohet qartë në diagramet e mëposhtëm Q-Q.
Siç shihet në ilustrimet e mësipërme,
Shpejtësia e rrjedhës së lirë, gjatësia e kordës dhe këndi i sulmit janë të gjitha disi të anuar pozitivisht.
Anuar shumë pozitiv për sa i përket frekuencës dhe trashësisë së zhvendosjes së anës së thithjes
Më poshtë është një paraqitje e shtrembërimit të grupit të të dhënave pas transformimit Box-Cox.
Teknikat e kodimit të veçorive
Meqenëse asnjë nga karakteristikat nuk është kategorike, metodat e kodimit të veçorive nuk kërkohen.
Standardizimi
Duke përdorur segmentin e kodit të mëposhtëm, metoda StandardScaler() përdoret për të shkallëzuar dhe standardizuar të gjitha variablat e pavarur për të eliminuar mesataren dhe shkallëzimin e çdo veçori në variancën e njësisë në mënyrë që të kapërcehen variancat e rëndësishme në vlerat e shpërndarjes.
# standardizing cols = ["f", "alpha", "c", "U_infinity","delta"] X = data[cols].copy() y = data[["SSPL"]].copy() scaler = StandardScaler() s_data = scaler.fit_transform(X) X = pd.DataFrame(s_data) X = X.rename(columns={0: "f", 1: "alpha", 2: "c", 3:"U_infinity", 4:"delta"}) X.head()
Diskretizimi
Diskretizimi i vazhdueshëm i veçorive mund të përshpejtojë procesin e të mësuarit. Vlerat e anshmërisë përhapen në gamë falë diskretimit. Ajo thjeshton dhe përmirëson të kuptuarit e fakteve.
# Discretize disc = KBinsDiscretizer(n_bins=8, encode='ordinal', strategy='uniform') disc.fit(X) _disc = disc.transform(X) X = pd.DataFrame(_disc) X = X.rename(columns={0: "f", 1: "alpha", 2: "c", 3:"U_infinity", 4:"delta"})
Pas diskretimit
Fotografitë e sipërpërmendura e bëjnë shumë të qartë se kolonat për këndin e sulmit, gjatësinë e kordës dhe shpejtësinë e rrjedhës së lirë pranojnë vetëm vlera të vazhdueshme për vargje të caktuara. Si rezultat, është e nevojshme të sistemohen variabla të vazhdueshme në kosha në mënyrë që të zvogëlohet numri i variablave të vazhdueshëm të vlerësuar. Për të kryer diskretizimin për tre cilësitë e përmendura më sipër, përdorni seksionin e kodit të mëposhtëm.
Inxhinieri e Veçorisë
Përdorni SVD (Zbërthimi i Vlerës Njësore) ose PCA (Analiza e Komponentit Kryesor) në mënyrë të përshtatshme për reduktimin e veçorive.
# Applying PCA with n_components=1. pca = PCA(n_components=1) p_comp = pca.fit_transform(X) p_df = pd.DataFrame(data = p_comp, columns = ['pc_1']) p_df.info()
Aktualisht kemi dy veçori (Veçori e formuar nga PCA dhe veçori e synuar). Për të analizuar sjelljen e të dhënave, më poshtë u krijua një grafik shpërndarjeje me përshtatjen më të mirë.
Matrica e korrelacionit
Meqenëse PCA kërkon korrelacione të larta, matrica e korrelacionit duhet të përdoret për të përcaktuar peshën e marrëdhënies.
Ne mund të eliminojmë një karakteristikë nëse ka ndonjë kolonë.
Për të gjeneruar matricën e korrelacionit për grupin e të dhënave, përdorni sa vijon formulat.
# correlation matrix corr_mat = X.corr() sns.heatmap(corr_mat, annot = True) plt.title("Correlation matrix",fontsize='20') plt.show()
Meqenëse, vlerat e korrelacionit janë më të vogla se 0.9, prandaj asnjë nga kolonat nuk është e ndërlidhur
Teknikat e regresionit
Një metodë modelimi parashikuese e quajtur analiza e regresionit ekzaminon marrëdhënien midis qëllimit ose ndryshores së varur dhe variablit të pavarur në një grup të dhënash. Kur variablat e synuar dhe të pavarur shfaqin një lidhje lineare ose jolineare midis njëra-tjetrës dhe ndryshorja e synuar ka vlera të vazhdueshme, zbatohet një nga disa lloje të teknikave të analizës së regresionit. Analiza e regresionit përdoret shpesh për të identifikuar marrëdhëniet shkak-pasojë, tendencat e parashikimit, seritë kohore dhe fuqinë e parashikuesit.
Në këtë rast ne përdorim 3 modele regresioni. Ka Regresion Linear, Regresion Lasso, Regresion Ridge.
Regresioni linear
Një nga llojet më themelore të regresionit në mësimin e makinerive është regresioni linear. Një variabël parashikues dhe një ndryshore e varur që janë të lidhura në mënyrë lineare me njëra-tjetrën përbëjnë modelin e regresionit linear. Modele të shumta të regresionit linear janë ato që njihet si regresioni linear kur ka shumë variabla të pavarur të përfshirë në të dhëna.
model1 = LinearRegression() res1 = cross_val_score(model1, X, y, scoring='neg_root_mean_squared_error', cv=KFold(n_splits=10, random_state=1, shuffle=True), n_jobs=-1) pred1 = cross_val_predict(model1, X, y, cv=10) accu1 = metrics.r2_score(y, pred1) print("r2_score : ", accu1) print("Mean squared error : ", np.mean(np.absolute(res1)))
Regresioni Lasso
Kur ndryshorja e varur është diskrete, përdoret një formë e qasjes së analizës së regresionit: regresioni logjistik. Për shembull, e vërtetë ose e gabuar, 0 ose 1, etj. Si rezultat, ndryshorja e synuar mund të marrë vetëm dy vlera, dhe marrëdhënia midis ndryshores së synuar dhe ndryshores së pavarur përfaqësohet nga një kurbë sigmoide.
model2 = Lasso() res2 = cross_val_score(model2, X, y, scoring='neg_root_mean_squared_error', cv=KFold(n_splits=10, random_state=1, shuffle=True), n_jobs=-1) pred2 = cross_val_predict(model2, X, y, cv=10) accu2 = metrics.r2_score(y, pred2) print("r2_score : ", accu2) print("Mean squared error : ", np.mean(np.absolute(res2)))
Regresioni i kreshtës
Një tjetër lloj regresioni i përdorur në mësimin e makinerive, ky zakonisht zbatohet kur korrelacioni midis variablave të pavarur është i madh. Kjo është për shkak se vlerësimet më të vogla katrore ofrojnë rezultate të paanshme për të dhënat shumëkolineare. Por mund të ketë një vlerë paragjykimi nëse kolineariteti është vërtet i lartë. Si rezultat, ekuacioni i Regresionit Ridge përfshin një matricë paragjykimi. Me këtë teknikë efektive të regresionit, modeli është më pak i prirur ndaj përshtatjes së tepërt.
model3 = Ridge() res3 = cross_val_score(model3, X, y, scoring='neg_root_mean_squared_error', cv=KFold(n_splits=10, random_state=1, shuffle=True), n_jobs=-1) pred3 = cross_val_predict(model3, X, y, cv=10) accu3 = metrics.r2_score(y, pred3) print("r2_score : ", accu3) print("Mean squared error : ", np.mean(np.absolute(res3)))
Matricat e vlerësimit
Sa mirë përputhen të dhënat me modelin e regresionit tregohet nga R2. Gama e tij është midis 0 dhe 1. Sa më mirë modeli të përputhet me të dhënat tuaja, aq më e madhe është vlera R2.
Sa të përqendruara janë të dhënat rreth vijës së përshtatjes më të mirë tregohet nga Gabimi i Mesatit në katror të rrënjës (RMSE). Gama e matjes RMSE është nga 0 deri në pafundësi. Modeli është më i mirë sa më e ulët të jetë vlera.
Modeli i regresionit linear funksionon më mirë për këtë çështje të regresionit të grupit të të dhënave të vetëzhurmës së fluturimit, pasi vlerësohet me një vlerë më të lartë R2 dhe një vlerë më të ulët MSE.
#Faleminderit që lexuat artikullin tim………..