Berbagi teknologi

model regresi linier

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

regresi linier

1. Bagian teoritis

regresi linier: Pada data terbatas, dengan menyesuaikan parameter, dipasang garis lurus, dan garis lurus (model) ini digunakan untuk melakukan percobaan pada data yang tidak diketahui.meramalkan

Lurusbentuk umum
y = w × x + by = w dikali x + bkamu=aku×X+B
Keadaan seluruh garis lurus diberikan oleh w dan bw dan bakuDanBMemutuskan, wwwakumenentukan garis luruslereng(yaitu, sudut kemiringan), bbBTentukan garis lurus pada sumbu Ymencegat(Mengontrol terjemahan garis lurus ke atas dan ke bawah, juga dikenal sebagaibias ).Oleh karena itu, kita hanya perlu menghitung saja wwwakuDan bbBNilai dapat menentukan garis lurus tertentu. Selanjutnya kita akan mempelajari cara mencarinya wwwakuDan bbB

Masukkan deskripsi gambar di sini

Pengaruh w dan b terhadap bentuk garis lurus

kata benda yang tepat

kata bendaDefinisi
Perlengkapan latihanKumpulan data yang digunakan untuk melatih model
set tesDataset digunakan untuk menguji kualitas model
Contoh Pelatihan/Titik Pelatihan (Contoh Pelatihan)Setiap item data dalam set pelatihan
FiturInput data ke dalam model dapat berupa nilai numerik, label kategori, nilai piksel gambar, dll.
Label Model perlu memprediksi nilai target. Untuk masalah klasifikasi, label biasanya berupa nama kelas; untuk masalah regresi, label berupa nilai kontinu.

1. Regresi linier univariat

1) Pemrosesan awal data

Mari kita pelajari regresi linier univariat terlebih dahulu. Yang disebut regresi linier univariat mengacu pada fungsi linier yang hanya memiliki satu variabel bebas, seperti: y = w ⋅ x + by = wcdot x + bkamu=akuX+BItu adalahGaris lurus univariat, hanya memiliki satu variabel masukan ukuran besarX . Garis lurus ini dapat dinyatakan pada bidang dua dimensi (sumbu horizontal adalah X dan sumbu vertikal adalah Y).

Saat kita mendapatkan sekumpulan data yang tidak terbagi, kita biasanya membagi data tersebut menjadi set pelatihan dan set pengujian. Metode pembagian yang sederhana adalah: ambil 80% sampel pertama sebagai set pelatihan, dan 20% sisanya sebagai set pelatihan. set tes.

2) Tentukan fungsi biaya

Misalkan kita sudah mengetahuinya wwwakuDan bbB, maka kita telah menentukan garis lurus, dan kita dapat menggunakan garis lurus tersebut untuk melakukan prediksi guna memudahkan penilaian terhadap nilai yang kita prediksikamudengan nilai nyatakamudi antarakesalahanBerapa banyak, kami ingin mendefinisikan *"penggaris"*, yang digunakan untuk mengukur nilai prediksi Y y'kamudengan nilai sebenarnya Y ykamu kesalahan antara.Di sini kami menggunakankesalahan kuadrat rata-ratauntuk mendefinisikanfungsi biaya

J ( w , b ) = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 J(w,b) = pecahan{1}{2m}jumlah limit_{i = 1}^m(f_{w,b}(x^{(i)}) - y^{(i)})^2J(aku,B)=2M1Saya=1M(Faku,B(X(Saya))kamu(Saya))2
Pembongkaran formula

Bahasa Indonesia: fw, b(x(i)) − y(i) f_{w,b}(x^{(i)}) - y^{(i)}Faku,B(X(Saya))kamu(Saya):di dalam contoh soal fw,b(x^{(i)})Faku,B(X(Saya))mewakili nilai yang diprediksi menggunakan model terlatih, sedangkan y(i) y^{(i)}kamu(Saya)mewakili hasil sebenarnya dari setiap sampel pelatihan, dan perbedaan antara keduanya mewakili kesalahan antara nilai yang diprediksi oleh model dan nilai sebenarnya.

Mengapa memperbaiki kesalahannya?

Di semua kumpulan sampel, setiap kesalahan bisa positif atau negatif, dan akan ada kemungkinan offset tertentu selama proses penjumlahan. Hal ini akan menyebabkan kesalahan setiap item sangat besar (seperti: -100, + 90, -25, +30), setelah dijumlahkan diperoleh nilai kecil (-5), dan akhirnya diperoleh penilaian yang salah.

