Data pelatihan digunakan untuk memperkirakan parameter model dalam masalah pembelajaran yang diawasi. Observasi terakhir dari variabel explanatory dan variabel responnya yang sesuai terdiri dari data pelatihan. Model dapat digunakan untuk memprediksi nilai variabel respon untuk nilai-nilai variabel explanatory yang belum pernah diamati sebelumnya.
Ingat bahwa tujuan dalam masalah regresi adalah memprediksi nilai variabel respons kontinyu. Dalam bab ini, kita akan memeriksa beberapa contoh model regresi linier. Kami akan membahas data pelatihan, model, algoritma pembelajaran, dan metrik evaluasi untuk setiap pendekatan. Untuk memulai, mari kita pertimbangkan regresi linier sederhana. Regresi linear sederhana dapat digunakan untuk memodelkan hubungan linear antara satu variabel respon dan satu variabel explanatory. Regresi linear telah diterapkan pada banyak masalah ilmiah dan sosial yang penting; contoh yang akan kita pertimbangkan mungkin bukan salah satunya.
Misalkan Anda ingin tahu harga pizza. Anda mungkin hanya melihat menu. Dalam kasus pembelajaran mesin, kami akan menggunakan regresi linier sederhana, bukan untuk memprediksi harga pizza berdasarkan atribut pizza yang dapat diamati. Mari kita memodelkan hubungan antara ukuran pizza dan harganya. Pertama, kita akan menulis program dengan scikit-learn yang dapat memprediksi harga pizza yang diberikan ukurannya. Kemudian, kita akan membahas bagaimana regresi linier sederhana bekerja dan bagaimana itu dapat digeneralisasikan untuk bekerja dengan jenis masalah lainnya. Mari kita asumsikan bahwa Anda telah mencatat diameter dan harga pizza yang sebelumnya telah Anda makan di jurnal pizza Anda. Observasi ini terdiri dari data pelatihan kami:
Kita dapat memvisualisasikan data pelatihan kami dengan memplotkannya pada grafik menggunakan matplotlib:
import matplotlib.pyplot as plt
X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]
plt.figure()
plt.title('Pizza price plotted against diameter')
plt.xlabel('Diameter in inches')
plt.ylabel('Price in dollars')
plt.plot(X, y, 'k.')
plt.axis([0, 25, 0, 25])
plt.grid(True)
plt.show()
X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]
plt.figure()
plt.title('Pizza price plotted against diameter')
plt.xlabel('Diameter in inches')
plt.ylabel('Price in dollars')
plt.plot(X, y, 'k.')
plt.axis([0, 25, 0, 25])
plt.grid(True)
plt.show()
Script di atas menghasilkan grafik berikut. Diameter dari pizza diplot pada sumbu x dan harga diplot pada sumbu y.
Kita dapat melihat dari grafik data pelatihan bahwa ada hubungan positif antara diameter pizza dan harganya, yang harus dikuatkan oleh pengalaman makan pizza kita sendiri. Ketika diameter pizza meningkat, harganya juga akan meningkat. Program prediktor harga pizza berikut memodelkan hubungan ini menggunakan regresi linier. Mari kita tinjau program berikut dan diskusikan cara kerja regresi linear:
import matplotlib.pyplot as plt
X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]
plt.figure()
plt.title('Pizza price plotted against diameter')
plt.xlabel('Diameter in inches')
plt.ylabel('Price in dollars')
plt.plot(X, y, 'k.')
plt.axis([0, 25, 0, 25])
plt.grid(True)
plt.show()
from sklearn.linear_model import LinearRegression
# Training data
X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]
# Create and fit the model
model = LinearRegression()
model.fit(X, y)
print 'A 12" pizza should cost: $%.2f' % model.predict([[12]])
Regresi linear sederhana mengasumsikan bahwa hubungan linear ada diantara variabel respon dan variabel explanatory; memodelkan hubungan ini dengan permukaan linier yang disebut hyperplane. Hyperplane adalah subruang yang memiliki satu dimensi lebih kecil dari ruang ambient yang memuatnya. Dalam regresi linier sederhana, ada satu dimensi untuk variabel respon dan dimensi lain untuk variabel explanatory, membuat total dua dimensi. Hyperplane regresi, oleh karena itu, memiliki satu dimensi; hyperplane dengan satu dimensi adalah garis.X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]
plt.figure()
plt.title('Pizza price plotted against diameter')
plt.xlabel('Diameter in inches')
plt.ylabel('Price in dollars')
plt.plot(X, y, 'k.')
plt.axis([0, 25, 0, 25])
plt.grid(True)
plt.show()
from sklearn.linear_model import LinearRegression
# Training data
X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]
# Create and fit the model
model = LinearRegression()
model.fit(X, y)
print 'A 12" pizza should cost: $%.2f' % model.predict([[12]])
Kelas sklearn.linear_model.LinearRegression adalah estimator. Estimator memprediksi nilai berdasarkan data yang diamati. Dalam scikit-learn, semua estimator menerapkan metode fit() dan predict(). Metode sebelumnya digunakan untuk mempelajari parameter model, dan metode yang terakhir digunakan untuk memprediksi nilai variabel respon untuk variabel explanatory menggunakan parameter yang dipelajari. Sangat mudah untuk bereksperimen dengan model yang berbeda menggunakan scikit-learn karena semua estimator menerapkan metode fit dan predict.
Metode fit LinearRegression mempelajari parameter dari model berikut untuk regresi linier sederhana:
y adalah nilai prediksi dari variabel respon; dalam contoh ini, harga pizza yang diprediksi. x adalah variabel explanatory. Intercept term 𝞪 dan koefisien 𝞫 adalah parameter dari model yang dipelajari oleh algoritma pembelajaran. Garis yang diplot dalam gambar berikut memodelkan hubungan antara ukuran pizza dan harganya. Dengan menggunakan model ini, kita akan mengharapkan harga pizza 8 inci menjadi sekitar $ 7,33, dan harga pizza 20 inci menjadi $ 18,75.
Menggunakan data latih untuk mempelajari nilai-nilai parameter pada regresi linier sederhana yang menghasilkan model pasangan terbaik disebut ordinary least squares atau linear least squares.
Mengevaluasi kesesuaian model dengan fungsi biaya (Cost Function)
Garis regresi yang dihasilkan oleh beberapa set nilai parameter diplot dalam gambar berikut. Bagaimana kita bisa menilai parameter mana yang menghasilkan garis regresi terbaik?
Fungsi biaya, juga disebut fungsi kerugian, digunakan untuk menentukan dan mengukur kesalahan suatu model. Perbedaan antara harga yang diprediksi oleh model dan harga yang diamati dari pizza dalam set pelatihan disebut residual atau kesalahan pelatihan. Kemudian, kami akan mengevaluasi model pada serangkaian data uji yang terpisah; perbedaan antara nilai prediksi dan yang teramati dalam data pengujian disebut kesalahan prediksi (prediciton error) atau kesalahan pengujian (test error).
Residu untuk model ditunjukkan oleh garis vertikal antara titik-titik untuk contoh pelatihan dan hyperplane regresi di plot berikut:
Kita dapat menghasilkan prediktor harga pizza terbaik dengan meminimalkan jumlah residual. Model kita cocok jika nilai yang diprediksinya untuk variabel respon mendekati nilai yang diamati untuk semua contoh pelatihan. Ukuran kebugaran model ini disebut sisa jumlah fungsi biaya kuadrat (sum of squares cost function). Secara formal, fungsi ini menilai kesesuaian suatu model dengan menjumlahkan residual kuadrat untuk semua contoh pelatihan kita. Jumlah kuadrat sisa dihitung dengan rumus dalam persamaan berikut, di mana yi adalah nilai yang diamati dan f(xi) adalah nilai prediksi:
Mari hitung jumlah sisa kuadrat untuk model kami dengan menambahkan dua baris berikut ke skrip sebelumnya:
import matplotlib.pyplot as plt
X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]
plt.figure()
plt.title('Pizza price plotted against diameter')
plt.xlabel('Diameter in inches')
plt.ylabel('Price in dollars')
plt.plot(X, y, 'k.')
plt.axis([0, 25, 0, 25])
plt.grid(True)
plt.show()
from sklearn.linear_model import LinearRegression
# Training data
X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]
# Create and fit the model
model = LinearRegression()
model.fit(X, y)
print 'A 12" pizza should cost: $%.2f' % model.predict([[18]])
import numpy as np
print 'Residual sum of squares: %.2f' % np.mean((model.predict(X)- y) ** 2)
Memecahkan kuadrat terkecil biasa (Ordinary Least Square) untuk regresi linier sederhana
Pada bagian ini, kita akan bekerja melalui pemecahan kuadrat terkecil biasa untuk regresi linier sederhana. Ingat bahwa regresi linier sederhana diberikan oleh persamaan berikut:
Juga, ingat bahwa tujuan kita adalah untuk memecahkan nilai-nilai dari 𝞫 dan 𝞪 yang meminimalkan fungsi biaya. Kita akan memecahkan 𝞫 dulu. Untuk melakukannya, kita akan menghitung varians x dan covariance x dan y.
Varians adalah ukuran seberapa jauh satu set nilai tersebar. Jika semua angka dalam set sama, varians dari himpunan adalah nol. Sebuah varians kecil menunjukkan bahwa angka-angka mendekati mean dari set, sementara satu set yang mengandung angka yang jauh dari mean dan satu sama lain akan memiliki varians yang besar. Varians dapat dihitung menggunakan persamaan berikut:
Pada persamaan sebelumnya, x-mean (x ada garis di atasnya) adalah nilai rata-rata x, xi adalah nilai x untuk instance pelatihan ke-i, dan n adalah jumlah instance pelatihan. Mari menghitung varians diameter pizza di set pelatihan kita:
from __future__ import division
xbar = (6 + 8 + 10 + 14 + 18) / 5
variance = ((6 - xbar)**2 + (8 - xbar)**2 + (10 - xbar)**2 + (14 - xbar)**2 + (18 - xbar)**2) / 4
print variance
NumPy juga menyediakan metode var untuk menghitung varians. Parameter kata kunci ddof dapat digunakan untuk mengatur koreksi Bessel untuk menghitung varians sampel:xbar = (6 + 8 + 10 + 14 + 18) / 5
variance = ((6 - xbar)**2 + (8 - xbar)**2 + (10 - xbar)**2 + (14 - xbar)**2 + (18 - xbar)**2) / 4
print variance
Kovarian adalah ukuran dari seberapa banyak dua variabel berubah bersama. Jika nilai dari variabel meningkat bersama-sama, kovarian mereka positif. Jika satu variabel cenderung meningkat sementara yang lain menurun, kovarian mereka negatif. Jika tidak ada hubungan linear antara dua variabel, maka kovariannya akan sama dengan nol; variabel tidak linier berkorelasi tetapi tidak selalu independen. Kovarian dapat dihitung menggunakan rumus berikut:
Seperti halnya varians, xi adalah diameter dari contoh pelatihan ke-i, x adalah mean dari diameter, y adalah mean dari harga, yi adalah harga dari instance pelatihan ke-i, dan n adalah jumlah instance pelatihan. Mari kita menghitung kovarians diameter dan harga pizza dalam set pelatihan:
xbar = (6 + 8 + 10 + 14 + 18) / 5
ybar = (7 + 9 + 13 + 17.5 + 18) / 5
cov = ((6 - xbar) * (7 - ybar) + (8 - xbar) * (9 - ybar) + (10 - xbar) * (13 - ybar) + (14 - xbar) * (17.5 - ybar) + (18 - xbar) * (18 - ybar)) / 4
print cov
import numpy as np
print np.cov([6, 8, 10, 14, 18], [7, 9, 13, 17.5, 18])[0][1]
Sekarang kita telah menghitung varians dari variabel explanatory dan kovarians dari variabel respon dan variabel explanatory, kita dapat memecahkan 𝛽 menggunakan rumus berikut:ybar = (7 + 9 + 13 + 17.5 + 18) / 5
cov = ((6 - xbar) * (7 - ybar) + (8 - xbar) * (9 - ybar) + (10 - xbar) * (13 - ybar) + (14 - xbar) * (17.5 - ybar) + (18 - xbar) * (18 - ybar)) / 4
print cov
import numpy as np
print np.cov([6, 8, 10, 14, 18], [7, 9, 13, 17.5, 18])[0][1]
Setelah 𝛽 dipecahkan, kita bisa menyelesaikan 𝞪 menggunakan rumus berikut:
Dalam rumus sebelumnya, y-mean (y di atasnya ada garis) adalah rata-rata y dan x-mean (x di atasnya ada garis) adalah rerata x.(x-mean, y-mean) adalah koordinat dari pusat massa, titik yang harus dilalui oleh model. Kita dapat menggunakan centroid dan nilai 𝛽 untuk memecahkan 𝞪 sebagai berikut:
yrerata = ybar = (7 + 9 + 13 + 17.5 + 18) / 5 = 12.9
𝛽 = 0.976293103448276
xrerata = xbar = (6 + 8 + 10 + 14 + 18) / 5 = 11.2
jadi:
Sekarang kita telah memecahkan nilai-nilai parameter model yang meminimalkan fungsi biaya, kita dapat menghubungkan diameter pizza dan memprediksi harganya. Misalnya, pizza 11 inci diperkirakan berharga sekitar $ 12,70, dan pizza 18 inci diperkirakan berharga sekitar $ 19,54. Selamat! Anda menggunakan regresi linier sederhana untuk memprediksi harga pizza.
Alpha | Beta | x (Diameter pizza) | Harga Prediksi = Alpha + (Beta * x) |
1.96551724137931 | 0.976293103448276 | 11 | 12.7047413793103 |
1.96551724137931 | 0.976293103448276 | 12 | 13.6810344827586 |
1.96551724137931 | 0.976293103448276 | 15 | 16.6099137931034 |
1.96551724137931 | 0.976293103448276 | 18 | 19.5387931034483 |
1.96551724137931 | 0.976293103448276 | 21 | 22.4676724137931 |
Mengevaluasi Model
Kami telah menggunakan algoritma pembelajaran untuk memperkirakan parameter model dari data pelatihan. Bagaimana kita bisa menilai apakah model kita mewakili dengan baik dari hubungan yang sebenarnya? Mari kita berasumsi bahwa Anda telah menemukan halaman lain dalam jurnal pizza Anda. Kami akan menggunakan entri di halaman ini sebagai tes yang ditetapkan untuk mengukur kinerja model:
Beberapa ukuran dapat digunakan untuk menilai kemampuan prediksi model kami. Kami akan mengevaluasi prediksi harga pizza menggunakan r-squared. R-Squared mengukur seberapa baik nilai-nilai yang diamati dari variabel respon diprediksi oleh model. Lebih konkret, r-squared adalah proporsi dari varians dalam variabel respon yang dijelaskan oleh model. Skor r-squared dari satu menunjukkan bahwa variabel respon dapat diprediksi tanpa kesalahan menggunakan model. Skor r-squared dari satu setengah menunjukkan bahwa setengah dari varians dalam variabel respon dapat diprediksi menggunakan model. Ada beberapa metode untuk menghitung r-squaed. Dalam kasus regresi linier sederhana, r-squared sama dengan kuadrat koefisien korelasi momen produk Pearson, atau Pearson's r
Dengan menggunakan metode ini, r-kuadrat harus berupa bilangan positif antara nol dan satu. Metode ini intuitif; jika r-squared menjelaskan proporsi varians dalam variabel respon yang dijelaskan oleh model, itu tidak boleh lebih besar dari satu atau kurang dari nol. Metode lain, termasuk metode yang digunakan oleh scikit-learn, tidak menghitung r-squared sebagai kuadrat r Pearson, dan dapat mengembalikan r-squared negatif jika model berkinerja sangat buruk. Kami akan mengikuti metode yang digunakan oleh scikit-learn untuk menghitung r-squared untuk prediksi harga pizza kami.
Pertama, kita harus mengukur jumlah total kuadrat. yi adalah nilai yang diamati dari variabel respon untuk instance pengujian ke-i, dan ymean (y diatasnya ada tanda garis) adalah mean dari nilai-nilai yang teramati dari variabel respon:
Selanjutnya, kita harus menemukan jumlah sisa kuadrat. Ingat bahwa ini juga cost function kita.
Akhirnya, kita dapat menemukan r-squared menggunakan rumus berikut:
Skor r-squared sebesar 0,6620 menunjukkan bahwa sebagian besar varians dalam harga contoh tes yang telah dijelaskan oleh model. Sekarang, mari kita konfirmasikan perhitungan kita menggunakan scikit-learn. Metode skor LinearRegression mengembalikan nilai r-squared model, seperti yang terlihat pada contoh berikut:
from sklearn.linear_model import LinearRegression
X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]
X_test = [[8], [9], [11], [16], [12]]
y_test = [[11], [8.5], [15], [18], [11]]
model = LinearRegression()
model.fit(X, y)
print 'R-squared: %.4f' % model.score(X_test, y_test)
X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]
X_test = [[8], [9], [11], [16], [12]]
y_test = [[11], [8.5], [15], [18], [11]]
model = LinearRegression()
model.fit(X, y)
print 'R-squared: %.4f' % model.score(X_test, y_test)
---!!! SEMOGA BISA BERMANFAAT !!!----