Apa perbedaan antara filter eksponensial dan filter Kalman? Menggunakan filter Kalman untuk memfilter nilai yang diperoleh dari sensor. Penelitian yang menjanjikan di bidang ini

Filter Wiener paling cocok untuk proses pemrosesan atau bagian proses secara keseluruhan (pemrosesan blok). Pemrosesan sekuensial memerlukan penilaian sinyal saat ini pada setiap siklus clock, dengan mempertimbangkan informasi yang diterima pada input filter selama proses observasi.

Dengan pemfilteran Wiener, setiap sampel sinyal baru memerlukan penghitungan ulang semua koefisien bobot filter. Saat ini, filter adaptif banyak digunakan, di mana informasi baru yang masuk digunakan untuk terus menyesuaikan penilaian sinyal yang dibuat sebelumnya (pelacakan target di radar, sistem kendali otomatis di kendali, dll.). Yang menarik adalah filter rekursif adaptif yang dikenal sebagai filter Kalman.

Filter ini banyak digunakan dalam loop kontrol dalam sistem regulasi dan kontrol otomatis. Dari sinilah mereka berasal, terbukti dengan terminologi khusus yang digunakan untuk menggambarkan karya mereka sebagai ruang negara.

Salah satu masalah utama yang perlu dipecahkan dalam praktik komputasi saraf adalah memperoleh algoritma yang cepat dan andal untuk melatih jaringan saraf. Dalam hal ini, mungkin berguna untuk menggunakan algoritma pelatihan filter linier dalam putaran umpan balik. Karena algoritma pembelajaran bersifat iteratif, filter seperti itu harus berupa estimator rekursif sekuensial.

Masalah Estimasi Parameter

Salah satu permasalahan dalam teori solusi statistik yang sangat penting secara praktis adalah masalah estimasi vektor keadaan dan parameter sistem, yang dirumuskan sebagai berikut. Misalkan perlu memperkirakan nilai parameter vektor $X$ yang tidak dapat diukur secara langsung. Sebaliknya, parameter lain $Z$ diukur, bergantung pada $X$. Tugas estimasinya adalah menjawab pertanyaan: apa yang dapat dikatakan tentang $X$, mengetahui $Z$. Secara umum, prosedur untuk estimasi optimal vektor $X$ bergantung pada kriteria kualitas estimasi yang diadopsi.

Misalnya, pendekatan Bayesian terhadap masalah estimasi parameter memerlukan informasi apriori yang lengkap tentang sifat probabilistik dari parameter yang diestimasi, yang seringkali tidak mungkin dilakukan. Dalam kasus ini, mereka menggunakan metode kuadrat terkecil (LSM), yang memerlukan lebih sedikit informasi apriori.

Mari kita pertimbangkan penerapan kuadrat terkecil untuk kasus ketika vektor observasi $Z$ terkait dengan vektor estimasi parameter $X$ dengan model linier, dan observasi mengandung noise $V$, tidak berkorelasi dengan parameter estimasi:

$Z = HX + V$, (1)

di mana $H$ adalah matriks transformasi yang menggambarkan hubungan antara kuantitas yang diamati dan parameter yang diperkirakan.

Estimasi $X$ yang meminimalkan kesalahan kuadrat ditulis sebagai berikut:

$X_(ots)=(H^TR_V^(-1)H)^(-1)H^TR_V^(-1)Z$, (2)

Biarkan noise $V$ tidak berkorelasi, dalam hal ini matriks $R_V$ hanyalah matriks identitas, dan persamaan estimasi menjadi lebih sederhana:

$X_(ots)=(H^TH)^(-1)H^TZ$, (3)

Menulis dalam bentuk matriks menghemat banyak kertas, namun mungkin tidak biasa bagi sebagian orang. Contoh berikut, diambil dari monografi Yu.M. Korshunov “Mathematical Foundations of Cybernetics,” menggambarkan semua ini.
Ada rangkaian listrik berikut:

Besaran yang diamati dalam hal ini adalah pembacaan alat $A_1 ​​​​= 1 A, A_2 = 2 A, V = 20 B$.

Selain itu, hambatannya diketahui $R = 5$ Ohm. Diperlukan untuk memperkirakan dengan cara terbaik, dari sudut pandang kriteria kesalahan kuadrat rata-rata minimum, nilai arus $I_1$ dan $I_2$. Hal terpenting di sini adalah adanya hubungan antara besaran yang diamati (pembacaan instrumen) dan parameter yang diperkirakan. Dan informasi ini dibawa dari luar.

Dalam hal ini, ini adalah hukum Kirchhoff, dalam kasus pemfilteran (yang akan dibahas nanti) - model deret waktu autoregresif, yang mengasumsikan ketergantungan nilai saat ini pada nilai sebelumnya.

Jadi, pengetahuan tentang hukum Kirchhoff, yang sama sekali tidak ada hubungannya dengan teori solusi statistik, memungkinkan kita untuk membuat hubungan antara nilai yang diamati dan parameter yang diperkirakan (mereka yang telah mempelajari teknik elektro dapat memeriksanya, sisanya akan memilikinya). untuk mempercayai kata-kata mereka):

