Ilmu data dengan Python: 8 cara untuk melakukan regresi linier dan mengukur kecepatannya

Pada artikel ini, kami membahas 8 cara untuk melakukan regresi linier sederhana menggunakan kode / paket Python. Kami mengabaikan pro dan kontra mereka, dan menunjukkan ukuran kompleksitas komputasi relatif mereka.

Bagi banyak ilmuwan data, regresi linier adalah titik awal dari banyak proyek pemodelan statistik dan analisis prediktif. Pentingnya menyesuaikan (akurat dan cepat) model linier ke kumpulan data yang besar tidak bisa dilebih-lebihkan. Seperti yang ditunjukkan dalam artikel ini, istilah ' LINEAR ' dalam model regresi linier mengacu pada koefisien, dan bukan pada derajat fitur.

Fitur (atau variabel independen) dapat berupa derajat apa pun atau bahkan fungsi transendental seperti eksponensial, logaritmik, sinusoidal. Jadi, fenomena alam yang besar dapat dimodelkan (kira-kira) menggunakan transformasi dan model linier ini bahkan jika hubungan fungsional antara keluaran dan fitur sangat nonlinier.

Di sisi lain, Python dengan cepat muncul sebagai bahasa pemrograman de-facto pilihan untuk data scientist. Oleh karena itu, penting bagi data scientist untuk mengetahui semua berbagai metode yang dapat dengan cepat menyesuaikan model linier ke kumpulan data yang cukup besar dan menilai kepentingan relatif setiap fitur dalam hasil proses.

Namun, apakah hanya ada satu cara untuk melakukan analisis regresi linier dengan Python? Jika ada beberapa opsi yang tersedia, bagaimana cara memilih metode yang paling efektif?

Karena popularitas yang luas dari pustaka pembelajaran mesin scikit-learn, pendekatan yang umum sering kali adalah memanggil kelas Model Linear dari pustaka itu dan menyesuaikan datanya. Meskipun hal ini dapat menawarkan keuntungan tambahan dalam menerapkan fitur pipeline lain dari pembelajaran mesin (misalnya normalisasi data, regularisasi koefisien model, memasukkan model linier ke model hilir lainnya), ini seringkali bukan metode tercepat atau terbersih ketika analis data hanya membutuhkan dan cara mudah untuk menentukan koefisien regresi (dan beberapa statistik terkait dasar).

Ada metode yang lebih cepat dan lebih bersih. Tetapi semuanya mungkin tidak menawarkan jumlah informasi atau fleksibilitas pemodelan yang sama.

Silakan baca terus.

Seluruh kode pelat boiler untuk berbagai metode regresi linier tersedia di sini di repositori GitHub saya. Kebanyakan dari mereka didasarkan pada paket SciPy.

SciPy adalah kumpulan algoritme matematika dan fungsi kenyamanan yang dibangun di atas ekstensi Numpy dari Python . Ini menambahkan kekuatan yang signifikan ke sesi Python interaktif dengan menyediakan pengguna dengan perintah dan kelas tingkat tinggi untuk memanipulasi dan memvisualisasikan data.

Izinkan saya membahas setiap metode secara singkat,

Metode: Scipy.polyfit () atau numpy.polyfit ()

Ini adalah fungsi kesesuaian polinomial kuadrat terkecil yang menerima kumpulan data dan fungsi polinomial tingkat apa pun (ditentukan oleh pengguna), dan mengembalikan larik koefisien yang meminimalkan kesalahan kuadrat. Penjelasan rinci tentang fungsi tersebut diberikan di sini. Untuk regresi linier sederhana, seseorang dapat memilih derajat 1. Jika Anda ingin menyesuaikan model dengan derajat yang lebih tinggi, Anda dapat membuat fitur polinomial dari data fitur linier dan juga menyesuaikan dengan model.

Metode: Stats.linregress ()

Ini adalah fungsi regresi linier yang sangat terspesialisasi yang tersedia dalam modul statistik Scipy. Fleksibilitasnya cukup terbatas karena dioptimalkan untuk menghitung regresi kuadrat-terkecil linier untuk dua set pengukuran saja. Dengan demikian, Anda tidak dapat menyesuaikan model linier umum atau regresi multi-variasi menggunakan ini. Tetapi, karena sifatnya yang khusus, ini adalah salah satu metode tercepat dalam hal regresi linier sederhana. Terlepas dari dipasang koefisien dan mencegat jangka, juga mengembalikan statistik dasar seperti R koefisien ² dan standard error.

Metode: Optimize.curve_fit ()

Ini sejalan dengan metode Polyfit, tetapi lebih umum di alam. Fungsi yang kuat dari modul scipy.optimize ini dapat menyesuaikan fungsi yang ditentukan pengguna ke kumpulan data dengan melakukan minimisasi kuadrat terkecil.

Untuk regresi linier sederhana, seseorang cukup menulis fungsi linier mx + c dan memanggil penduga ini. Tak perlu dikatakan bahwa ini juga berfungsi untuk regresi multi-variate. Ini mengembalikan array parameter fungsi yang ukuran kuadrat terkecilnya diminimalkan dan matriks kovarian terkait.

Metode: numpy.linalg.lstsq

Ini adalah metode dasar untuk menghitung solusi kuadrat terkecil ke sistem persamaan linier dengan faktorisasi matriks. Itu berasal dari modul aljabar linier praktis paket numpy. Di bawah tenda, ia memecahkan persamaan ax = b dengan menghitung vektor x yang meminimalkan norma 2 Euclidean || b - kapak || ² .

