Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 22

Μηχανική Μάθηση

(Machine Learning in Python)

Διάλεξη 1η (Στατιστική)

Δ. Κάβουρας

(2022)

Δ. Κάβουρας, 1 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


Διάλεξη 1

Εισαγωγικό Σημείωμα
Η Μηχανική Μάθηση (ΜΜ) είναι ένα διεθνώς αναγνωρισμένο επιστημονικό πεδίο, με
πολλές εφαρμογές, που έχει σαν αντικείμενο την ανάλυση, αναγνώριση, και κατηγοριοποίηση ή
ταξινόμηση κάποιας πληροφορίας (π.χ. σήμα, εικόνα, κείμενο κ.ά.) σε κάποια συγκεκριμένη
κατηγορία. Η ΜΜ έχει βρει πολλές εφαρμογές σε διάφορα επιστημονικά πεδία όπως στην
επιστήμη των υπολογιστών, στην ιατρική, στην βιολογία, στην ηλεκτρονική. Παραδείγματα
είναι η αναγνώριση ομιλίας, η αναγνώριση προσώπων, αναγνώριση χαρακτήρων κειμένου,
αναγνώριση και κατηγοριοποίηση κειμένου, αναγνώριση και κατηγοριοποίηση εικόνων όπως τα
δακτυλικά αποτυπώματα, οι πινακίδες κυκλοφορίας αυτοκινήτων κλπ.
Για την κατανόηση της ΜΜ θα γίνει πρώτα μία εισαγωγή στην Στατιστική Ανάλυση
δεδομένων, ώστε να εξηγηθούν μία σειρά από μέθοδοι που χρησιμοποιούνται από την ΜΜ. Θα
ακολουθήσουν κεφάλαια σε MM:
 Εποπτευόμενη ΜΜ (Supervised Machine Learning),
 Mη-Εποπτευόμενη ΜΜ (Unsupervised Machine Learning),
 Ενισχυτική ΜΜ ( Reinforcement learning),
 Βαθιά ΜΜ (Deep Learning)

Δ. Κάβουρας, 2 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


Contents

Διάλεξη 1 2

Εισαγωγικό Σημείωμα 2

ΣΥΝΤΟΜΗ ΕΙΣΑΓΩΓΗ ΣΤΗΝ PYTHON 4

Anaconda και Spyder IDE installation. 4


ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ ΤΗΣ PYTHON με προγράμματα 7

ΑΡΧΕΣ ΣΤΑΤΙΣΤΙΚΗΣ ΑΝΑΛΥΣΗΣ ΔΕΔΟΜΕΝΩΝ 13

1.1. Εισαγωγή 13
1.2. Βασικές έννοιες στατιστικής 13
1.2.1 Η κανονική κατανομή 13
1.2.2. Η μέση τιμή (mean value) 14
1.2.3. Διακύμανση (variance) και τυπική απόκλιση (standard deviation) 15
1.2.4. Η διάμεσος (median) 16
1.2.5. Η επικρατούσα τιμή (mode) 16
1.2.6. Skewness 17
1.2.7. Kurtosis 17
Παράδειγμα 18
Ασκήσεις για το σπίτι 20

Δ. Κάβουρας, 3 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


ΣΥΝΤΟΜΗ ΕΙΣΑΓΩΓΗ ΣΤΗΝ PYTHON
Η εισαγωγή στην python απευθύνεται σε φοιτητές του Τμήματος Μηχανικών Βιοϊατρικής
εξοικειωμένους στην γλώσσα προγραμματισμού Matlab και βασισμένο στις ασκήσεις για εργαστήριο
Matlab του βιβλίου του κ. Καλατζή για εύκολη μετάβαση στην Python.

Anaconda και Spyder IDE installation.