$$z_1 = A_1 = I_1 + \xi_1 = 1$$

$$z_2 = A_2 = I_1 + I_2 + \xi_2 = 2$$

$$z_2 = V/R = I_1 + 2 * I_2 + \xi_3 = 4$$

Ini dalam bentuk vektor:

$$\begin(vmatrix) z_1\\ z_2\\ z_3 \end(vmatrix) = \begin(vmatrix) 1 & 0\\ 1 & 1\\ 1 & 2 \end(vmatrix) \begin(vmatrix) I_1\ \ I_2 \end(vmatrix) + \begin(vmatrix) \xi_1\\ \xi_2\\ \xi_3 \end(vmatrix)$$

Atau $Z = HX + V$, dimana

$$Z= \begin(vmatrix) z_1\\ z_2\\ z_3 \end(vmatrix) = \begin(vmatrix) 1\\ 2\\ 4 \end(vmatrix) ; H= \mulai(vmatrix) 1 & 0\\ 1 & 1\\ 1 & 2 \end(vmatrix) ; X= \mulai(vmatrix) I_1\\ I_2 \end(vmatrix) ; V= \mulai(vmatrix) \xi_1\\ \xi_2\\ \xi_3 \end(vmatrix)$$

Mengingat nilai kebisingan tidak berkorelasi satu sama lain, maka kita akan mencari estimasi I 1 dan I 2 dengan menggunakan metode kuadrat terkecil sesuai dengan rumus 3:

$H^TH= \begin(vmatrix) 1 & 1& 1\\ 0 & 1& 2 \end(vmatrix) \begin(vmatrix) 1 & 0\\ 1 & 1\\ 1 & 2 \end(vmatrix) = \ mulai(vmatrix) 3 & 3\\ 3 & 5 \end(vmatrix) ; (H^TH)^(-1)= \frac(1)(6) \begin(vmatrix) 5 & -3\\ -3 & 3 \end(vmatrix) $;

$H^TZ= \begin(vmatrix) 1 & 1& 1\\ 0 & 1& 2 \end(vmatrix) \begin(vmatrix) 1 \\ 2\\ 4 \end(vmatrix) = \begin(vmatrix) 7\ \ 10 \end(vmatriks) ; X(ots)= \frac(1)(6) \begin(vmatrix) 5 & -3\\ -3 & 3 \end(vmatrix) \begin(vmatrix) 7\\ 10 \end(vmatrix) = \frac (1)(6) \begin(vmatrix) 5\\ 9 \end(vmatrix)$;

Jadi $I_1 = 5/6 = 0,833 A$; $I_2 = 9/6 = 1,5 A$.

Tugas penyaringan

Berbeda dengan masalah pendugaan parameter yang mempunyai nilai tetap, masalah penyaringan memerlukan proses pendugaan, yaitu menemukan perkiraan arus dari sinyal yang bervariasi terhadap waktu yang terdistorsi oleh noise dan, oleh karena itu, tidak dapat diakses untuk pengukuran langsung. Secara umum, jenis algoritma penyaringan bergantung pada sifat statistik sinyal dan noise.

Kita asumsikan bahwa sinyal yang berguna adalah fungsi waktu yang berubah secara perlahan, dan interferensinya adalah noise yang tidak berkorelasi. Kami akan menggunakan metode kuadrat terkecil, sekali lagi karena kurangnya informasi apriori tentang karakteristik probabilistik dari sinyal dan noise.

Pertama, kita memperoleh perkiraan nilai saat ini $x_n$ berdasarkan nilai terbaru $k$ yang tersedia dari deret waktu $z_n, z_(n-1),z_(n-2)\dots z_(n- (k-1))$. Model observasinya sama dengan masalah estimasi parameter:

Jelas bahwa $Z$ adalah vektor kolom yang terdiri dari nilai observasi deret waktu $z_n, z_(n-1),z_(n-2)\dots z_(n-(k-1))$ , $V $ adalah vektor kolom kebisingan $\xi _n, \xi _(n-1),\xi_(n-2)\dots \xi _(n-(k-1))$, mendistorsi sinyal sebenarnya . Apa arti simbol $H$ dan $X$? Misalnya, vektor kolom $X$ apa yang dapat kita bicarakan jika yang diperlukan hanyalah memperkirakan nilai deret waktu saat ini? Dan apa yang dimaksud dengan matriks transformasi $H$ secara umum tidak jelas.

Semua pertanyaan ini hanya dapat dijawab jika konsep model pembangkitan sinyal dipertimbangkan. Artinya, diperlukan beberapa model sinyal asli. Hal ini dapat dimengerti; dengan tidak adanya informasi apriori tentang karakteristik probabilistik dari sinyal dan interferensi, kita hanya dapat membuat asumsi. Anda bisa menyebutnya meramal dengan ampas kopi, tetapi para ahli lebih memilih terminologi yang berbeda. Pada pengering rambut mereka, ini disebut model parametrik.

