Pembelajaran Mesin - Skala
Fitur Skala
Ketika data Anda memiliki nilai yang berbeda, dan bahkan unit pengukuran yang berbeda, akan sulit untuk membandingkannya. Apa kilogram dibandingkan dengan meter? Atau ketinggian dibandingkan dengan waktu?
Jawaban untuk masalah ini adalah penskalaan. Kita dapat menskalakan data menjadi nilai baru yang lebih mudah untuk dibandingkan.
Lihat tabel di bawah ini, ini adalah kumpulan data yang sama yang kita gunakan di bab regresi berganda , tetapi kali ini kolom volume berisi nilai dalam liter , bukan cm 3 (1,0 bukannya 1000).
File ini dimaksudkan untuk tujuan pengujian saja, Anda dapat mengunduhnya di sini: cars2.csv
Mobil | Model | Volume | Berat | CO2 |
Toyota | aygo | 1.0 | 790 | 99 |
Mitsubishi | Bintang Luar Angkasa | 1.2 | 1160 | 95 |
Skoda | Citigo | 1.0 | 929 | 95 |
Perintah | 500 | 0.9 | 865 | 90 |
Mini | cooper | 1.5 | 1140 | 105 |
VW | Ke atas! | 1.0 | 929 | 105 |
Skoda | fabia | 1.4 | 1109 | 90 |
Mercedes | Kelas | 1.5 | 1365 | 92 |
Mengarungi | Pesta | 1.5 | 1112 | 98 |
audi | A1 | 1.6 | 1150 | 99 |
Hyundai | 20 | 1.1 | 980 | 99 |
Suzuki | Cepat | 1.3 | 990 | 101 |
Mengarungi | Pesta | 1.0 | 1112 | 99 |
honda | Kewarganegaraan | 1.6 | 1252 | 94 |
Hyundai | I30 | 1.6 | 1326 | 97 |
opel | Astra | 1.6 | 1330 | 97 |
BMW | 1 | 1.6 | 1365 | 99 |
Mazda | 3 | 2.2 | 1280 | 104 |
Skoda | Cepat | 1.6 | 1119 | 104 |
Mengarungi | Fokus | 2.0 | 1328 | 105 |
Mengarungi | mondeo | 1.6 | 1584 | 94 |
opel | Lencana | 2.0 | 1428 | 99 |
Mercedes | Kelas-C | 2.1 | 1365 | 99 |
Skoda | Oktavia | 1.6 | 1415 | 99 |
Volvo | S60 | 2.0 | 1415 | 99 |
Mercedes | PKB | 1.5 | 1465 | 102 |
audi | A4 | 2.0 | 1490 | 104 |
audi | A6 | 2.0 | 1725 | 114 |
Volvo | V70 | 1.6 | 1523 | 109 |
BMW | 5 | 2.0 | 1705 | 114 |
Mercedes | Kelas-E | 2.1 | 1605 | 115 |
Volvo | XC70 | 2.0 | 1746 | 117 |
Mengarungi | B-Maks | 1.6 | 1235 | 104 |
BMW | 2 | 1.6 | 1390 | 108 |
opel | Zafira | 1.6 | 1405 | 109 |
Mercedes | SLK | 2.5 | 1395 | 120 |
Mungkin sulit untuk membandingkan volume 1.0 dengan berat 790, tetapi jika kita menskalakan keduanya menjadi nilai yang sebanding, kita dapat dengan mudah melihat seberapa banyak satu nilai dibandingkan dengan yang lain.
Ada berbagai metode untuk menskalakan data, dalam tutorial ini kita akan menggunakan metode yang disebut standarisasi.
Metode standarisasi menggunakan rumus ini:
z = (x - u) / s
Dimana z
nilai baru,
x
merupakan nilai asli,
u
merupakan mean dan s
merupakan simpangan baku.
Jika Anda mengambil kolom bobot dari kumpulan data di atas, nilai pertama adalah 790, dan nilai yang diskalakan adalah:
(790 - ) / = -2.1
Jika Anda mengambil kolom volume dari kumpulan data di atas, nilai pertama adalah 1,0, dan nilai yang diskalakan adalah:
(1.0 - ) / = -1.59
Sekarang Anda dapat membandingkan -2.1 dengan -1.59 daripada membandingkan 790 dengan 1.0.
Anda tidak harus melakukan ini secara manual, modul sklearn Python memiliki metode yang disebut StandardScaler()
yang mengembalikan objek Scaler dengan metode untuk mengubah kumpulan data.
Contoh
Skala semua nilai di kolom Berat dan Volume:
import pandas
from sklearn import linear_model
from
sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("cars2.csv")
X = df[['Weight', 'Volume']]
scaledX = scale.fit_transform(X)
print(scaledX)
Hasil:
Perhatikan bahwa dua nilai pertama adalah -2.1 dan -1.59, yang sesuai dengan perhitungan kami:
[[-2.10389253 -1.59336644] [-0.55407235 -1.07190106] [-1.52166278 -1.59336644] [-1.78973979 -1.85409913] [-0.63784641 -0.28970299] [-1.52166278 -1.59336644] [-0.76769621 -0.55043568] [ 0.3046118 -0.28970299] [-0.7551301 -0.28970299] [-0.59595938 -0.0289703 ] [-1.30803892 -1.33263375] [-1.26615189 -0.81116837] [-0.7551301 -1.59336644] [-0.16871166 -0.0289703 ] [ 0.14125238 -0.0289703 ] [ 0.15800719 -0.0289703 ] [ 0.3046118 -0.0289703 ] [-0.05142797 1.53542584] [-0.72580918 -0.0289703 ] [ 0.14962979 1.01396046] [ 1.2219378 -0.0289703 ] [ 0.5685001 1.01396046] [ 0.3046118 1.27469315] [ 0.51404696 -0.0289703 ] [ 0.51404696 1.01396046] [ 0.72348212 -0.28970299] [ 0.8281997 1.01396046] [ 1.81254495 1.01396046] [ 0.96642691 -0.0289703 ] [ 1.72877089 1.01396046] [ 1.30990057 1.27469315] [ 1.90050772 1.01396046] [-0.23991961 -0.0289703 ] [ 0.40932938 -0.0289703 ] [ 0.47215993 -0.0289703 ] [ 0.4302729 2.31762392]]
Prediksi Nilai CO2
Tugas dalam bab Regresi Berganda adalah memprediksi emisi CO2 dari mobil jika Anda hanya mengetahui berat dan volumenya.
Saat kumpulan data diskalakan, Anda harus menggunakan skala saat memprediksi nilai:
Contoh
Prediksi emisi CO2 dari mobil 1,3 liter dengan berat 2.300 kilogram:
import pandas
from sklearn import linear_model
from
sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("cars2.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
scaledX = scale.fit_transform(X)
regr = linear_model.LinearRegression()
regr.fit(scaledX, y)
scaled =
scale.transform([[2300, 1.3]])
predictedCO2 = regr.predict([scaled[0]])
print(predictedCO2)
Hasil:
[107.2087328]