1 2 m pecahan{1}{2m}2M1: Mewakili rata-rata jumlah semua kesalahan data (rata-rata ini dapat mewakili kesalahan seluruh model), dan memperoleh kesalahan kuadrat rata-rata.

Mengapa dibagi 2

Karena ketika penurunan gradien dilakukan nanti, derivasi akan membagi indeks 2 menjadi koefisien, karena untuk data dalam jumlah besar, konstanta berdampak kecil pada model. Untuk memperkenalkan rumus derivasi, bagilah dengan 2 terlebih dahulu. , untuk offset selanjutnya.

Mengetahui fungsi biaya, kita hanya perlu mencari cara untuk mengurangi biayanya. Semakin rendah biayanya, semakin dekat nilai prediksi kita dengan nilai sebenarnya.

Dengan mengamati fungsi biaya kesalahan, kita dapat melihat bahwa fungsi biaya kesalahan merupakan fungsi kuadrat, yaitu afungsi cembung, properti dari fungsi cembung adalah:Titik ekstrim merupakan titik maksimum , karena fungsi biaya adalah fungsi kuadrat yang terbuka ke atas (rumusnya dapat diperluas, dan secara intuitif Anda dapat merasakan bahwa koefisien suku kuadrat lebih besar dari 0), sehingga fungsi cembung hanya memiliki nilai minimum, dan kita hanya perlu menemukan Nilai minimum adalah nilai minimum.Untuk fungsi biaya kesalahan J ( w , b ) J(w,b)J(aku,B) , rumus pemuaiannya dapat dituliskan sebagai:
J ( w , b ) = 1 2 m ∑ i = 1 m ( ( wx ( i ) + b ) − y ( i ) ) 2 J(w,b) = pecahan{1}{2m}jumlah limit_{i = 1}^m((wx^{(i)}+b) - y^{(i)})^2J(aku,B)=2M1Saya=1M((akuX(Saya)+B)kamu(Saya))2
JJJUkurannya tergantung pada parameter wwwakuDan bbB, yang dapat diselesaikan dengan penurunan gradien. Bentuk fungsi biaya kira-kira sebagai berikut:

Masukkan deskripsi gambar di sini

3) Penurunan gradien

Gagasan tentang penurunan gradien terutama berjalanTemukan turunan parsialmetode yang berkaitan dengan biologisvariabel kontrolCaranya sangat mirip, seperti: dalam pengendalian bbBPerbarui tanpa perubahan wwwaku(Bisa dilihat bbBadalah konstanta), rumus: w ′ = w − α ∂ J ( w ) ∂ ww' = w - alpha frac{sebagian J(w)}{sebagian w}aku=akuαakuJ(aku) Menunjukkan bahwa itu telah diperbarui secara berurutan wwwaku,di dalam α alfaα mewakilikecepatan pembelajaran Digunakan untuk mewakili ukuran langkah, yang juga dapat dipahami sebagai kecepatan turun, ∂ J ( w ) ∂ w frac{sebagian J(w)}{sebagian w}akuJ(aku) mengungkapkan benar wwwakuMencari turunan parsial, kita peroleh W - JW - JKamiJ(BeratKamidan hargaJfungsi) Garis singgung pada fungsi cembung, digunakan untuk menyatakan nilai fungsi yang mengalami penurunan paling cepatarah, produk keduanya mewakiliPindahkan satu langkah ke arah penurunan nilai fungsi paling cepat .Jarak ini perlu disesuaikan dengan kumpulan data α alfaαJika terlalu besar (ukuran langkah terlalu besar) akan menyebabkan wwwakumelewati titik terendah ke titik tertinggi di sisi yang lain, sehingga tidak pernah mendekati titik minimum, jika α alfaαJika terlalu kecil (ukuran langkahnya terlalu kecil), akan menyebabkan wwwakuIni menjadi semakin lambat saat mendekati nilai minimum, sehingga memakan biaya komputasi.


kecepatan pembelajaran ( α alfaα) metode penyesuaian

  1. Tetapkan yang lebih kecil terlebih dahulu α alfaα Seperti: 0,001.

  2. Kemudian meningkat 10 kali lipat setiap kali, hingga maksimal 1.

  3. Setelah ditentukan nilai tertentu, seperti: 0,01.

  4. Kemudian lakukan 3 kali pengolahan, seperti : 0,01 × 3 = 0,03, 0,03 × 3 = 0,09 0,01 dikali 3 = 0,03, 0,03 dikali 3 = 0,090.01×3=0.03,0.03×3=0.09 (Tujuannya adalah untuk mempercepat konvergensi).


