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:

  1. f: Frekuenca në Hertz [Hz].
  2. alfa: Këndi i sulmit (AoA, α), në gradë [°].
  3. c: Gjatësia e akordit, në metra [m].
  4. U_infinity: Shpejtësia e rrjedhës së lirë, në metra për sekondë [m/s].
  5. delta: Trashësia e zhvendosjes së anës së thithjes (𝛿), në metra [m].

Prodhimi:

  1. 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………..