Dalam hal ini, parameter model khusus ini diestimasi. Saat memilih model pembangkitan sinyal yang sesuai, ingatlah bahwa fungsi analitik apa pun dapat diperluas menjadi deret Taylor. Sifat yang mencolok dari deret Taylor adalah bahwa bentuk suatu fungsi pada jarak berhingga $t$ dari titik tertentu $x=a$ ditentukan secara unik oleh perilaku fungsi tersebut di lingkungan yang sangat kecil dari titik $x=a $ (kita berbicara tentang turunan orde pertama dan lebih tinggi).

Dengan demikian, keberadaan deret Taylor berarti fungsi analitik memiliki struktur internal dengan kopling yang sangat kuat. Jika, misalnya, kita membatasi diri pada tiga suku deret Taylor, maka model pembangkitan sinyal akan terlihat seperti ini:

$x_(n-i) = F_(-i)x_n$, (4)

$$X_n= \begin(vmatrix) x_n\\ x"_n\\ x""_n \end(vmatrix) ; F_(-i)= \begin(vmatrix) 1 & -i & i^2/2\\ 0 & 1 & -i\\ 0 & 0 & 1 \akhir(matriks) $$

Artinya, rumus 4, untuk orde polinomial tertentu (dalam contoh sama dengan 2), menetapkan hubungan antara nilai sinyal ke-$n$ dalam urutan waktu dan nilai $(n-i)$- th. Jadi, perkiraan vektor keadaan dalam hal ini mencakup, selain nilai perkiraan itu sendiri, turunan pertama dan kedua dari sinyal tersebut.

Dalam teori kontrol otomatis, filter seperti itu disebut filter dengan astatisme orde 2. Matriks transformasi $H$ untuk kasus ini (diperkirakan menggunakan sampel saat ini dan $k-1$ sampel sebelumnya) terlihat seperti ini:

$$H= \begin(vmatrix) 1 & -k & k^2/2\\ - & - & -\\ 1 & -2 & 2\\ 1 & -1 & 0,5\\ 1 & 0 & 0 \ akhir(vmatriks)$$

Semua bilangan ini diperoleh dari deret Taylor dengan asumsi selang waktu antara nilai observasi yang berdekatan adalah konstan dan sama dengan 1.

Jadi, masalah penyaringan, berdasarkan asumsi yang kita buat, telah direduksi menjadi masalah estimasi parameter; dalam hal ini, parameter model pembangkitan sinyal yang kami adopsi diperkirakan. Dan penilaian nilai vektor keadaan $X$ dilakukan dengan menggunakan rumus 3 yang sama:

$$X_(ots)=(H^TH)^(-1)H^TZ$$

Pada dasarnya, kami telah menerapkan proses estimasi parametrik berdasarkan model autoregresif dari proses pembangkitan sinyal.

Rumus 3 dapat dengan mudah diimplementasikan dalam perangkat lunak; untuk melakukan ini, Anda perlu mengisi matriks $H$ dan vektor kolom observasi $Z$. Filter seperti ini disebut filter dengan memori terbatas, karena mereka menggunakan $k$ observasi terakhir untuk mendapatkan estimasi $X_(noc)$ saat ini. Pada setiap langkah observasi baru, observasi baru ditambahkan ke kumpulan observasi saat ini dan observasi lama dibuang. Proses memperoleh perkiraan ini disebut jendela geser.

Filter dengan memori yang bertambah

Filter dengan memori terbatas memiliki kelemahan utama yaitu setelah setiap observasi baru perlu menghitung ulang semua data yang disimpan dalam memori. Selain itu, penghitungan estimasi hanya dapat dimulai setelah hasil observasi $k$ pertama diakumulasikan. Artinya, filter-filter tersebut mempunyai durasi proses transien yang panjang.

Untuk mengatasi kelemahan ini, perlu beralih dari filter dengan memori permanen ke filter dengan memori yang semakin besar. Dalam filter seperti itu, jumlah nilai observasi yang digunakan untuk mengevaluasi harus sesuai dengan jumlah n observasi saat ini. Hal ini memungkinkan kita memperoleh estimasi mulai dari sejumlah observasi yang sama dengan jumlah komponen vektor estimasi $X$. Dan hal ini ditentukan oleh urutan model yang diadopsi, yaitu berapa banyak suku dari deret Taylor yang digunakan dalam model tersebut.

Dalam hal ini, seiring bertambahnya n, sifat penghalusan filter meningkat, yaitu keakuratan perkiraan meningkat. Namun, penerapan langsung pendekatan ini dikaitkan dengan peningkatan biaya komputasi. Oleh karena itu, filter dengan memori yang bertambah diimplementasikan sebagai berulang.