Proses penyelesaian turunan parsial (mencari arah penurunan gradien):

  • mengemis ∂ J ( w ) ∂ w frac{sebagian J(w)}{sebagian w}akuJ(aku) :

    ∂ J ( w ) ∂ w frac{sebagian J(w)}{sebagian w}akuJ(aku) = ∂ ∂ w 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 pecahan{sebagian}{sebagian w}pecahan{1}{2m}jumlah limit_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})^2aku2M1Saya=1M(Faku,B(X(Saya))kamu(Saya))2

    ​ = ∂ ∂ w 1 2 m ∑ i = 1 mwx ( i ) − y ( i ) ) 2 frac{sebagian}{sebagian w}frac{1}{2m}sumlimits_{i = 1}^{m}wx^{(i)} - y^{(i)})^2aku2M1Saya=1MakuX(Saya)kamu(Saya))2

    ​ = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) ⋅ 2 x ( i ) pecahan{1}{2m}jumlah limit_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})cdot2x^{(i)}2M1Saya=1M(Faku,B(X(Saya))kamu(Saya))2X(Saya)

    ​ = 1 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) x ( i ) pecahan{1}{m}jumlah limit_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})x^{(i)}M1Saya=1M(Faku,B(X(Saya))kamu(Saya))X(Saya)

  • mengemis ∂ J ( w ) ∂ b frac{sebagian J(w)}{sebagian b}BJ(aku) :

    ∂ J ( w ) ∂ b frac{sebagian J(w)}{sebagian b}BJ(aku) = ∂ ∂ b 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 pecahan{sebagian}{sebagian b}pecahan{1}{2m}jumlah limit_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})^2B2M1Saya=1M(Faku,B(X(Saya))kamu(Saya))2

    ​ = ∂ ∂ b 1 2 m ∑ i = 1 mwx ( i ) − y ( i ) ) 2 frac{sebagian}{sebagian b}frac{1}{2m}sumlimits_{i = 1}^{m}wx^{(i)} - y^{(i)})^2B2M1Saya=1MakuX(Saya)kamu(Saya))2

    = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) ⋅ 2 pecahan{1}{2m}jumlah limit_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})cdot22M1Saya=1M(Faku,B(X(Saya))kamu(Saya))2

    ​ = 1 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) pecahan{1}{m}jumlah limit_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})M1Saya=1M(Faku,B(X(Saya))kamu(Saya))

Temukan yang spesifik melalui iterasi loop wwwakunilai dengan bbBnilai:

sementara ( ) : sementara():akuHaiakuBahasa Inggris:():

w ∗ = w − α ∂ ∂ w J ( w , b ) w^* = w - alpha frac{sebagian}{sebagian w}J(w,b)aku=akuαakuJ(aku,B)

b ∗ = b − α ∂ ∂ b J ( w , b ) b^* = b - alpha frac{sebagian}{sebagian b}J(w,b)B=BαBJ(aku,B)

l = l ∗ l = l^*aku=aku

b = b∗ b = b^*B=B

Pada awalnya, kita menilai w dan b secara acak, lalu melakukan iterasi. Kita dapat mengatur penurunan gradien agar keluar ketika kesalahan kurang dari ambang batas tertentu, atau menyesuaikan jumlah iterasi melalui langkah-langkah terbatas, kita bisa mendapatkan yang lebih ideal wwwakujumlah nilai bbBnilai.

2. Regresi linier multivariabel

Regresi linier multivariabel memperluas dimensi menjadi tiga dimensi dan bahkan keadaan multidimensi, seperti y = w1,x1 + w2,x2 + b = w1,x1 + w2,x2 + bkamu=aku1X1+aku2X2+B dapat dipahami sebagaiXSumbu dankamuSumbunya adalah x 1 dan x 2 x_1 dan x_2X1DanX2 Bahasa Indonesia: ZSumbunya adalah Y ykamu, ini adalah keadaan tiga dimensi. Setiap sampel pelatihan adalah sebuah titik dalam ruang tiga dimensi. Penting untuk menemukan garis lurus yang sesuai agar sesuai dengan titik sampel dalam ruang tiga dimensi.

Metode: Untuk setiap variabel secara terpisah ( w 1 , w 2 , … , wn , b w_1,w_2,titik,w_n,baku1,aku2,,akuN,B) untuk pemrosesan penurunan gradien

