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.