Faktanya adalah pada saat n kita sudah memiliki perkiraan $X_((n-1)ots)$, yang berisi informasi tentang semua pengamatan sebelumnya $z_n, z_(n-1), z_(n-2) \dots z_ (n-(k-1))$. Estimasi $X_(nots)$ diperoleh dari observasi berikutnya $z_n$ dengan menggunakan informasi yang disimpan dalam estimasi $X_((n-1))(\mbox (ots))$. Prosedur ini disebut pemfilteran berulang dan terdiri dari yang berikut:

  • sesuai perkiraan $X_((n-1))(\mbox (ots))$, prediksi perkiraan $X_n$ menggunakan rumus 4 untuk $i = 1$: $X_(\mbox (notspriori)) = F_1X_( (n-1 )tidak)$. Ini merupakan perkiraan apriori;
  • menurut hasil observasi saat ini $z_n$, perkiraan apriori ini diubah menjadi perkiraan yang benar, yaitu a posteriori;
  • prosedur ini diulangi pada setiap langkah, dimulai dari $r+1$, di mana $r$ adalah urutan filter.

Rumus pemfilteran berulang terakhir terlihat seperti ini:

$X_((n-1)oc) = X_(\mbox (nocapriori)) + (H^T_nH_n)^(-1)h^T_0(z_n - h_0 X_(\mbox (nocapriori)))$, (6 )

di mana untuk filter pesanan kedua kami:

Filter memori berkembang yang beroperasi sesuai dengan Formula 6 adalah kasus khusus dari algoritma pemfilteran yang dikenal sebagai filter Kalman.

Saat menerapkan rumus ini dalam praktik, perlu diingat bahwa perkiraan apriori yang disertakan di dalamnya ditentukan oleh rumus 4, dan nilai $h_0 X_(\mbox (nocapriori))$ mewakili komponen pertama dari vektor $X_( \mbox (nocapriori))$.

Filter memori yang berkembang memiliki satu fitur penting. Jika melihat rumus 6, estimasi akhir adalah penjumlahan dari vektor estimasi prediksi dan suku koreksi. Koreksi ini besar untuk $n$ kecil dan menurun seiring bertambahnya $n$, cenderung nol pada $n \rightarrow \infty$. Artinya, seiring bertambahnya n, sifat penghalusan filter meningkat dan model yang tertanam di dalamnya mulai mendominasi. Namun sinyal sebenarnya hanya dapat sesuai dengan model di area tertentu, sehingga keakuratan perkiraan menurun.

Untuk mengatasi hal ini, mulai dari $n$ tertentu, larangan diberlakukan untuk mengurangi jangka waktu koreksi lebih lanjut. Hal ini setara dengan mengubah pita filter, yaitu, untuk n yang kecil, bandwidth filternya lebih lebar (lebih sedikit inersianya), untuk n yang besar menjadi lebih inersia.

Bandingkan Gambar 1 dan Gambar 2. Pada gambar pertama, filter memiliki memori yang besar, dan menghaluskan dengan baik, namun karena pita yang sempit, perkiraan lintasannya tertinggal dari yang sebenarnya. Pada gambar kedua, memori filter lebih kecil, penghalusannya lebih buruk, tetapi melacak lintasan sebenarnya dengan lebih baik.

Literatur

  1. Yu.M.Korshunov "Dasar matematika sibernetika"
  2. A.V. Balakrishnan "Teori penyaringan Kalman"
  3. V.N.Fomin "Estimasi berulang dan pemfilteran adaptif"
  4. CFN Cowan, P.M. Berikan "Filter adaptif"

Dalam proses otomatisasi proses teknologi untuk mengontrol mekanisme dan unit, kita harus berurusan dengan pengukuran berbagai besaran fisis. Ini bisa berupa tekanan dan aliran cairan atau gas, kecepatan putaran, suhu dan banyak lagi. Pengukuran besaran fisis dilakukan dengan menggunakan sensor analog. Sinyal analog adalah sinyal data yang masing-masing parameternya dijelaskan oleh fungsi waktu dan serangkaian nilai yang mungkin berkelanjutan. Dari kontinuitas ruang nilai dapat disimpulkan bahwa setiap noise yang dimasukkan ke dalam sinyal tidak dapat dibedakan dari sinyal yang berguna. Oleh karena itu, nilai kuantitas fisik yang diperlukan yang salah akan diterima pada input analog perangkat kontrol. Oleh karena itu, perlu adanya penyaringan terhadap sinyal yang datang dari sensor.

Salah satu algoritma pemfilteran yang efektif adalah filter Kalman. Filter Kalman adalah filter rekursif yang memperkirakan vektor keadaan sistem dinamis menggunakan serangkaian pengukuran yang tidak lengkap dan berisik. Filter Kalman menggunakan model sistem yang dinamis (misalnya, hukum fisika gerak), input kontrol, dan banyak pengukuran berurutan untuk membentuk perkiraan keadaan optimal. Algoritme ini terdiri dari dua fase berulang: prediksi dan penyesuaian. Pada tahap pertama, prediksi keadaan pada titik waktu berikutnya dihitung (dengan mempertimbangkan ketidakakuratan pengukurannya). Yang kedua, informasi baru dari sensor mengoreksi nilai prediksi (juga memperhitungkan ketidakakuratan dan gangguan informasi ini).