Poin utama: Untuk regresi linier multivariabel, rentang nilai dari nilai fitur yang berbeda berbeda-beda, seperti: rentang nilai fitur usia: 0 0 0 ~ 100 100 100, meliputi wilayah: 0 meter persegi 0m^20M2 ~ 10.000 meter persegi 10.000 meter persegi10000M2 , mungkin juga adaSampel yang aneh, keberadaan data sampel tunggal akan menyebabkan waktu pelatihan bertambah, dan juga dapat menyebabkan kegagalan konvergensi. Oleh karena itu, bila terdapat data sampel tunggal, maka perlu dilakukan pra-pemrosesan data sebelum pelatihan.Dinormalisasi ; Sebaliknya, bila tidak ada data sampel tunggal maka normalisasi tidak perlu dilakukan.Untuk mengatasi masalah ini, kita perlu melakukanFitur diskalakan (dinormalisasi)

1) Pemrosesan awal data

Pemrosesan normalisasi data

menyelesaikanNormalisasi dataAda tiga metode:

  1. Sama seperti membagi dengan nilai maksimum:

    Semua nilai pada setiap fitur dibagi dengan nilai maksimal pada fitur tersebut.

  2. Normalisasi rata-rata:

    Kurangi nilai setiap fitur dari nilai fitur tersebutberarti, lalu dibagi dengan selisih antara nilai maksimum dan minimum fitur tersebut.

  3. Normalisasi skor Z:

    Hitung setiap fiturdeviasi standarDanberarti

    Kurangi nilai setiap fitur dari semua nilai fitur tersebutnilai rata-rata, lalu dibagi berdasarkan fiturnyaberarti

Jika normalisasi tidak dilakukan maka fungsi biaya akan berubah karena adanya perbedaan besar nilai fitur yang berbeda pada vektor fitur. "datar" .Dengan cara ini, saat melakukan penurunan gradien, arah gradien akan menyimpang dari arah nilai minimum, dan akan sangat jauh.jalan memutar, yang akan membuat waktu pelatihan menjadi terlalu lama.

Setelah normalisasi, fungsi tujuan akan menampilkan perbandingan "bulat", sehingga kecepatan latihan dipercepat dan banyak jalan memutar dapat dihindari.

Manfaat normalisasi data:

  1. Setelah normalisasiMempercepat penurunan gradien untuk menemukan solusi optimal, yaitu mempercepat konvergensi jaringan pelatihan.
  2. Normalisasi berpotensi meningkatkan akurasi.
2) Fungsi biaya (sama dengan fungsi biaya pada regresi linier univariat)

J ( w , b ) = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 J(w,b) = pecahan{1}{2m}jumlah limit_{i = 1}^m(f_{w,b}(x^{(i)}) - y^{(i)})^2J(aku,B)=2M1Saya=1M(Faku,B(X(Saya))kamu(Saya))2

3) Penurunan gradien

Penurunan gradien untuk regresi linier berganda

w 1 = W 1 − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) x 1 ( i ) w_1 = W_1 - alfa pecahan{1}{m}jumlah limit_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})x_1^{(i)}aku1=Kami1αM1Saya=1M(Faku ,BX (Saya)kamu(Saya))X1(Saya)

⋮ titik-titik

Bahasa Indonesia: wn = W n − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) xn ( i ) w_n = W_n - alfa pecahan{1}{m}jumlah limit_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})x_n^{(i)}akuN=KamiNαM1Saya=1M(Faku ,BX (Saya)kamu(Saya))XN(Saya)

b = b − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) b = b - alfa pecahan{1}{m}jumlah limit_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})B=BαM1Saya=1M(Faku ,BX (Saya)kamu(Saya))

menjelaskan: w 1 ⋯ wn w_1cdots w_naku1akuN mewakili koefisien setiap variabel, dan b mewakili suku konstan dari fungsi linier.

3. Persamaan normal

1) Pemrosesan awal data

Menghilangkan...

2) Fungsi biaya

Derivasi matematika:

J = 1 2 m ∑ i = 1 m ( θ ⃗ ix ⃗ i − yi ) 2 J = pecahan{1}{2m}jumlah limit_{i = 1}^{m}(vek{theta}_i vek{x}_i - y_i)^2J=2M1Saya=1M(θ SayaX SayakamuSaya)2

​ = 1 2 m ∣ ∣ θ ⃗ x ⃗ − y ∣ ∣ 2 pecahan{1}{2m}||vek{theta} vek{x} - y||^22M1∣∣θ X kamu2