Για αρχή καλό είναι να ξεκινήσετε με το Anaconda, γιατί είναι πιο εύκολο στην χρήση. Από την
διεύθυνση (https://www.anaconda.com/products/individual#windows), επιλέξτε το download για να
κατεβάσετε το αρχείο (Anaconda3-2022.05-Windows-x86_64) και να εγκαταστήσετε το Anaconda,
ακολουθώντας όλες τις default επιλογές του προγράμματος της εγκατάστασης .

Μόλις εγκατασταθεί το Anaconda, αναζητήστε στο start windows τον Anaconda Navigator και κάνετε
κλικ το Anaconda Navigator

Δ. Κάβουρας, 4 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


Που θα σας οδηγήσει στην ακόλουθη οθόνη

για να επιλέξετε για εγκατάσταση του Spyder για IDE και Editor, όπου θα αναπτύξουμε όλα τα
προγράμματα του μαθήματος. Το Spyder είναι σαν το IDE του Matlab, όπου έχουμε τον editor, το
command window κλπ

Δ. Κάβουρας, 5 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


Για λεπτομέρειες εγκατάστασης και χρήσης των Anaconda και Spyder δείτε τα ακόλουθα video:

https://www.youtube.com/watch?v=ou65T_mC8Z8 (για το Spyder)


https://www.youtube.com/watch?v=5mDYijMfSzs (για το anaconda και Spyder)
https://www.youtube.com/watch?v=Uyeu3m3BSXw (για το anaconda και Spyder με υπότιτλους)

Επίσης, στην ακόλουθη διεύθυνση μπορείτε να κατεβάσετε το βιβλίο του Joel Grus, στην αγγλική
έκδοση, έως ότου λάβετε το βιβλίο μεταφρασμένο από τον Εύδοξο.

https://drive.google.com/drive/folders/1DVS4mWSDPU_9VoFD7yBOnaLIhGEuyXED?usp=sharing

Δ. Κάβουρας, 6 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ ΤΗΣ PYTHON με προγράμματα
1 Ορισμός μεταβλητών
def STOP():
import sys Output:
sys.exit()
addition, a: 4, b: 2, y: 6
def cls():
print(chr(27) + "[2J")
print("1.============= use of variables========\n");
#------------ main program------------------
cls()#clear console
a=4
b=2
y=a+b
print("addition, a:%5d, b:%5d, y: %5d\n" % (a,b,y))
STOP()

2 If
# 2.============= use of if-elif-else========
def cls(): Output:
print(chr(27) + "[2J")
cls() BMI calculation
print("2.========== use of if-elif-else========\n"); BMI = 22.2 (Normal weight)
print('BMI calculation')
w = 80
h = 1.9
bmi = w / (h ** 2)
print('BMI = %.1f (' % bmi, end="")
if (bmi < 18.5):
print('Underweight', end="")
elif (bmi >= 18.5 and bmi < 25):
print('Normal weight', end="")
elif (bmi >= 25 and bmi < 30):
print('Overweight', end="")
else:
print('Obesity', end="")
print(')', end="")

3 for
def cls():
print(chr(27) + "[2J") Output:
# 3.============= for ========
cls() sin(0.00) = 0.000
import math sin(1.00) = 0.500
for x in range(0, 7):#every 1 step sin(2.00) = 0.866
act = x * math.pi / 6 sin(3.00) = 1.000

Δ. Κάβουρας, 7 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


print('sin(%.2f) = %.3f' % (x, math.sin(act))) sin(4.00) = 0.866
sin(5.00) = 0.500
print("\n----------every 2 steps ") sin(6.00) = 0.000
for x in range(0, 7, 2):
act = x * math.pi / 6 ----------every 2 steps
print('sin(%.2f) = %.3f' % (x, math.sin(act))) sin(0.00) = 0.000
sin(2.00) = 0.866
print('\n---------clock coundown:\n') sin(4.00) = 0.866
print('countdown') sin(6.00) = 0.000
import time
t = 10 #seconds ---------clock coundown:
for i in range(t-1, -1, -1):
print('%d' % i) countdown
time.sleep(0.1) 9
print('*** Bang! ***') 8
7
6
5
4
3
2
1
0
*** Bang! ***

4 while
def cls():
print(chr(27) + "[2J") Output:
# 4.============= while ========
cls() ----while:
print("\n----while:\n") 5
n=5 4
while n > 0: 3
print('%3d' % n) 2
n=n-1 1
N=5
s=0 exam score? 2
for i in range(0, N): exam score? 4
x = int(input('exam score? ')) exam score? 5
while (x < 0 or x > 10): exam score? 6
print('ERROR: SCORES ALLOWED BETWEEN 0 AND 10.') exam score? 7
x = int(input('exam score?')) s= 24.00, mean score: 4.80
s=s+x
print('s= %5.2f, mean score: %.2f\n' % (s, s / N))

5 functions
# 5.============= use of functions========
def addition(a,b): Output:
y=a+b
return(y) 5.=========== use of functions ====
#-------------------------------
def subtraction(a,b): addition, y: 6

Δ. Κάβουρας, 8 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


y=a-b subtraction, y:2.000000
return(y) 2nd addition, y:16
#-------------------------------
def cls():
print(chr(27) + "[2J")
#------------ main program------------------
cls()#clear console
print('5.=========== use of functions ================\n')
a=4;b=2
y=addition(a, b)
print('addition, y:%2d\n' % y)

y1=subtraction(a, b)
print('subtraction, y:%f\n' % y1)
y=addition(a,b)+10
print('2nd addition, y:%2d\n' % y)

6 arrays and lists


#6.======use of arrays (lists) and for loops =====
import matplotlib.pyplot as plt Output:
def addition2 (x1,x2,N):
import numpy as np 6.======use of arrays and for loops ==
x3=[]
for n in range(N): type of x1 or x2: <class 'list'>
x3.append(x1[n]+x2[n]) 2 4 6 8 : array x1
return(x3) 1 3 5 7 : array x2
def cls(): 3 7 11 15 : array x3
print(chr(27) + "[2J")
#------------ main program------------------
cls()
print('6.======use of arrays and for loops =====\n')
N=4
x1=[2,4,6,8]
x2=[1,3,5,7]
print('type of x1 or x2: ',type(x1))
for i in range(N):
print('%3d ' % (x1[i]),end='')
print(': array x1')

for i in range(N):
print('%3d ' % (x2[i]),end='')
print(': array x2')

x3=addition2(x1,x2,N)
for i in range(N):
print('%3.0f ' % (x3[i]),end='')
print(': array x3')

#defining numpy arrays


import numpy as np
X=np.zeros(len(x1),dtype=float)

Δ. Κάβουρας, 9 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


print('\ntype of X : ',type(X))

for i in range(N): type of X : <class 'numpy.ndarray'>


X[i]=x1[i]+x2[i]
print('\nnumpy array X=(x1+x2) :',X) numpy array X=(x1+x2) : [ 3. 7. 11. 15.]

7. read/write files
#7.================read - write data files========
def cls(): Output:
print(chr(27) + "[2J")
#------------ main program------------------ 7.read - write data files=========
import numpy as np
cls() read from file: [ 2.1 4.3 6.5 18.7]
print('7.read - write data files=========\n')
N=4
x1=[2.1,4.3,6.5,18.7]
filename='file_a.txt'
np.savetxt(filename, x1,fmt='%4.1f')
xx=np.loadtxt(filename)
print("read from file:",xx)

8. Δημιουργία και απεικόνιση σημάτων


#8. =========Create and plot signals=======
def cls(): Output:
print(chr(27) + "[2J")
import matplotlib.pyplot as plt 8.Create and plot signals==========
plt.close()

import matplotlib.pyplot as plt


import numpy as np
#-------------main program------------------------------
cls()
print('8.Create and plot signals==========\n')
N=1500;pi=np.pi
x1=np.empty(N);x2=np.empty(N);z=np.empty(N);
for i in range (N):
x1[i]=np.sin(10*(2*pi*i)/100)
x2[i]=np.sin( 20*(2*pi*i)/100);
z[i]=(x1[i] + x2[i])/2;

fz=10;plt.figure(figsize=(fz,fz))
plt.subplot(3,1,1);plt.plot(x1[0:300],'r');plt.grid();plt.title(
'(a)First Signal');
plt.subplot(3,1,2);plt.plot(x2[0:300],'b');plt.grid();plt.title(
'(b)Second Signal');
plt.subplot(3,1,3);plt.plot(z[0:300],'g');plt.grid();plt.title('
(c)sum of Signals');

Δ. Κάβουρας, 10 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


9 διάβασμα από αρχείο, απεικόνιση και επεξεργασία σημάτων ECG, ECG, EMG

#9.=== Read, Display, process ECG , EEG, EMG ====


def cls(): Output:
print(chr(27) + "[2J")
import matplotlib.pyplot as plt 9.===== Read, Display, process ECG , EEG, EMG ====
plt.close()
#-------------Main Program------------------------------

import matplotlib.pyplot as plt


import numpy as np
cls();
print('9.================= Read, Display, process
ECG , EEG, EMG ====\n')

filename="ecg.txt"#similarly for eeg.txt and emg.txt


x1=np.loadtxt(filename)
x1=x1[0:500]
plt.figure(figsize=(12,10))
plt.plot(x1,'-');plt.grid();plt.title('Processed Signal:
'+filename);

# ************ if scipy is not installed the import scipy


will give error
# *********** goto the Anaconda prompt and type:
conda install scipy
import scipy
from scipy import signal
# https://docs.scipy.org/doc/scipy/reference/tutorial/signal.html
filt=[1,2,1]
filt=filt/np.sum(filt)
x1processed=signal.convolve(x1,filt,'same')
plt.plot(x1processed,'r--');plt.grid();
plt.legend(('original','processed'),loc='best')
plt.xlabel('time');plt.ylabel('amplitude');
plt.grid()

10 διάβασμα από αρχείο, απεικόνιση και επεξεργασία εικόνων

#10.================= Read, Display and process of


Images ==== Output:
def cls():
print(chr(27) + "[2J") 10.======== Read, Display and process of Images ====
import matplotlib.pyplot as plt
plt.close()
#-------------Main Program------------------------------
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt

Δ. Κάβουρας, 11 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


from PIL import Image
cls()
print('10.================= Read, Display and
process of Images ====\n')
fz=10
plt.figure(figsize=(fz, fz))
filename = 'head5.bmp'
im = Image.open(filename)
plt.figure(1)
plt.subplot(1,2,1);plt.imshow(im, cmap=plt.cm.gray)
plt.axis('off')
plt.title('initial image')
#process image
from PIL import ImageFilter
#https://pillow.readthedocs.io/en/stable/reference/ Image: head5.bmp
ImageFilter.html Width: 128 pixels
im1 = im.filter(ImageFilter.SHARPEN()) Height: 128 pixels
plt.subplot(1,2,2);plt.imshow(im1, cmap=plt.cm.gray) image dimensions: (128, 128)
plt.axis('off')
plt.title('processed image')
plt.show()
#extract image dimensions
print("Image: %s" % filename)
print("Width: %d pixels" % np.size(im, 0))
print("Height: %d pixels" % np.size(im, 1))
print("image dimensions: ", np.shape(im1))

Δ. Κάβουρας, 12 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


ΑΡΧΕΣ ΣΤΑΤΙΣΤΙΚΗΣ ΑΝΑΛΥΣΗΣ ΔΕΔΟΜΕΝΩΝ
1.1. Εισαγωγή
Η στατιστική ανάλυση σαν τομέας της επιστήμης αναπτύχθηκε την περίοδο του 1700, σαν
αποτέλεσμα της μελέτης των τυχερών παιχνιδιών. Όμως, η σύγχρονη στατιστική ανάλυση αναπτύχθηκε
τον 20o αιώνα όταν έγινε δυνατόν με την εισαγωγή των υπολογιστικών μηχανών και ηλεκτρονικών
υπολογιστών να πραγματοποιηθεί η επεξεργασία μεγάλου αριθμού δεδομένων. Ιδίως οι υπολογιστές
έκαναν δυνατή την επεξεργασία και συσχετισμό μεγάλης ποσότητας δεδομένων με μεγάλη ταχύτητα και
την παρουσίαση των αποτελεσμάτων σε μορφή άμεσα αντιληπτή. Σήμερα, η στατιστική έχει υπεισέλθει
σε όλους τους τομείς της ζωής όπως η πολιτική, η υγεία, η οικονομία κ.α. Η ιατρική στατιστική
ασχολείται με την ανάλυση και επεξεργασία ποσοτικών μετρήσεων και ποιοτικών εκτιμήσεων που
αφορούν τόσο τον υγιή πληθυσμό όσο και τους ασθενείς.

1.2. Βασικές έννοιες στατιστικής

Η στατιστική γνώση προέρχεται κύρια από την πληροφορία που λαμβάνουμε από την επεξεργασία
ενός μικρού πλήθους αντιπροσωπευτικών μετρήσεων και κάνοντας γενίκευση επί του αποτελέσματος
που αφορά όλα τα δεδομένα. Είναι προφανές ότι όσο μικρότερο είναι το δείγμα των δεδομένων τόσο
μεγαλύτερο αναμένεται να είναι και το λάθος που υπεισέρχεται στο αποτέλεσμα. Για παράδειγμα, το
μέσο ύψος των παιδιών ηλικίας 5 ετών θα είναι πιο αντιπροσωπευτικό όσο περισσότερα παιδιά ληφθούν
υπόψη στην εκτίμηση του μέσου όρου.

1.2.1 Η κανονική κατανομή

Η στατιστική ανάλυση δεδομένων εξαρτάται από τον τρόπο με τον οποίο τα δεδομένα είναι
διατεταγμένα ή "κατανεμημένα" γύρω από την μέση τιμή. Από τις διαφορετικές κατανομές στη φύση η
κανονική κατανομή είναι η συχνότερη. Η γραφική παράσταση της κατανομής έχει σχήμα "καμπάνας",
στον οριζόντιο άξονα καταγράφονται οι τιμές της ποσότητας (π.χ. ύψος ή βάρος παιδιών, οι κατά κυβικό
αίματος τιμές των λευκών αιμοσφαιρίων κ.α.) και στον κάθετο άξονα η συχνότητα των μετρήσεων. Αυτή
η καμπύλη κατανομής ονομάζεται και ιστόγραμμα. Η καμπύλη είναι συμμετρική γύρω από τη μέγιστη
τιμή - η οποία επίσης είναι και η μέση τιμή όλων των μετρήσεων. Όσο απομακρυνόμαστε από το κέντρο
της καμπύλης τόσο μικρότερος είναι ο αριθμός των μετρήσεων.

Δ. Κάβουρας, 13 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


Ακολουθεί παράδειγμα σε Python

import matplotlib.pyplot as plt


import numpy as np
#------------------------------------------------------------
#------------------------MAIN PROGRAM------------
#------------------------------------------------------------
N=500
x=np.random.randn(N)
mu=np.mean(x)
sigma=np.std(x)
X=mu+sigma*x
plt.hist(X,10,edgecolor='black',linewidth=1.2)
x2 = np.arange(mu-4*sigma , mu+4*sigma, sigma/100)#generate
x-axis of of f
f = 0.25*N*np.exp(-(x2-mu)**2/2/sigma**2)
plt.plot(x2,f,'r-');plt.grid()
plt.xlabel('no of bins');plt.ylabel('frequency')
plt.title('histogram with normal distribution shape')
plt.show()

1.2.2. Η μέση τιμή (mean value)

Η μέση τιμή (mean value) είναι ο αριθμητικός μέσος όρος όλων των τιμών των δεδομένων και όσο
μεγαλύτερος είναι ο αριθμός των στοιχείων του δείγματος δεδομένων τόσο καλύτερα θεωρείται ότι
αντιπροσωπεύει την πραγματική μέση τιμή όλων των δεδομένων. Υπολογίζεται αθροίζοντας όλες τις
τιμές των στοιχείων των δεδομένων και διαιρώντας με τον συνολικό αριθμό των δεδομένων όπως στη
σχέση 2.1:

Μέση τιμή= ή (1.1)

Παράδειγμα σε Python

Σε ξεχωριστό αρχείο στον ίδιο φάκελο με το κυρίως πρόγραμμα του project βάζουμε το ακόλουθο module
moduleUtils
import time
def cls():
print(chr(27) + "[2J")
def pause():
input("PRESS ENTER TO CONTINUE.")
# ------------------------------------------------------------

Δ. Κάβουρας, 14 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


def tic():
t1=float(time.time());
return (t1)
#------------------------------------------------------------
def toc(t1,s):
t2=float(time.time());dt=t2-t1;
s=' time taken: '
print("%s %e" % (s,dt) )

import numpy as np
import moduleUtils as U
#------------------------------------------------------------
#------------------------MAIN PROGRAM------------
#------------------------------------------------------------
U.cls()
PRESS ENTER TO CONTINUE.
t1=U.tic() mean value= 12.38
dat = [7,17,17,18,15,16,14,16,12,11,9,9,9,13,7,8] time taken: 3.585343e+00
meanValue=np.mean(dat)
U.pause()
print("mean value= %4.2f" % meanValue)
U.toc(t1,'time taken')

1.2.3. Διακύμανση (variance) και τυπική απόκλιση (standard deviation)

Η διακύμανση και η τυπική απόκλιση περιγράφουν τον βαθμό διασποράς των δεδομένων και είναι
χρήσιμες στατιστικές παράμετροι που μαζί με την μέση τιμή περιγράφουν συνοπτικά τα δεδομένα.

Διακύμανση: (1.2)

Τυπική απόκλιση: (1.3)

δηλαδή είναι η τετραγωνική ρίζα της διακύμανσης. Η τυπική απόκλιση είναι περισσότερο χρήσιμη και
δείχνει πόσο καλά η μέση τιμή του δείγματος δεδομένων αντιπροσωπεύει τα δεδομένα. Συνήθως η
έκφραση:

μ ± 2σ (1.4)

Δ. Κάβουρας, 15 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


είναι αντιπροσωπευτική του δείγματος δεδομένων και χρησιμοποιείται για να μας υποδείχνει τη μέση
τιμή και τη διασπορά των δεδομένων.

Παράδειγμα σε Python

import numpy as np
import moduleUtils as U
#--------- Main Program -------------------------------
U.cls()
dat = [7,17,17,18,15,16,14,16,12,11,9,9,9,13,7,8]
standardDeviation=np.std(dat,ddof=1)#ddof=1 --> divide by N-1 standard deviation= 3.86
print("standard deviation= %4.2f" % standardDeviation)

1.2.4. Η διάμεσος (median)


Η διάμεσος ενός δείγματος δεδομένων είναι η μεσαία κατά μέγεθος τιμή των δεδομένων. Όταν το
δείγμα δεδομένων έχει κανονική κατανομή τότε η μέση και διάμεσος τιμές συμπίπτουν. Είναι φανερό ότι
για να ευρεθεί η διάμεσος πρέπει πρώτα οι τιμές των δεδομένων να διαταχθούν κατά αύξοντα μέγεθος.
Αν δεν υπάρχει ακριβώς διάμεσος, δηλαδή ο αριθμός των δεδομένων είναι άρτιος, τότε ως διάμεσος
λαμβάνεται η μέση τιμή των 2 μεσαίων τιμών.
Παράδειγμα σε Python
import numpy as np sorted data: 7 7 8 9 9 9 11 12 13 14 15 16 16 17 17 18
import moduleUtils as U
#--------- Main Program ------------------------------- median value: 12.50
U.cls()

dat = [7,17,17,18,15,16,14,16,12,11,9,9,9,13,7,8]
sortedData=np.sort(dat,kind='quicksort')
medianValue=np.median(dat)#
print('sorted data:',end='');print(sortedData)
print("median= %4.2f" % medianValue)

1.2.5. Η επικρατούσα τιμή (mode)


Η επικρατούσα τιμή είναι η τιμή με την μεγαλύτερη συχνότητα ή αλλιώς η τιμή του περισσότερο
συχνού στοιχείου του δείγματος δεδομένων. Σε τελείως κανονική κατανομή η επικρατούσα πρέπει να
είναι ταυτόσημη με την μέση τιμή, που αναδεικνύεται και από την κορυφή της καμπύλης κατανομής.

Παράδειγμα σε Python

import numpy as np sorted data:[ 7 7 8 9 9 9 11 12 13 14 15 16 16


import moduleUtils as U 17 17 18]
from scipy import stats mode= 9
#--------- Main Program -------------------------------
U.cls()
dat = [7,17,17,18,15,16,14,16,12,11,9,9,9,13,7,8]
sortedData=np.sort(dat,kind='quicksort')

Δ. Κάβουρας, 16 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


modeValue=stats.mode(dat, keepdims=False)
print('sorted data:',end='');print(sortedData)
print("mode= %4d" % modeValue[0])

1.2.6. Skewness
Η Skewness υπολογίζει την ασυμμετρία της κατανομής των δεδομένων

(1.5)
Υπολογισμός Skewness σε Python

import numpy as np Skewness= -0.02218461


import moduleUtils as U
from scipy import stats
#--------- Main Program -------------------------------
U.cls()

dat = [7,17,17,18,15,16,14,16,12,11,9,9,9,13,7,8]
Skew=stats.skew(dat)
print("skewness= %4.8f" % Skew)

1.2.7. Kurtosis

(1.6)
Kurtosis υπολογίζει την οξύτητα της κατανομής των δεδομένων.

import numpy as np kurtosis= 1.51637340


import moduleUtils as U
from scipy import stats
#--------- Main Program -------------------------------
U.cls()

dat = [7,17,17,18,15,16,14,16,12,11,9,9,9,13,7,8]
Kurt=stats.kurtosis(dat, fisher=False)
print("kurtosis= %4.8f" % Kurt)

Δ. Κάβουρας, 17 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


Παράδειγμα
Τέλος δίνεται ένα συνολικό πρόγραμμα, όπου

(1) δίνονται 2 κατηγορίες δεδομένων, με μετρήσεις από ιστοπαθολογικές εικόνες χαμηλού βαθμού
κακοήθειας της θυρεοειδούς (12 εικόνες με 4 μετρήσεις παραμέτρων από κάθε εικόνα) και
υψηλού βαθμού κακοήθειας θυρεοειδούς (8 εικόνες με 4 μετρήσεις ίδιων παραμέτρων από κάθε
εικόνα)
(2) Σχεδιάζονται διαγράμματα Boxplots για την σύγκριση διασποράς τιμών κάθε παραμέτρου και
στις 2 κατηγορίες
(3) Σχεδιάζονται διαγράμματα διασποράς (scatter-diagrams) από συνδυασμούς παραμέτρων ανά δύο
για την εκτίμηση της μεταξύ των 2 κατηγοριών απόστασης.
Ακολουθεί το πρόγραμμα σε Python

import numpy as np
import moduleUtils as U x:
[array([101.4059, 96.417234, 101.77324, 105.82766, 96.609977, 95.732426,
from scipy import stats 106.46485, 100.84354, 94.75737, 101.40363, 95.011338, 107.06349],
import matplotlib.pyplot as plt dtype=object)
array([133.73923, 159.41723, 153.46939, 137.89569, 148.67574, 135.03175,
#----------------------------------------------- 118.24717, 149.0], dtype=object)]
-------------
#------------------------MAIN
PROGRAM------------
#-----------------------------------------------
-------------
#--------- Main Program -------------------------------

def loadData():
featsNames = ['mean', 'standard Deviation', 'skewness', 'kurtosis']
class1 = [ # microscopy images of thyroid HighGrade Ca
[1.0140590e+002, 2.4890069e+001, -2.3645176e+000, 1.1033644e+001],
[9.6417234e+001, 1.1293169e+001, 6.3933109e-001, 3.5952700e+000],
[1.0177324e+002, 1.3331575e+001, 3.4772438e-002, 2.4784380e+000],
[1.0582766e+002, 3.2911649e+001, -2.5222501e+000, 8.5839875e+000],
[9.6609977e+001, 2.6311018e+001, -2.5111029e+000, 1.0150649e+001], x:
[array([24.890069, 11.293169, 13.331575, 32.911649, 26.311018, 34.333446,
[9.5732426e+001, 3.4333446e+001, -2.1224260e+000, 6.4232475e+000], 26.878146, 25.160086, 15.050259, 32.966146, 36.435665, 22.804613],
[1.0646485e+002, 2.6878146e+001, -3.1294014e+000, 1.2943794e+001], dtype=object)
array([27.821304, 13.909101, 15.239869, 19.026012, 17.888584, 30.651488,
[1.0084354e+002, 2.5160086e+001, -2.4882562e+000, 1.0920485e+001], 17.126186, 12.495804], dtype=object)]
[9.4757370e+001, 1.5050259e+001, -1.9093679e+000, 1.5656505e+001],
[1.0140363e+002, 3.2966146e+001, -2.3164752e+000, 7.6172933e+000],
[9.5011338e+001, 3.6435665e+001, -1.8316196e+000, 5.4124896e+000],
[1.0706349e+002, 2.2804613e+001, -3.4189256e+000, 1.6718555e+001]
]
class2 = [ # microscopy images of thyroid LowGrade Ca
[1.3373923e+002, 2.7821304e+001, -1.5974506e+000, 9.6610652e+000],
[1.5941723e+002, 1.3909101e+001, -3.5988430e-001, 2.8787984e+000],
[1.5346939e+002, 1.5239869e+001, -5.0287213e-001, 2.7473837e+000],
[1.3789569e+002, 1.9026012e+001, -1.4600956e+000, 1.4682993e+001],

Δ. Κάβουρας, 18 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


[1.4867574e+002, 1.7888584e+001, 2.5696968e-001, 2.6647207e+000],
[1.3503175e+002, 3.0651488e+001, -3.1318618e+000, 1.4742417e+001],
[1.1824717e+002, 1.7126186e+001, -6.2786366e-002, 8.7437947e+000],
[1.4900000e+002, 1.2495804e+001, 6.3691434e-002, 2.9861096e+000]
]
return (class1, class2, featsNames)

# ------------------ main program ----------------------------------

U.cls()
(class1, class2, fNames) = loadData()
N1patts = np.size(class1, 0) x:
N2patts = np.size(class2, 0) [array([-2.3645176, 0.63933109, 0.034772438, -2.5222501, -2.5111029,
nFeats = np.size(class1, 1) -2.122426, -3.1294014, -2.4882562, -1.9093679, -2.3164752,
-1.8316196, -3.4189256], dtype=object)
print(N1patts, ' ', N2patts, ' ', nFeats) array([-1.5974506, -0.3598843, -0.50287213, -1.4600956, 0.25696968,
-3.1318618, -0.062786366, 0.063691434], dtype=object)]
print('-----------------class1---------------')
class1 = np.asarray(class1,dtype=object)
class2 = np.asarray(class2,dtype=object)
# BOX-PLOTS
# https://matplotlib.org/3.1.3/api/_as_gen/matplotlib.pyplot.boxplot.html

for j in range(nFeats):
x = [class1[:, j], class2[:, j]]
x=np.asarray(x,dtype=object)
print("x: ");print(x)
plt.figure()
plt.boxplot(x, labels=('Low Grade', 'High Grade'))
plt.title(fNames[j])
plt.grid() x:
plt.show() [array([11.033644, 3.59527, 2.478438, 8.5839875, 10.150649, 6.4232475,
12.943794, 10.920485, 15.656505, 7.6172933, 5.4124896, 16.718555],
for j in range(nFeats - 1): dtype=object)
plt.figure() array([9.6610652, 2.8787984, 2.7473837, 14.682993, 2.6647207, 14.742417,
8.7437947, 2.9861096], dtype=object)]
dat1 = class1[:, j]
dat2 = class1[:, j + 1]
plt.plot(dat1, dat2, 'o', color='b')
dat1 = class2[:, j]
dat2 = class2[:, j + 1]
plt.plot(dat1, dat2, 'x', color='r')
plt.grid()
plt.legend(('Low Grade', 'High Grade'), loc='best')
plt.xlabel(fNames[j])
plt.ylabel(fNames[j + 1])
plt.title('Scatter diagram of : ' + fNames[j] + ' Vs ' + fNames[j + 1])
plt.show()

Δ. Κάβουρας, 19 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


Ασκήσεις για το σπίτι

Κώδικας:
Έστω οι τιμές 4 παραμέτρων 2 κατηγοριών ιστοπαθολογικής εξέτασης για καρκίνο μήτρας (επιβιώσαντες
/ μη επιβιώσαντες 5ετίας). Ζητείται να ευρεθεί αν υπάρχουν παράμετροι ή συνδυασμός παραμέτρων ανά
δύο που να διαχωρίζουν καλύτερα τις 2 αυτές κατηγορίες, με οπτική εκτίμηση του αποτελέσματος.

Δ. Κάβουρας, 20 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


Παρατήρηση: Για τους συνδυασμούς παραμέτρων πρέπει να βρείτε όλους τους δυνατούς συνδυασμούς
των παραμέτρων ανά 2, (1-2, 1-3, 1-4, 2-3, 2-4, 3-4) και να σχεδιάσετε τα scatter diagrams

def loadData1():
featsNames=['mean','standard Deviation','skewness','kurtosis']
class1=[#Cervical cancer 5-years Non-survivors
[91.13, 22.355, 0.027635, 2.8102],
[90.575, 29.5, 0.58353, 2.5318],
[92.832, 28.751, 0.33067, 2.7629],
[88.181, 28.642, 0.27494, 2.4152],
[90.709, 30.939, 0.37855, 2.4851],
[104.05, 35.792, 0.52814, 2.7435],
[98.342, 36.193, 0.35172, 2.2441],
[99.269, 26.342, 0.1492, 2.5312],
[94.845, 31.323, 0.29206, 2.4237],
[161.65, 17.314, 0.54258, 2.4952],
[139.76, 19.887, 0.67346, 2.5673],
[146.79, 20.749, 0.59332, 2.5536],
[135.71, 21.629, 0.7011, 2.6016],
[132.78, 19.188, 0.68376, 2.6227],
[144.19, 19.955, 0.56923, 2.5648],
[137, 22.193, 0.62745, 2.5139],
[130.64, 20.973, 0.75887, 2.6656],
[138.88, 20.66, 0.63738, 2.7213],
[131.78, 22.323, 0.74514, 2.6985],
[132.77, 22.599, 0.7028, 2.6367],
[138.33, 21.06, 0.51725, 2.7121],
[142.46, 26.016, 0.57662, 2.4987],
[158.37, 22.355, 0.46325, 2.5201],
[132.62, 22.586, 0.72381, 2.7383],
[154.72, 21.404, 0.54958, 2.4043],
[140.22, 26.547, 0.54553, 2.4363],
[140.45, 25.769, 0.47033, 2.5039],
[138.71, 25.652, 0.58671, 2.5203],
[138.46, 25.098, 0.59268, 2.5743],
]
class2 =[#Cervical cancer 5-years survivors
[131.35, 38.58, 0.23894, 2.9015],
[164.11, 21.972, -0.0013328, 2.7228],
[150.05, 22.108, 0.085606, 2.8163],
[169.52, 22.394, 0.10823, 2.6467],
[159.44, 23.22, -0.0020959, 2.585],
[145.39, 16.517, 0.12471, 2.3972],
[108.82, 24.038, 0.2161, 2.3497],
[127.11, 22.186, 0.18473, 2.2985],
[130.45, 17.907, 0.42612, 2.5721],
[118.8 , 25.907 , 0.29538 , 2.6881],
[138.8 , 25.896 , 0.36752 , 2.5331],
[151.18, 18.881, 0.41188, 2.8039],

Δ. Κάβουρας, 21 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη


[156.28, 24.799, 0.13559, 2.4917],
[153.32, 29.878, 0.11923, 2.3113],
[140.85, 27.791, 0.27059, 2.3632],
[140.92, 29.667, 0.16173, 2.3855],
[137.01, 29.869, 0.18743, 2.397],
[147.71, 28.388, 0.054598, 2.4727],
[113.36, 29.952, 0.39364, 2.5637],
[123.92, 30.482, 0.23871, 2.4988],
[136.87, 23.505, 0.22786, 2.4613],
[136.36, 24.655, 0.19578, 2.4035],
[130.26, 27.7, 0.17439, 2.505],
[143.38, 26.278, 0.10052, 2.4845],
[138.7 , 26.622 , 0.31597, 2.3737],
[149.64, 24.757, 0.20055, 2.3103],

return (class1,class2,featsNames)

Δ. Κάβουρας, 22 Μηχανική Μάθηση: Στατιστική με Python, 1η Διάλεξη

You might also like