Pada tahap prediksi:

  1. Prediksi Status Sistem:

dimana prediksi keadaan sistem saat ini; – matriks transisi antar negara (model dinamis sistem); – prediksi keadaan sistem pada waktu sebelumnya; – matriks penerapan tindakan pengendalian; – tindakan kontrol pada titik waktu sebelumnya.

  1. Prediksi kesalahan kovarians:

dimana prediksi kesalahannya; – kesalahan pada waktu sebelumnya; – kovarians kebisingan proses.

Selama tahap penyesuaian:

  1. Perhitungan keuntungan Kalman:

dimana keuntungan Kalman; – matriks pengukuran yang menampilkan hubungan antara pengukuran dan keadaan; – kovarians kebisingan pengukuran.

di mana pengukuran pada waktu saat ini.

  1. Pembaruan kesalahan kovarians:

di mana adalah matriks identitas.

Jika keadaan sistem dijelaskan oleh satu variabel, maka = 1, dan matriks-matriks tersebut diturunkan menjadi persamaan biasa.

Untuk menunjukkan secara jelas keefektifan filter Kalman, dilakukan percobaan dengan sensor volume AVR PIC KY-037 yang dihubungkan dengan mikrokontroler Arduino Uno. Gambar 1 menunjukkan grafik pembacaan sensor tanpa menggunakan filter (baris 1). Fluktuasi nilai yang kacau pada keluaran sensor menunjukkan adanya noise.

Gambar 1. Grafik pembacaan sensor tanpa penerapan filter

Untuk menerapkan filter, perlu ditentukan nilai variabel , dan , yang menentukan dinamika sistem dan pengukurannya. Mari kita ambil sama dengan 1 dan sama dengan 0, karena tidak ada tindakan kontrol dalam sistem. Untuk menentukan sifat penghalusan filter, perlu menghitung nilai variabel, serta memilih nilai parameter.

Kami akan menghitung variabel di Microsoft Excel 2010. Untuk melakukannya, perlu menghitung deviasi standar untuk sampel pembacaan sensor. = 0,62. dipilih tergantung pada tingkat filtrasi yang diperlukan, ambil = 0,001. Pada Gambar 2, baris kedua menunjukkan grafik pembacaan sensor menggunakan filter.

Gambar 2. Grafik pembacaan sensor menggunakan filter Kalman.

Dari grafik tersebut kita dapat menyimpulkan bahwa filter mengatasi tugas menyaring interferensi, karena dalam kondisi tunak fluktuasi pembacaan sensor yang difilter tidak signifikan.

Namun filter Kalman memiliki kelemahan yang cukup signifikan. Jika besaran yang diukur oleh suatu sensor dapat berubah dengan cepat, pembacaan sensor yang difilter tidak akan berubah secepat besaran yang diukur. Gambar 3 menunjukkan respon filter Kalman terhadap lonjakan nilai terukur.

Gambar 3. Respon filter Kalman terhadap lonjakan nilai terukur

Respons filter terhadap lonjakan nilai terukur tidak signifikan. Jika nilai terukur berubah secara signifikan dan kemudian tidak kembali ke nilai sebelumnya, maka pembacaan sensor yang difilter akan sesuai dengan nilai sebenarnya dari nilai terukur hanya setelah jangka waktu tertentu, yang tidak dapat diterima untuk sistem kontrol otomatis yang memerlukan kinerja tinggi. .

Dari percobaan kami dapat menyimpulkan bahwa disarankan untuk menggunakan filter Kalman untuk menyaring pembacaan sensor pada sistem dengan kinerja rendah.

Referensi:

  1. Gost 17657-79. Perpindahan data. Istilah dan definisi. – Moskow: Standards Publishing House, 2005. – 2 hal.
  2. Filter Kalman // Wikipedia. . Tanggal pembaruan: 26/04/2017. URL: http://ru.wikipedia.org/?oldid=85061599 (tanggal akses: 21/05/2017).

Random Forest adalah salah satu algoritma penambangan data favorit saya. Pertama, ini sangat serbaguna; dapat digunakan untuk memecahkan masalah regresi dan klasifikasi. Cari anomali dan pilih prediktor. Kedua, ini adalah algoritma yang sangat sulit untuk diterapkan secara tidak benar. Hanya karena, tidak seperti algoritme lainnya, algoritme ini memiliki sedikit parameter yang dapat disesuaikan. Dan ternyata sifatnya juga sangat sederhana. Dan pada saat yang sama, ini luar biasa akurat.

Apa ide di balik algoritma yang luar biasa ini? Idenya sederhana: katakanlah kita mempunyai algoritma yang sangat lemah, misalnya . Jika kita membuat banyak model berbeda menggunakan algoritme lemah ini dan membuat rata-rata hasil prediksinya, hasil akhirnya akan jauh lebih baik. Inilah yang disebut pembelajaran ansambel dalam tindakan. Oleh karena itu, algoritma Random Forest disebut “Random Forest”; karena data yang diterima, algoritma ini membuat banyak pohon keputusan dan kemudian membuat rata-rata hasil prediksinya. Poin penting di sini adalah unsur kebetulan dalam penciptaan setiap pohon. Toh yang jelas jika kita membuat banyak pohon yang identik, maka hasil rata-ratanya akan memiliki keakuratan satu pohon.