​ = 1 2 m ( θ ⃗ x ⃗ − y ) T ( θ ⃗ x ⃗ − y ) pecahan{1}{2m}(vek{theta} vek{x} - y)^T(vek{theta} vek{x} - y)2M1(θ X kamu)T(θ X kamu)

​ = 1 2 m ( θ ⃗ T x ⃗ T − y T ) ( θ ⃗ x ⃗ − y ) pecahan{1}{2m}(vek{theta}^T vek{x}^T - y^T)(vek{theta} vek{x} - y)2M1(θ TX TkamuT)(θ X kamu)

​ = Bahasa Indonesia: 1 2 m (θ ⃗ T x ⃗ T x ⃗ θ ⃗ − y T x ⃗ θ ⃗ − θ ⃗ T x ⃗ T y + y T y ) pecahan{1}{2m}(vek{theta}^T vek{x}^Tvek{x}vek{theta} - y^Tvek{x}vek{theta} - vek{theta}^Tvek{x}^Ty + y^Ty )2M1(θ TX TX θ kamuTX θ θ TX Tkamu+kamuTkamu)

3) Penurunan gradien

Kanan θ thetaθTemukan turunan parsial: Bahasa Indonesia: Δ = ∂ J ∂ θ = 1 2 m ( ∂ θ ⃗ T x ⃗ T x ⃗ θ ⃗ ∂ θ − ∂ y T x ⃗ θ ⃗ ∂ θ − ∂ θ ⃗ T x ⃗ T y ∂ θ + y T y ∂ θ ) Delta = frak{sebagian J}{sebagian theta}= frak{1}{2m}(frak{sebagian vek{theta}^T vek{x}^Tvek{x}vek{theta}}{sebagian theta} - frak{sebagian y^Tvek{x}vek{theta}}{sebagian theta} - frak{sebagian vec{theta}^Tvec{x}^Ty}{theta parsial} + frac{y^Ty}{theta parsial})Δ=θJ=2M1(θθ TX TX θ θkamuTX θ θθ TX Tkamu+θkamuTkamu)

Aturan derivasi matriks:

  1. ∂ θ TA θ ∂ θ = ( A + AT ) θ frac{theta parsial^{T}Atheta}{theta parsial} = (A + A^T)thetaθθTAθ=(A+AT)θ

  2. ∂ XTA ∂ X = A frac{sebagian X^{T}A}{sebagian X} = AXXTA=A

  3. ∂ AX ∂ X = AT frac{sebagian AX}{sebagian X} = A^TXAX=AT

  4. ∂ A ∂ X = 0 frac{sebagian A}{sebagian X} = 0XA=0

Tersedia Bahasa Indonesia: Δ = 1 2 m ( ∂ θ ⃗ T x ⃗ T x ⃗ θ ⃗ ∂ θ − ∂ y T x ⃗ θ ⃗ ∂ θ − ∂ θ ⃗ T x ⃗ T y ∂ θ + y T y ∂ θ ) = 1 2 m ⋅ ( 2 x T x θ − 2 x T y ) = 1 m ⋅ ( x T x θ − x T y ) Delta = frac{1}{2m}(frac{vek{theta} parsial^T vek{x}^Tvek{x}vek{theta}}{theta parsial} - frac{vek{theta} parsial y^Tvec{x}vec{theta}}{theta parsial} - frak{vec{theta} parsial^Tvec{x}^Ty}{theta parsial} + frak{y^Ty}{theta parsial}) = frak{1}{2m}cdot (2x^Txtheta - 2x^Ty) = frak{1}{m} cdot (x^Txtheta - x^Ty)Δ=2M1(θθ TX TX θ θkamuTX θ θθ TX Tkamu+θkamuTkamu)=2M1(2XTXθ2XTkamu)=M1(XTXθXTkamu)
Kapan Δ = 0 dan Delta = 0Δ=0 jam: xT xθ = xT yx^Tx theta = x^TyXTXθ=XTkamu , Rumus theta adalah: θ = ( x T x ) − 1 x T y theta = (x^Tx)^{-1}x^Tyθ=(XTX)1XTkamu dapat dihitung θ thetaθ nilai.