Persamaannya mungkin kurang, baik, atau terlalu ditentukan (yaitu, jumlah baris bebas linier dari a dapat kurang dari, sama dengan, atau lebih besar dari jumlah kolom bebas liniernya). Jika a adalah kuadrat dan pangkat penuh, maka x (tetapi untuk kesalahan pembulatan) adalah solusi "tepat" dari persamaan tersebut.

Anda dapat melakukan regresi sederhana atau multi-variasi dengan ini dan mendapatkan kembali koefisien dan residu yang dihitung. Satu trik kecil adalah sebelum memanggil fungsi ini Anda harus menambahkan kolom 1 ke data x untuk menghitung suku intersep. Ternyata ini adalah salah satu metode yang lebih cepat untuk mencoba masalah regresi linier.

Metode: Statsmodels.OLS ()

Statsmodels adalah paket Python kecil yang bagus yang menyediakan kelas dan fungsi untuk estimasi banyak model statistik yang berbeda, serta untuk melakukan uji statistik, dan eksplorasi data statistik. Daftar lengkap statistik hasil tersedia untuk setiap penaksir. Hasilnya diuji terhadap paket statistik yang ada untuk memastikan kebenarannya.

Untuk regresi linier, seseorang dapat menggunakan fungsi OLS atau Ordinary-Least-Square dari paket ini dan mendapatkan informasi statistik lengkap tentang proses estimasi.

Satu trik kecil yang perlu diingat adalah Anda harus menambahkan konstanta secara manual ke data x untuk menghitung intersep, jika tidak secara default hanya akan melaporkan koefisiennya. Di bawah ini adalah cuplikan ringkasan hasil lengkap dari model OLS. Ia sekaya bahasa statistik fungsional seperti R atau Julia.

Metode: Solusi analitik menggunakan metode invers matriks

Untuk masalah regresi linier yang terkondisi dengan baik (setidaknya di mana # titik data> # fitur), solusi matriks bentuk tertutup sederhana tersedia untuk menghitung koefisien yang menjamin minimalisasi kuadrat-terkecil. Itu diberikan oleh,

Derivasi rinci dan diskusi tentang solusi ini dibahas di sini.

Satu memiliki dua pilihan di sini:

(a) menggunakan invers matriks perkalian sederhana.

(b) pertama menghitung matriks pseudoinverse umum Moore-Penrose dari data-x diikuti dengan mengambil perkalian titik dengan data-y. Karena proses kedua ini melibatkan dekomposisi nilai tunggal (SVD), proses ini lebih lambat tetapi dapat bekerja untuk kumpulan data yang tidak terkondisi dengan baik.

Metode: sklearn.linear_model.LinearRegression ()

Ini adalah metode klasik yang digunakan oleh sebagian besar insinyur pembelajaran mesin dan ilmuwan data. Tentu saja, untuk masalah dunia nyata mungkin tidak pernah banyak digunakan dan digantikan oleh algoritma yang divalidasi silang dan diregulasi seperti regresi Lasso atau regresi Ridge. Namun inti penting dari fungsi lanjutan tersebut terletak pada model ini.

Mengukur kecepatan dan kompleksitas waktu dari metode ini

Sebagai seorang data scientist, seseorang harus selalu mencari metode / fungsi yang akurat namun cepat untuk melakukan pekerjaan pemodelan data. Jika metode ini lambat secara inheren, maka itu akan membuat hambatan eksekusi untuk kumpulan data yang besar.

Cara yang baik untuk menentukan skalabilitas adalah dengan menjalankan model untuk meningkatkan ukuran kumpulan data, mengekstrak waktu eksekusi untuk semua proses dan memetakan tren.

Berikut adalah kode pelat ketel untuk ini. Dan inilah hasilnya. Karena kesederhanaannya, stats.linregress dan metode invers matriks sederhana adalah yang tercepat, bahkan hingga 10 juta titik data.

Ringkasan

Sebagai data scientist, seseorang harus selalu mengeksplorasi beberapa opsi untuk menyelesaikan tugas analisis atau pemodelan yang sama dan memilih yang terbaik untuk masalah khususnya.

Pada artikel ini, kami membahas 8 cara melakukan regresi linier sederhana. Sebagian besar dari mereka juga dapat diskalakan ke pemodelan regresi multi-variat dan polinomial yang lebih umum. Kami tidak mencantumkan R² yang sesuai untuk metode ini karena semuanya sangat mendekati 1.

Untuk regresi variabel tunggal, dengan jutaan titik data yang dibuat secara artifisial, koefisien regresi diperkirakan dengan sangat baik.

Tujuan artikel ini terutama untuk membahas kecepatan relatif / kompleksitas komputasi dari metode ini. Kami menunjukkan ukuran kompleksitas komputasi masing-masing dengan menguji pada kumpulan data yang disintesis dengan ukuran yang meningkat (hingga 10 juta sampel). Anehnya, solusi analitik invers matriks sederhana bekerja cukup cepat dibandingkan dengan Model Linear yang banyak digunakan scikit-learn.

Jika Anda memiliki pertanyaan atau ide untuk dibagikan, silakan hubungi penulis di tirthajyoti [AT] gmail.com . Anda juga dapat memeriksa repositori GitHub penulis untuk cuplikan kode menyenangkan lainnya di Python, R, atau MATLAB dan sumber pembelajaran mesin. Jika Anda, seperti saya, bersemangat tentang pembelajaran mesin / ilmu data / semikonduktor, silakan tambahkan saya di LinkedIn atau ikuti saya di Twitter.