Bagaimana cara kerjanya? Anggaplah kita memiliki beberapa data masukan. Setiap kolom berhubungan dengan beberapa parameter, setiap baris berhubungan dengan beberapa elemen data.

Kita dapat secara acak memilih sejumlah kolom dan baris tertentu dari seluruh kumpulan data dan membuat pohon keputusan berdasarkan kolom dan baris tersebut.


Kamis, 10 Mei 2012

Kamis, 12 Januari 2012


Itu saja. Penerbangan 17 jam telah berakhir, Rusia masih berada di luar negeri. Dan melalui jendela apartemen 2 kamar tidur yang nyaman, San Francisco, Silicon Valley yang terkenal, California, AS, menatap kami. Ya, inilah alasan mengapa saya jarang menulis akhir-akhir ini. Kami sudah pindah.

Ini semua dimulai pada bulan April 2011 ketika saya melakukan wawancara telepon dengan Zynga. Kemudian semuanya tampak seperti permainan yang tidak ada hubungannya dengan kenyataan dan saya bahkan tidak dapat membayangkan apa yang akan terjadi. Pada bulan Juni 2011, Zynga datang ke Moskow dan melakukan serangkaian wawancara, sekitar 60 kandidat yang lulus wawancara telepon dipertimbangkan dan sekitar 15 orang dipilih dari mereka (saya tidak tahu jumlah pastinya, ada yang kemudian berubah pikiran, yang lain langsung menolak). Wawancara itu ternyata sangat sederhana. Tidak ada masalah pemrograman, tidak ada pertanyaan rumit tentang bentuk palka, sebagian besar menguji kemampuan Anda dalam mengobrol. Dan pengetahuan, menurut saya, hanya dinilai secara dangkal.

Dan kemudian omong kosong dimulai. Pertama kita tunggu hasilnya, lalu penawaran, lalu persetujuan LCA, lalu persetujuan permohonan visa, lalu dokumen dari USA, lalu antrian di kedutaan, lalu verifikasi tambahan, lalu visa. Kadang-kadang saya merasa siap menyerahkan segalanya dan mencetak gol. Kadang-kadang saya ragu apakah kita membutuhkan Amerika ini, lagipula Rusia juga tidak buruk. Keseluruhan proses memakan waktu sekitar enam bulan, dan pada akhirnya, pada pertengahan Desember, kami menerima visa dan mulai bersiap untuk berangkat.

Senin adalah hari pertama saya bekerja di tempat baru. Kantor memiliki semua kondisi tidak hanya untuk bekerja, tetapi juga untuk hidup. Sarapan, makan siang dan makan malam dari chef kami sendiri, banyak variasi makanan yang tersebar di seluruh pelosok, gym, pijat dan bahkan penata rambut. Semua ini sepenuhnya gratis untuk karyawan. Banyak orang berangkat kerja dengan sepeda, dan beberapa ruangan dilengkapi untuk menyimpan kendaraan. Secara umum, saya belum pernah melihat hal seperti ini di Rusia. Namun, segala sesuatu ada harganya; kami segera diperingatkan bahwa kami harus bekerja keras. Menurut standar mereka, apa yang dimaksud dengan “banyak” tidak begitu jelas bagi saya.

Saya berharap, meskipun banyak pekerjaan yang harus saya lakukan, di masa mendatang saya akan dapat melanjutkan blogging dan, mungkin, menceritakan sesuatu tentang kehidupan Amerika dan bekerja sebagai programmer di Amerika. Tunggu dan lihat. Sementara itu, saya mengucapkan Selamat Tahun Baru dan Natal kepada semua orang dan sampai jumpa lagi!


Sebagai contoh penggunaan, kami akan mencetak hasil dividen perusahaan Rusia. Sebagai harga dasar, kami mengambil harga penutupan saham pada hari penutupan register. Untuk beberapa alasan, informasi ini tidak tersedia di situs Troika, tetapi ini jauh lebih menarik daripada nilai absolut dividen.
Perhatian! Kode ini membutuhkan waktu yang cukup lama untuk dieksekusi, karena... Untuk setiap promosi, Anda perlu membuat permintaan ke server finam dan mendapatkan nilainya.

Hasil<- NULL for(i in (1:length(divs[,1]))){ d <- divs if (d$Divs>0)( coba(( tanda kutip<- getSymbols(d$Symbol, src="Finam", from="2010-01-01", auto.assign=FALSE) if (!is.nan(quotes)){ price <- Cl(quotes) if (length(price)>0)(hh<- d$Divs result <- rbind(result, data.frame(d$Symbol, d$Name, d$RegistryDate, as.numeric(dd)/as.numeric(price), stringsAsFactors=FALSE)) } } }, silent=TRUE) } } colnames(result) <- c("Symbol", "Name", "RegistryDate", "Divs") result