Perbandingan Penurunan Gradien dan Persamaan Normal

  • penurunan gradien: Penting untuk memilih kecepatan pembelajaran α, yang memerlukan beberapa iterasi. Hal ini juga dapat diterapkan dengan lebih baik jika jumlah fitur n banyak, dan cocok untuk berbagai jenis model.

  • persamaan biasa: Tidak perlu memilih kecepatan pemelajaran α. Ini dihitung satu kali dan perlu dihitung. Tentukan nilai xTx−1(XTX)1 , jika jumlah fitur tidak adaNSemakin besar maka biaya operasi akan semakin tinggi, karena kompleksitas waktu perhitungan invers matriks Bahasa Indonesia: O(n3)HAI(N3) , biasanya kapan tidak adaNMasih bisa diterima bila kurang dari 10.000.Hanya tersedia untuk model linier, tidak cocok untuk model lain seperti model regresi logistik.

4. Regresi polinomial

Karena dalam beberapa kasus, garis lurus sulit untuk memuat semua data, maka diperlukan kurva untuk menyesuaikan data, seperti model kuadrat, model kubik, dll.

Secara umum, fungsi regresi data tidak diketahui. Sekalipun diketahui, sulit untuk mengubahnya menjadi model linier dengan transformasi fungsi sederhana, sehingga pendekatan yang umum adalahregresi polinomial(Regresi Polinomial), yaitu menggunakan fungsi polinomial untuk menyesuaikan data.

Bagaimana memilih derajat polinomial

Ada banyak jenis fungsi polinomial. Secara umum, Anda perlu mengamati bentuk datanya terlebih dahulu, lalu memutuskan bentuk fungsi polinomial mana yang akan digunakan untuk menyelesaikan soal tersebut. Misalnya dari scatter plot data, jika ada "membengkokkan ", Anda dapat mempertimbangkan untuk menggunakan polinomial kuadrat (yaitu mengkuadratkan karakteristik); ada dua "membengkokkan ", Anda dapat mempertimbangkan untuk menggunakan polinomial kubik (mengambil pangkat kubik dari fitur tersebut); ada tiga "membengkokkan ”, lalu pertimbangkan untuk menggunakan polinomial orde keempat (mengambil pangkat empat dari fitur tersebut), dan seterusnya.

Meskipun fungsi regresi riil belum tentu merupakan polinomial dengan derajat tertentu, selama kecocokannya baik, polinomial yang sesuai dapat digunakan untuk memperkirakan fungsi regresi sebenarnya.

2. Bagian percobaan

Lampiran di akhir artikel berisi semua data asli yang digunakan dalam percobaan.ex1data1.txtadalah hubungan antara populasi dan keuntungan, ex1data2.txtHal ini merupakan pengaruh ukuran rumah dan jumlah kamar tidur terhadap harga rumah.

1. Regresi linier univariat

1) Memuat data
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path = "ex1data1.txt"
data = pd.read_csv(path,header = None,names=['Population','Profit'])
data.head()   # 预览数据
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Masukkan deskripsi gambar di sini

2) Lihat data
data.describe()    # 更加详细的数据描述
  • 1

Masukkan deskripsi gambar di sini

# 可视化训练数据
data.plot(kind = 'scatter',x = 'Population',y = 'Profit',figsize = (12,8))
plt.show()
  • 1
  • 2
  • 3

Masukkan deskripsi gambar di sini

3) Tentukan fungsi biaya
def computerCost(X,y,theta):    # 定义代价函数
    inner = np.power(((X*theta.T)-y),2)   # theta.T表示theta的转置
    return np.sum(inner)/(2*len(X))
  • 1
  • 2
  • 3
data.insert(0,"One",1)  # 表示在第0列前面插入一列数,其表头为One,其值为1
  • 1

Masukkan ke dalam kolom pertama kumpulan data 1 1 1Fungsinya adalah untukMemfasilitasi perhitungan matriks, ketika matriks dikalikan, bobot ikut terlibat wwwakudan bias bbB,Karena bbBtidak dikalikan dengan variabel, jadi a 1 1 1, digunakan dengan bbBBerkembang biak.

4) Pisahkan datanya
cols = data.shape[1]
X = data.iloc[:,0:cols - 1]  #“,”前只有“:”,表示所有的行,“,”后表示抽取数据中第[0列~第cols-1列)(左闭右开),去掉最后一列,最后一列为预测值

y = data.iloc[:,cols - 1:cols]  #只取最后一列的值,表示预测值

  • 1
  • 2
  • 3
  • 4
  • 5
X.head()
  • 1

Masukkan deskripsi gambar di sini

y.head()
  • 1

Masukkan deskripsi gambar di sini

X = np.matrix(X.values)
y = np.matrix(y.values)  #只将表格中的值装换为矩阵而不是包括序号与标题

#初始化theta
theta = np.matrix(np.array([0,0]))  #先是一个一维的数据,然后在转换为一个二维的矩阵
  • 1
  • 2
  • 3
  • 4
  • 5
5) Parameter inisialisasi
theta  
# => matrix([[0, 0]])
  • 1
  • 2
X.shape,theta.shape,y.shape  # 此时theta为一行列,需要进行转置
# => ((97, 2), (1, 2), (97, 1))
  • 1
  • 2
computerCost(X,y,theta)
# => 32.072733877455676
  • 1
  • 2
6) Tentukan fungsi penurunan gradien
def gradientDecent(X,y,theta,alpha,iters):   #iters为迭代次数
    temp = np.matrix(np.zeros(theta.shape))   #构造一个与theta大小一样的零矩阵,用于存储更新后的theta
    parmaters = int (theta.ravel().shape[1])    #.ravel()的功能是将多维数组降至一维,用于求需要求的参数个数
    cost = np.zeros(iters)   #构建iters个0的数组,相当于对每次迭代的cost进行记录
    
    for i in range(iters):
        error = (X * theta.T - y)     #记录误差值,结果为一个数组
        for j in range(parmaters):    #对每一个参数进行更新,j用于表示每一个参数
            term = np.multiply(error,X[:,j])   #.multiply 是对矩阵当中的数对应相乘,这里表示与X矩阵的第j列相乘。
            temp[0,j] = theta[0,j] - ((alpha/len(X))*np.sum(term))  #存储更行后的theta的值,.sum()表示将矩阵中的数进行求和
        
        theta = temp      #更新theta
        cost[i] = computerCost(X,y,theta)  #计算此时的代价,并记录在cost中。
    return theta,cost
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
7) Inisialisasi hyperparameter
alpha  = 0.01		# 学习率
iters = 1000		# 迭代次数
  • 1
  • 2
8) Penurunan gradien
g,cost = gradientDecent(X,y,theta,alpha,iters)
g
# => matrix([[-3.24140214,  1.1272942 ]])
  • 1
  • 2
  • 3
9) Hitung biayanya
computerCost(X,y,g)
# => 4.515955503078914
  • 1
  • 2
10) Gambarlah model linier
x = np.linspace(data.Population.min(),data.Population.max(),100) #抽取100个样本  (从data数据集中的最小值到最大值之间抽取100个样本)
f = g[0,0] + (g[0,1] * x)  #f = ax + b

fig,ax = plt.subplots(figsize = (12,8))    #figsize表示图的大小
ax.plot(x,f,'r',label = "Prediction")    #绘制直线,横坐标,纵坐标,直线名称
ax.scatter(data.Population,data.Profit,label = 'Training data')   #绘制点,横坐标,纵坐标,点的名称
ax.legend(loc = 4)  #显示图例位置
ax.set_xlabel('Population')  #设置x轴的名称
ax.set_ylabel('Profit')   #设置y轴的名称
ax.set_title('Predicted Profit vs. Population Size')  #设置标题的名称
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Masukkan deskripsi gambar di sini

11) Gambarkan kurva perubahan biaya
fig,ax = plt.subplots(figsize = (12,8))
ax.plot(np.arange(iters),cost,'r')
ax.set_xlabel('Interations')
ax.set_ylabel('Cost')
ax.set_title("Error vs. Training Epoc")
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Masukkan deskripsi gambar di sini

2. Regresi linier multivariabel

1) Memuat data
path = "ex1data2.txt"
data2 = pd.read_csv(path,header = None,names=["Size","Bedroom","Price"])
data2.head()
  • 1
  • 2
  • 3

Masukkan deskripsi gambar di sini

2) Pemrosesan normalisasi data
data2 = (data2 - data2.mean())/data2.std()
data2.head()
  • 1
  • 2

Masukkan deskripsi gambar di sini

3) Pisahkan datanya
data2.insert(0,'Ones',1)  #在x的第一列插入1

clos = data2.shape[1]   #存储第二维(列)的数据量
X2 = data2.iloc[:,0:clos-1]  #对X2进行赋值
y2 = data2.iloc[:,clos-1:clos]  #对y2进行赋值

X2 = np.matrix(X2.values)  #将X2转为矩阵
y2 = np.matrix(y2.values)  #将y2转为矩阵
theta2 = np.matrix(np.array([0,0,0]))  #初始化theta2为0矩阵
computerCost(X2, y2, theta2)
# => 0.48936170212765967
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
4) Penurunan gradien
g2,cost2 = gradientDecent(X2,y2,theta2,alpha,iters)   #记录放回值g2(theta2)和cost2
g2
# => matrix([[-1.10868761e-16,  8.78503652e-01, -4.69166570e-02]])
  • 1
  • 2
  • 3
