ML - Memahami Data dengan Statistik
pengantar
Saat mengerjakan proyek pembelajaran mesin, biasanya kami mengabaikan dua bagian terpenting yang disebut mathematics dan data. Itu karena, kami tahu bahwa ML adalah pendekatan berdasarkan data dan model ML kami hanya akan memberikan hasil yang baik atau seburuk data yang kami berikan padanya.
Pada bab sebelumnya, kita membahas bagaimana kita dapat mengupload data CSV ke dalam proyek ML kita, tetapi alangkah baiknya untuk memahami data tersebut sebelum menguploadnya. Kami dapat memahami data dengan dua cara, dengan statistik dan dengan visualisasi.
Dalam bab ini, dengan bantuan resep Python berikut, kita akan memahami data ML dengan statistik.
Melihat Data Mentah
Resep pertama adalah melihat data mentah Anda. Penting untuk melihat data mentah karena pemahaman yang akan kita dapatkan setelah melihat data mentah akan meningkatkan peluang kita untuk melakukan pra-pemrosesan serta penanganan data untuk proyek ML dengan lebih baik.
Berikut ini adalah skrip Python yang diimplementasikan dengan menggunakan fungsi head () dari Pandas DataFrame pada dataset diabetes Pima Indians untuk melihat 50 baris pertama untuk mendapatkan pemahaman yang lebih baik tentangnya -
Contoh
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
print(data.head(50))
Keluaran
preg plas pres skin test mass pedi age class
0 6 148 72 35 0 33.6 0.627 50 1
1 1 85 66 29 0 26.6 0.351 31 0
2 8 183 64 0 0 23.3 0.672 32 1
3 1 89 66 23 94 28.1 0.167 21 0
4 0 137 40 35 168 43.1 2.288 33 1
5 5 116 74 0 0 25.6 0.201 30 0
6 3 78 50 32 88 31.0 0.248 26 1
7 10 115 0 0 0 35.3 0.134 29 0
8 2 197 70 45 543 30.5 0.158 53 1
9 8 125 96 0 0 0.0 0.232 54 1
10 4 110 92 0 0 37.6 0.191 30 0
11 10 168 74 0 0 38.0 0.537 34 1
12 10 139 80 0 0 27.1 1.441 57 0
13 1 189 60 23 846 30.1 0.398 59 1
14 5 166 72 19 175 25.8 0.587 51 1
15 7 100 0 0 0 30.0 0.484 32 1
16 0 118 84 47 230 45.8 0.551 31 1
17 7 107 74 0 0 29.6 0.254 31 1
18 1 103 30 38 83 43.3 0.183 33 0
19 1 115 70 30 96 34.6 0.529 32 1
20 3 126 88 41 235 39.3 0.704 27 0
21 8 99 84 0 0 35.4 0.388 50 0
22 7 196 90 0 0 39.8 0.451 41 1
23 9 119 80 35 0 29.0 0.263 29 1
24 11 143 94 33 146 36.6 0.254 51 1
25 10 125 70 26 115 31.1 0.205 41 1
26 7 147 76 0 0 39.4 0.257 43 1
27 1 97 66 15 140 23.2 0.487 22 0
28 13 145 82 19 110 22.2 0.245 57 0
29 5 117 92 0 0 34.1 0.337 38 0
30 5 109 75 26 0 36.0 0.546 60 0
31 3 158 76 36 245 31.6 0.851 28 1
32 3 88 58 11 54 24.8 0.267 22 0
33 6 92 92 0 0 19.9 0.188 28 0
34 10 122 78 31 0 27.6 0.512 45 0
35 4 103 60 33 192 24.0 0.966 33 0
36 11 138 76 0 0 33.2 0.420 35 0
37 9 102 76 37 0 32.9 0.665 46 1
38 2 90 68 42 0 38.2 0.503 27 1
39 4 111 72 47 207 37.1 1.390 56 1
40 3 180 64 25 70 34.0 0.271 26 0
41 7 133 84 0 0 40.2 0.696 37 0
42 7 106 92 18 0 22.7 0.235 48 0
43 9 171 110 24 240 45.4 0.721 54 1
44 7 159 64 0 0 27.4 0.294 40 0
45 0 180 66 39 0 42.0 1.893 25 1
46 1 146 56 0 0 29.7 0.564 29 0
47 2 71 70 27 0 28.0 0.586 22 0
48 7 103 66 32 0 39.1 0.344 31 1
49 7 105 0 0 0 0.0 0.305 24 0
Kita dapat mengamati dari keluaran di atas bahwa kolom pertama memberikan nomor baris yang dapat sangat berguna untuk mereferensikan pengamatan tertentu.
Memeriksa Dimensi Data
Itu selalu merupakan praktik yang baik untuk mengetahui berapa banyak data, dalam hal baris dan kolom, yang kami miliki untuk proyek ML kami. Alasan di baliknya adalah -
Misalkan jika kita memiliki terlalu banyak baris dan kolom maka akan membutuhkan waktu lama untuk menjalankan algoritma dan melatih modelnya.
Misalkan jika kita memiliki terlalu sedikit baris dan kolom maka kita tidak akan memiliki cukup data untuk melatih model dengan baik.
Berikut ini adalah skrip Python yang diimplementasikan dengan mencetak properti bentuk pada Pandas Data Frame. Kami akan menerapkannya pada kumpulan data iris untuk mendapatkan jumlah baris dan kolom di dalamnya.
Contoh
from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.shape)
Keluaran
(150, 4)
Dari output terlihat bahwa data iris mata yang akan digunakan memiliki 150 baris dan 4 kolom.
Mendapatkan Jenis Data Setiap Atribut
Ini adalah praktik baik lainnya untuk mengetahui tipe data dari setiap atribut. Alasan di baliknya adalah, sesuai dengan kebutuhan, terkadang kami mungkin perlu mengonversi satu tipe data ke tipe lainnya. Misalnya, kita mungkin perlu mengubah string menjadi floating point atau int untuk mewakili nilai kategorial atau ordinal. Kita bisa mendapatkan gambaran tentang tipe data atribut dengan melihat data mentah, tetapi cara lain adalah dengan menggunakan properti dtypes dari Pandas DataFrame. Dengan bantuan properti dtypes kita dapat mengkategorikan setiap tipe data atribut. Ini dapat dipahami dengan bantuan mengikuti skrip Python -
Contoh
from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.dtypes)
Keluaran
sepal_length float64
sepal_width float64
petal_length float64
petal_width float64
dtype: object
Dari keluaran di atas, kita dapat dengan mudah mendapatkan tipe data dari setiap atribut.
Ringkasan Statistik Data
Kita telah membahas resep Python untuk mendapatkan bentuk yaitu jumlah baris dan kolom, dari data tetapi sering kali kita perlu meninjau ringkasan dari bentuk data tersebut. Ini dapat dilakukan dengan bantuan fungsi description () dari Pandas DataFrame yang selanjutnya menyediakan 8 properti statistik berikut dari setiap & setiap atribut data -
- Count
- Mean
- Standar Deviasi
- Nilai Minimum
- Nilai maksimum
- 25%
- Median yaitu 50%
- 75%
Contoh
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
print(data.shape)
print(data.describe())
Keluaran
(768, 9)
preg plas pres skin test mass pedi age class
count 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00
mean 3.85 120.89 69.11 20.54 79.80 31.99 0.47 33.24 0.35
std 3.37 31.97 19.36 15.95 115.24 7.88 0.33 11.76 0.48
min 0.00 0.00 0.00 0.00 0.00 0.00 0.08 21.00 0.00
25% 1.00 99.00 62.00 0.00 0.00 27.30 0.24 24.00 0.00
50% 3.00 117.00 72.00 23.00 30.50 32.00 0.37 29.00 0.00
75% 6.00 140.25 80.00 32.00 127.25 36.60 0.63 41.00 1.00
max 17.00 199.00 122.00 99.00 846.00 67.10 2.42 81.00 1.00
Dari keluaran di atas dapat dilihat ringkasan statistik dari data dataset Pima Indian Diabetes beserta bentuk datanya.
Meninjau Distribusi Kelas
Statistik distribusi kelas berguna dalam masalah klasifikasi dimana kita perlu mengetahui keseimbangan nilai kelas. Penting untuk mengetahui distribusi nilai kelas karena jika kita memiliki distribusi kelas yang sangat tidak seimbang, yaitu satu kelas memiliki lebih banyak pengamatan dibandingkan kelas lainnya, maka mungkin perlu penanganan khusus pada tahap persiapan data proyek ML kita. Kita bisa dengan mudah mendapatkan distribusi kelas dengan Python dengan bantuan Pandas DataFrame.
Contoh
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
count_class = data.groupby('class').size()
print(count_class)
Keluaran
Class
0 500
1 268
dtype: int64
Dari keluaran di atas terlihat dengan jelas bahwa jumlah observasi kelas 0 hampir dua kali lipat dari jumlah observasi kelas 1.
Meninjau Korelasi antara Atribut
Hubungan antara dua variabel disebut korelasi. Dalam statistik, metode yang paling umum untuk menghitung korelasi adalah Koefisien Korelasi Pearson. Itu dapat memiliki tiga nilai sebagai berikut -
Coefficient value = 1 - Ini mewakili penuh positive korelasi antar variabel.
Coefficient value = -1 - Ini mewakili penuh negative korelasi antar variabel.
Coefficient value = 0 - Ini mewakili no korelasi sama sekali antar variabel.
Ada baiknya bagi kami untuk meninjau korelasi berpasangan dari atribut dalam kumpulan data kami sebelum menggunakannya ke dalam proyek ML karena beberapa algoritme pembelajaran mesin seperti regresi linier dan regresi logistik akan berkinerja buruk jika kami memiliki atribut yang sangat berkorelasi. Dengan Python, kita dapat dengan mudah menghitung matriks korelasi atribut set data dengan bantuan fungsi corr () pada Pandas DataFrame.
Contoh
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
correlations = data.corr(method='pearson')
print(correlations)
Keluaran
preg plas pres skin test mass pedi age class
preg 1.00 0.13 0.14 -0.08 -0.07 0.02 -0.03 0.54 0.22
plas 0.13 1.00 0.15 0.06 0.33 0.22 0.14 0.26 0.47
pres 0.14 0.15 1.00 0.21 0.09 0.28 0.04 0.24 0.07
skin -0.08 0.06 0.21 1.00 0.44 0.39 0.18 -0.11 0.07
test -0.07 0.33 0.09 0.44 1.00 0.20 0.19 -0.04 0.13
mass 0.02 0.22 0.28 0.39 0.20 1.00 0.14 0.04 0.29
pedi -0.03 0.14 0.04 0.18 0.19 0.14 1.00 0.03 0.17
age 0.54 0.26 0.24 -0.11 -0.04 0.04 0.03 1.00 0.24
class 0.22 0.47 0.07 0.07 0.13 0.29 0.17 0.24 1.00
Matriks pada keluaran di atas memberikan korelasi antara semua pasangan atribut dalam dataset.
Meninjau Kemiringan Distribusi Atribut
Skewness dapat didefinisikan sebagai distribusi yang diasumsikan Gaussian tetapi tampak terdistorsi atau bergeser ke satu arah atau yang lain, atau ke kiri atau kanan. Meninjau kemiringan atribut adalah salah satu tugas penting karena alasan berikut -
Adanya skewness pada data membutuhkan koreksi pada tahap preparasi data sehingga diperoleh akurasi yang lebih dari model yang kita buat.
Sebagian besar algoritma ML mengasumsikan bahwa data memiliki distribusi Gaussian, yaitu data kurva lonceng normal.
Dengan Python, kita dapat dengan mudah menghitung kemiringan setiap atribut dengan menggunakan fungsi skew () pada Pandas DataFrame.
Contoh
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
print(data.skew())
Keluaran
preg 0.90
plas 0.17
pres -1.84
skin 0.11
test 2.27
mass -0.43
pedi 1.92
age 1.13
class 0.64
dtype: float64
Dari keluaran di atas, kemiringan positif atau negatif dapat diamati. Jika nilainya mendekati nol, maka kemiringannya berkurang.