Demikian pula, Anda dapat membuat statistik untuk tahun-tahun sebelumnya.

Entah bagaimana kebetulan saya sangat menyukai semua jenis algoritma yang memiliki dasar matematika yang jelas dan logis) Namun seringkali deskripsi mereka di Internet begitu dipenuhi dengan rumus dan perhitungan sehingga tidak mungkin untuk memahami arti umum dari algoritma tersebut. Namun memahami esensi dan prinsip pengoperasian suatu perangkat/mekanisme/algoritma jauh lebih penting daripada menghafal rumus-rumus besar. Meski basi, menghafal ratusan rumus pun tidak akan membantu sama sekali jika Anda tidak tahu bagaimana dan di mana menerapkannya 😉 Sebenarnya untuk apa semua ini.. Saya memutuskan untuk membuat deskripsi tentang beberapa algoritma yang Saya harus menghadapinya dalam latihan. Saya akan berusaha untuk tidak membebani dengan perhitungan matematis agar materi dapat dipahami dan dibaca.

Dan hari ini kita akan membicarakannya penyaring Kalman, mari kita cari tahu apa itu, mengapa dan bagaimana penggunaannya.

Mari kita mulai dengan contoh kecil. Mari kita dihadapkan pada tugas menentukan koordinat suatu pesawat terbang. Selain itu, tentu saja, koordinat (sebut saja) harus ditentukan seakurat mungkin.

Kami memasang sensor di pesawat terlebih dahulu, yang memberi kami data lokasi yang diperlukan, tetapi, seperti semua hal di dunia ini, sensor kami tidak sempurna. Oleh karena itu, alih-alih nilai yang kita peroleh:

dimana kesalahan sensor, yaitu variabel acak. Dengan demikian, dari ketidakakuratan pembacaan alat ukur tersebut, kita harus memperoleh nilai koordinat () yang sedekat mungkin dengan posisi pesawat sebenarnya.

Tugas telah ditetapkan, mari kita lanjutkan untuk menyelesaikannya.

Beri tahu kami tindakan kontrol (), yang menyebabkan pesawat terbang (pilot memberi tahu kami tuas mana yang dia tarik 😉). Kemudian, dengan mengetahui koordinat pada langkah ke-k, kita bisa mendapatkan nilai pada langkah (k+1):

Tampaknya inilah yang kita butuhkan! Dan tidak diperlukan filter Kalman di sini. Namun tidak semuanya sesederhana itu.. Pada kenyataannya, kita tidak bisa memperhitungkan semua faktor eksternal yang mempengaruhi penerbangan, sehingga rumusnya berbentuk sebagai berikut:

dimana kesalahan yang disebabkan oleh pengaruh luar, ketidaksempurnaan mesin, dll.

Jadi apa yang terjadi? Pada langkah (k+1) kita mempunyai, pertama, pembacaan sensor yang tidak akurat, dan kedua, nilai perhitungan yang tidak akurat yang diperoleh dari nilai pada langkah sebelumnya.

Ide filter Kalman adalah untuk mendapatkan perkiraan akurat dari koordinat yang diinginkan (untuk kasus kami) dari dua nilai yang tidak akurat (mengambilnya dengan koefisien bobot yang berbeda). Secara umum, nilai yang diukur bisa berupa apa saja (suhu, kecepatan...). Inilah yang terjadi:

Melalui perhitungan matematis kita dapat memperoleh rumus untuk menghitung koefisien Kalman pada setiap langkahnya, namun seperti yang telah disepakati di awal artikel, kita tidak akan mendalami perhitungannya lebih dalam, apalagi dalam prakteknya telah ditetapkan bahwa koefisien Kalman selalu cenderung ke nilai tertentu seiring bertambahnya k. Kami mendapatkan penyederhanaan pertama dari rumus kami:

Sekarang mari kita asumsikan bahwa tidak ada hubungan dengan pilot, dan kita tidak mengetahui tindakan pengendaliannya. Nampaknya dalam hal ini kita tidak bisa menggunakan filter Kalman, padahal tidak demikian 😉 Kita cukup “membuang” dari rumus apa yang tidak kita ketahui, lalu

Kami memperoleh formula Kalman yang paling disederhanakan, yang, meskipun ada penyederhanaan yang "sulit", namun dapat mengatasi tugasnya dengan sempurna. Jika Anda menyajikan hasilnya secara grafis, Anda akan mendapatkan sesuatu seperti ini:

Jika sensor kita sangat akurat, maka tentu saja koefisien bobot K harus mendekati satu. Jika keadaannya sebaliknya, yaitu sensor kita kurang bagus, maka K seharusnya mendekati nol.

Mungkin itu saja, begitu saja, kami menemukan algoritma pemfilteran Kalman! Semoga artikelnya bermanfaat dan dapat dimengerti =)