5) Hitung biayanya
computerCost(X2,y2,g2)
# => 0.13070336960771892
  • 1
  • 2
6) Gambarkan kurva perubahan biaya
fig,ax = plt.subplots(figsize = (12,8))
ax.plot(np.arange(iters),cost2,'x')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Silakan tambahkan deskripsi gambar

3. Persamaan normal

#正规方程
def normalEqn(X,y):
    theta = np.linalg.inv(X.T@X)@X.T@y   #.linalg中包含线性代数中的函数,求矩阵的逆(inv)、特征值等。@表示矩阵相乘
    return theta
  • 1
  • 2
  • 3
  • 4
final_theta2 = normalEqn(X,y)
final_theta2
# => matrix([[-3.89578088], [ 1.19303364]])
  • 1
  • 2
  • 3

3. Ringkasan

Langkah-langkah umum untuk melatih model

  1. Pemrosesan awal data.
  2. Pilih model berdasarkan masalah spesifik Anda.
  3. Tetapkan fungsi biaya.
  4. Gunakan algoritma penurunan gradien untuk menemukan parameter optimal.
  5. Evaluasi model dan sesuaikan hyperparameter.
  6. Gunakan model untuk membuat prediksi.

4. Lampiran

1. ex1data1.txt

6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,12
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505
5.734,3.1551
8.4084,7.2258
5.6407,0.71618
5.3794,3.5129
6.3654,5.3048
5.1301,0.56077
6.4296,3.6518
7.0708,5.3893
6.1891,3.1386
20.27,21.767
5.4901,4.263
6.3261,5.1875
5.5649,3.0825
18.945,22.638
12.828,13.501
10.957,7.0467
13.176,14.692
22.203,24.147
5.2524,-1.22
6.5894,5.9966
9.2482,12.134
5.8918,1.8495
8.2111,6.5426
7.9334,4.5623
8.0959,4.1164
5.6063,3.3928
12.836,10.117
6.3534,5.4974
5.4069,0.55657
6.8825,3.9115
11.708,5.3854
5.7737,2.4406
7.8247,6.7318
7.0931,1.0463
5.0702,5.1337
5.8014,1.844
11.7,8.0043
5.5416,1.0179
7.5402,6.7504
5.3077,1.8396
7.4239,4.2885
7.6031,4.9981
6.3328,1.4233
6.3589,-1.4211
6.2742,2.4756
5.6397,4.6042
9.3102,3.9624
9.4536,5.4141
8.8254,5.1694
5.1793,-0.74279
21.279,17.929
14.908,12.054
18.959,17.054
7.2182,4.8852
8.2951,5.7442
10.236,7.7754
5.4994,1.0173
20.341,20.992
10.136,6.6799
7.3345,4.0259
6.0062,1.2784
7.2259,3.3411
5.0269,-2.6807
6.5479,0.29678
7.5386,3.8845
5.0365,5.7014
10.274,6.7526
5.1077,2.0576
5.7292,0.47953
5.1884,0.20421
6.3557,0.67861
9.7687,7.5435
6.5159,5.3436
8.5172,4.2415
9.1802,6.7981
6.002,0.92695
5.5204,0.152
5.0594,2.8214
5.7077,1.8451
7.6366,4.2959
5.8707,7.2029
5.3054,1.9869
8.2934,0.14454
13.394,9.0551
5.4369,0.61705
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97

2. ex1data2.txt

2104,3,399900
1600,3,329900
2400,3,369000
1416,2,232000
3000,4,539900
1985,4,299900
1534,3,314900
1427,3,198999
1380,3,212000
1494,3,242500
1940,4,239999
2000,3,347000
1890,3,329999
4478,5,699900
1268,3,259900
2300,4,449900
1320,2,299900
1236,3,199900
2609,4,499998
3031,4,599000
1767,3,252900
1888,2,255000
1604,3,242900
1962,4,259900
3890,3,573900
1100,3,249900
1458,3,464500
2526,3,469000
2200,3,475000
2637,3,299900
1839,2,349900
1000,1,169900
2040,4,314900
3137,3,579900
1811,4,285900
1437,3,249900
1239,3,229900
2132,4,345000
4215,4,549000
2162,4,287000
1664,2,368500
2238,3,329900
2567,4,314000
1200,3,299000
852,2,179900
1852,4,299900
1203,3,239500
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47