Filter ini digunakan di berbagai bidang - mulai dari teknik radio hingga ekonomi. Disini kita akan membahas ide pokok, makna, intisari dari filter ini. Ini akan disajikan dalam bahasa yang paling sederhana.
Mari kita asumsikan bahwa kita perlu mengukur sejumlah kuantitas suatu benda tertentu. Dalam teknik radio, mereka paling sering berhubungan dengan pengukuran tegangan pada output perangkat tertentu (sensor, antena, dll.).
Jadi, anggaplah kita terus-menerus mengukur sesuatu. Kami juga berasumsi bahwa pengukuran kami selalu menghasilkan kesalahan - hal ini dapat dimengerti, karena tidak ada alat ukur yang ideal, dan masing-masing memberikan hasil dengan kesalahan.
Dalam kasus paling sederhana, apa yang dijelaskan dapat direduksi menjadi ekspresi berikut: z=x+y, di mana x adalah nilai sebenarnya yang ingin kita ukur dan yang akan diukur jika kita memiliki alat ukur yang ideal, y adalah pengukurannya. kesalahan yang ditimbulkan oleh alat pengukur, dan z adalah besaran yang kita ukur.

Jadi tugas filter Kalman adalah menebak (menentukan) dari z yang kita ukur, berapa nilai sebenarnya dari x ketika kita menerima z kita (yang berisi nilai sebenarnya dan kesalahan pengukuran). Penting untuk menyaring (menyingkirkan) nilai sebenarnya dari x dari z—untuk menghilangkan gangguan distorsi y dari z.

Artinya, dengan hanya memiliki jumlah di tangan, kita perlu menebak suku mana yang memberikan jumlah tersebut. Mengingat hal di atas, sekarang mari kita rumuskan semuanya sebagai berikut. Biarkan hanya ada dua angka acak. Kita hanya diberi jumlah saja dan kita diharuskan menggunakan jumlah ini untuk menentukan syarat-syaratnya.. Ada sesuatu yang diketahui tentang bilangan acak sebelumnya. Secara khusus, apa yang disebut histogram distribusi untuk setiap pasangan angka diketahui di sana. Biasanya diperoleh setelah pengamatan yang cukup lama terhadap kemunculan bilangan-bilangan yang sangat acak tersebut. Artinya, misalnya, diketahui dari pengalaman bahwa dalam 5% kasus pasangan x=1, y=8 biasanya muncul (kami menyatakan pasangan ini sebagai berikut: (1,8)), dalam 2% kasus pasangan tersebut x=2, y=3 ( 2.3), dalam 1% kasus sepasang (3.1), dalam 0.024% kasus sepasang (11.1), dll. Saya ulangi, histogram ini diberikan untuk semua pasangan Jika angka 12 dilempar, kita dapat mengatakan bahwa dalam 90% kasus (27% dari 30% - atau, yang sama, 27 kali dari setiap 30) alasan untuk menggulung angka 12 adalah pasangan (7,5) . Mengetahui bahwa alasan paling sering untuk menerima jumlah yang sama dengan 12 adalah pasangan (7,5), masuk akal untuk berasumsi bahwa, kemungkinan besar, pasangan tersebut telah turun sekarang.
Tentu saja masih belum menjadi fakta bahwa sebenarnya sekarang angka 12 dibentuk oleh pasangan khusus ini, namun lain kali jika kita menemukan 12 dan kita asumsikan lagi pasangan (7,5), maka sekitar 90% kasus dari 100% kita akan benar.


Namun jika kita menebak pasangan (2, 10), kita hanya akan benar pada 1% dari 30% kasus, yaitu sebesar 3,33% tebakan benar dibandingkan dengan 90% saat menebak pasangan (7,5). Itu saja – itulah inti dari algoritma filter Kalman. Artinya, filter Kalman tidak menjamin tidak akan terjadi kesalahan dalam menentukan penjumlahan berdasarkan penjumlahan, tetapi menjamin bahwa filter tersebut akan melakukan kesalahan dalam jumlah minimum (kemungkinan kesalahan akan minimal), karena ia menggunakan statistik - histogram kemunculan pasangan angka.

Perlu juga ditekankan bahwa algoritma pemfilteran Kalman sering menggunakan apa yang disebut kepadatan distribusi probabilitas (PDD). Namun perlu dipahami bahwa maknanya sama dengan histogram. Selain itu, histogram adalah fungsi yang dibangun berdasarkan PDF dan merupakan perkiraannya (lihat, misalnya).
Pada prinsipnya histogram ini dapat kita gambarkan sebagai fungsi dari dua variabel - yaitu dalam bentuk permukaan tertentu di atas bidang xy. Jika permukaannya lebih tinggi, kemungkinan mendapatkan pasangan yang sesuai lebih tinggi. Gambar 2 menunjukkan permukaan seperti itu.

Gambar.2 Bagi mereka yang tertarik dengan penjelasan konsep matematika, seperti yang mereka katakan, “dengan jari”, kami dapat merekomendasikan buku ini dan khususnya bab-bab dari bagian “Matematika” (Anda dapat membeli buku itu sendiri atau bab-bab individual dari dia).

  • Sergei Savenkov

    semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat