Ramalan Harga Rumah AS

Ramalan Harga Rumah As



Membina rumah adalah salah satu faktor yang mencabar dalam kehidupan kita. Sebelum pembinaan, anda boleh menganggarkan harga rumah anda berdasarkan harga rumah sebelumnya. Faktor yang mempengaruhi harga rumah termasuk jumlah bilik (katil, bilik mandi, dll.) dan keluasan tanah. Dengan ini, kita boleh menganggarkan bajet yang diperlukan untuk membina rumah.

Dalam panduan ini, kita akan melihat cara meramalkan harga rumah AS menggunakan Pembelajaran Mesin melalui Python. Mula-mula, kami membincangkan set data yang kami gunakan dan kemudian praproses data. Selepas itu, kami menggambarkan atribut yang terdapat dalam set data dan menggunakan algoritma Pembelajaran Mesin yang berbeza pada set data latihan (Seattle, Washington Ogos 2022 – Disember 2022). Akhir sekali, kami menamatkan panduan ini dengan meramalkan harga beberapa rumah yang terdapat dalam set data Ujian. Sebelum melaksanakan projek ini, kita perlu memahami terminologi Pembelajaran Mesin yang digunakan dalam projek ini.







Regresi

Dalam Pembelajaran Mesin, jika anda bekerja dengan data berangka, anda perlu memahami Regresi. Regresi ialah Teknik Pembelajaran Terselia dalam Pembelajaran Mesin yang digunakan untuk memahami hubungan antara atribut bebas dan atribut bergantung (label/sasaran kelas). Mesin meramalkan harga rumah dengan mempelajari setiap rekod yang terdapat dalam set data. Oleh itu, ia adalah pembelajaran yang diselia.



Sebagai contoh, dalam senario kami, atribut bebas ialah bilangan katil, bilangan tempat mandi, saiz tanah, poskod, dll. Berdasarkan ini, kami dapat meramalkan harga rumah kami. Jadi, ini adalah sifat bebas yang tidak bergantung pada apa-apa. Harga ialah atribut sasaran atau label kelas yang bergantung pada atribut ini.



1. Regresi Linear

Algoritma Regresi Linear menunjukkan hubungan linear antara pembolehubah atribut bersandar (Y) dan atribut bebas (X). Secara matematik, kita boleh menilainya seperti berikut:





DAN = aX+b

Di sini, 'a' dan 'b' ialah Pekali Linear.

Dalam Python, LinearRegression() tersedia dalam modul 'sklearn.linear_model'. Kami akan melihat bagaimana untuk menentukan ini semasa melaksanakan projek. Berikut ialah model dengan parameter:



2. Pokok Keputusan

Pada asasnya, Pokok Keputusan ialah perwakilan grafik untuk mendapatkan semua penyelesaian yang mungkin untuk masalah berdasarkan syarat yang disediakan menggunakan nod. Nod Keputusan digunakan untuk membuat keputusan dan nod Daun merujuk kepada output keputusan tertentu. Kita boleh meramalkan harga rumah kita dengan Decision Tree Regressor.

Dalam Python, DecisionTreeRegressor tersedia dalam modul 'sklearn.tree'. Kami akan melihat bagaimana untuk menentukan ini semasa melaksanakan projek. Berikut ialah model dengan parameter:

3. Hutan Rawak

Random Forest melakukan fungsi yang sama yang serupa dengan Decision Tree. Tetapi ia memerlukan Hutan (pengumpulan Pokok Keputusan) dan menggabungkan (nilai min) semua output Pokok Keputusan. Sebagai contoh, saiz Hutan Rawak ialah 3. Jadi, secara dalaman, tiga pokok Keputusan dicipta dan hasil Harga Rumah bagi Pokok Keputusan pertama ialah 20000. Hasil Harga Rumah bagi Pokok Keputusan kedua ialah 20000. Dan hasil Harga Rumah bagi Pokok Keputusan terakhir ialah 10000. 16,666.666 adalah hasil akhir ((20000+20000+10000)/3).

Dalam Python, RandomForestRegressor tersedia dalam modul 'sklearn.ensemble'. Berikut ialah model dengan parameter. Kita boleh menentukan bilangan pokok dalam parameter 'n_estimators'. Ia adalah 100 secara lalai.

Perlaksanaan

Lihat dengan cepat langkah-langkah yang terlibat dalam meramalkan harga Rumah AS. Kami menganggap set data houses_train (fail CSV) dengan rekod 2016 (digunakan untuk melatih model Pembelajaran Mesin). Kemudian, kami meramalkan rekod harga rumah (505) yang terdapat dalam fail house_test.

1. Memuatkan Set Data Kereta Api dan Ujian

Pandas ialah modul tersedia dalam Python yang digunakan untuk analisis data. Kami menggunakan modul ini untuk memuatkan set data ke dalam Persekitaran Python. Di sini, kami menggunakan Google Co sebagai Persekitaran Kod. Ini tersedia secara percuma. Hanya akaun Google diperlukan.

Pertama, kita perlu memuatkan fail daripada PC tempatan kita ke Colab Env. Muat turun set data daripada di sini .

# Muat naik fail houses_train.csv dan house_test.csv ke dalam Google Colab anda

# satu demi satu.

daripada google. ET AL import fail

fail. muat naik ( )

read_csv() ialah fungsi yang digunakan untuk memuatkan data CSV ke dalam pembolehubah. Ia mengambil nama fail sebagai parameter.

import panda

# Muatkan houses_train.csv ke dalam pembolehubah train_data

kereta_data = panda. read_csv ( 'houses_train.csv' )

# Muatkan house_test.csv ke dalam pembolehubah data_test

data_pengujian = panda. read_csv ( 'house_test.csv' )

# Simpan data_ujian ke dalam pembolehubah data_ujian1

data_ujian1 = data_pengujian

Mari lihat kiraan lajur dan rekod bukan nol dalam setiap lajur. Pandas.DataFrame.info() digunakan untuk mendapatkan maklumat ini.

cetak ( kereta_data. info ( ) )

cetak ( data_ujian1. info ( ) )

Pengeluaran:

2. Prapemprosesan Data

Dalam kedua-dua set data, lajur 'saiz_lot' memegang nilai dengan kaki persegi dan ekar (Anda akan menemui varians dengan melihat baris dalam lajur 'unit_saiz_lot'). Tetapi formatnya hendaklah dalam sqft. Jadi, kita perlu menukar nilai dalam lajur 'saiz_lot' daripada ekar kepada kaki persegi. Begitu juga, ini perlu dilakukan untuk 'data_ujian1'.

DataFrame.loc[] digunakan di sini untuk mencari 'unit_saiz_lot' dengan 'ekar' dan mendarabkan nilai yang terdapat dalam 'saiz_lot' dengan 43560.

# Tukar nilai ekar bersaiz lot kepada kaki persegi dalam train_data

kereta_data. tempat [ ( kereta_data [ 'unit_saiz_lot' ] == 'ekar' ) , 'saiz lot' ] = kereta_data [ 'saiz lot' ] * 43560

# Tukar nilai ekar saiz lot kepada kaki persegi dalam test_data1

data_ujian1. tempat [ ( data_ujian1 [ 'unit_saiz_lot' ] == 'ekar' ) , 'saiz lot' ] = data_ujian1 [ 'saiz lot' ] * 43560

cetak ( kereta_data. kepala ( ) )

cetak ( data_ujian1. kepala ( ) )

Pengeluaran:

Sekarang, anda akan melihat bahawa semua nilai dalam lajur 'saiz_lot' ialah nilai kaki persegi.

Anda melihat beberapa nilai yang tiada dalam lajur ini. Mari gantikan nilai NaN yang terdapat dalam lajur dengan min lajur yang sama dalam kedua-dua set data.

DataFrame['column_name'].fillna() digunakan untuk mengisi nilai yang hilang dengan min menggunakan fungsi min(). DataFrame['column_name'].mean() dihantar sebagai parameter kepada fungsi finna(). Mari paparkan min dan lihat kiraan sekarang:

# Isikan nilai yang tiada dalam lajur lot_size dengan Purata nilai sedia ada

kereta_data [ 'saiz lot' ] = kereta_data [ 'saiz lot' ] . rasa ( kereta_data [ 'saiz lot' ] . bermakna ( ) )

# Min Paparan

cetak ( 'Nilai Min data kereta api: ' , kereta_data [ 'saiz lot' ] . bermakna ( ) )

cetak ( sahaja ( kereta_data [ 'saiz lot' ] ) )

# Isikan nilai yang tiada dalam lajur lot_size dengan Purata nilai sedia ada

data_ujian1 [ 'saiz lot' ] = data_ujian1 [ 'saiz lot' ] . rasa ( data_ujian1 [ 'saiz lot' ] . bermakna ( ) )

# Min Paparan

cetak ( 'Data ujian Nilai Min: ' , data_ujian1 [ 'saiz lot' ] . bermakna ( ) )

cetak ( sahaja ( data_ujian1 [ 'saiz lot' ] ) )

Pengeluaran:

Nilai yang hilang yang terdapat dalam lajur 'lot_size' Train Dataset digantikan dengan nilai min 18789.95194 dan nilai yang hilang yang terdapat dalam lajur 'lot_size' Set Data Ujian digantikan dengan nilai min 8961.0

3. Pembersihan Data

Semasa melatih model, terdapat beberapa atribut yang tidak diperlukan yang tidak diperlukan untuk meramalkan hasilnya. Dalam kes kami, terdapat tiga atribut iaitu 'unit_saiz_lot', 'kod_zip' dan 'unit_saiz' untuk dialih keluar daripada kedua-dua set data. pandas.DataFrame.drop() digunakan untuk mengalih keluar ketiga-tiga lajur ini daripada kedua-dua set data.

kereta_data = kereta_data. jatuhkan ( [ 'unit_saiz_lot' , 'zip_code' , 'saiz_unit' ] , paksi = 1 )

data_ujian1 = data_ujian1. jatuhkan ( [ 'unit_saiz_lot' , 'zip_code' , 'saiz_unit' ] , paksi = 1 )

cetak ( kereta_data. info ( ) )

cetak ( data_ujian1. info ( ) )

Pengeluaran:

Kini, set data berada dalam keadaan baik. Lajur yang tidak perlu dialih keluar dan nilai yang hilang tidak wujud.

4. Visualisasi Data

Mari buat histogram untuk lajur data Kereta api. Fungsi pandas.DataFrame.hist() digunakan untuk menjana histogram untuk semua atribut.

kereta_data. sejarah ( buah ara = ( 4 , 9 ) )

Pengeluaran:

Histogram dijana untuk lajur katil, tempat mandi, saiz, saiz_lot dan harga untuk data Kereta api.

Mari kita wujudkan korelasi untuk semua bidang berkenaan antara satu sama lain. Modul Plotly.express digunakan untuk merancang nilai berkorelasi.

import secara plot. ekspres

corr = kereta_data. corr ( )

# Plot data berkorelasi

lihat_rajah = secara plot. ekspres . tayangan ( corr , teks_auto = betul )

# Paparan

lihat_rajah. tunjuk ( )

Pengeluaran:

  1. Katil adalah 0.2935 berkorelasi dengan harga, -0.059 berkorelasi dengan lot_size, 0.77 berkorelasi dengan saiz dan 0.65 berkorelasi dengan tempat mandi.
  2. Tempat mandi adalah 0.3173 berkorelasi dengan harga, -0.054 berkorelasi dengan lot_size, 0.667 berkorelasi dengan tempat mandi dan 0.771 berkorelasi dengan katil.
  3. Saiznya ialah 0.444 berkorelasi dengan harga, -0.044 berkorelasi dengan lot_size, 0.667 berkorelasi dengan saiz, dan 0.652 berkorelasi dengan katil.

5. Penyediaan Model

Kita perlu menetapkan harga sebagai sasaran dengan mengeluarkannya daripada train_data. Pastikan atribut yang terdapat dalam data Train and Test harus sama dalam fasa ini.

sasaran = kereta_data [ 'harga' ]

kereta_data = kereta_data. jatuhkan ( [ 'harga' ] , paksi = 1 )

cetak ( kereta_data. info ( ) )

cetak ( data_ujian1. info ( ) )

Pengeluaran:

Kini, terdapat empat atribut bebas (katil, tempat mandi, saiz dan saiz_lot) dan harga ialah atribut bergantung yang bergantung pada empat atribut ini.

6. Melatih Model

Pertama, kami menggunakan algoritma RandomForestRegressor. Import ia daripada pakej 'sklearn.ensemble'. Ia adalah Teknik Ensembling.

  1. Cipta model daripada RandomForestRegressor(). Kami tidak menghantar sebarang parameter kepada model ini. Jadi, bilangan Pokok Keputusan ialah 100 secara lalai.
  2. Gunakan kaedah fit() untuk menyesuaikan model. Ia memerlukan dua parameter. Parameter pertama ialah atribut bergantung dan parameter kedua ialah label/sasaran kelas.
  3. Gunakan kaedah score() untuk melihat Ketepatan Model. Ia juga mengambil parameter yang sama serupa dengan kaedah fit().
daripada belajar ensemble import RandomForestRegressor

# Tentukan Model

model1 = RandomForestRegressor ( )

# Muatkan model

model1. sesuai ( kereta_data , sasaran )

# Ketepatan Model

cetak ( model1. skor ( kereta_data , sasaran ) * 100 )

Pengeluaran:

86.08400889419033

7. Uji Model dan Simpan Hasilnya

Ini adalah langkah terakhir di mana kita perlu meramalkan hasilnya dan menyimpannya.

  1. Kaedah predict() digunakan untuk meramal data Ujian. Ia digunakan dengan model dan mengambil senarai nilai/Frame Bersarang.
  2. Gunakan kaedah to_csv() untuk menyimpan hasil ke dalam fail CSV.
  3. Muat turun fail daripada persekitaran Python (Google Colab).
# Ramalkan test_data1 dengan model1.

data_pengujian [ 'Harga' ] = model1. menjangkakan ( data_ujian1 )

# Simpan data_ujian ke test_results.csv

data_pengujian. to_csv ( 'test_results.csv' )

# Muat turun fail ini daripada Colab

fail. muat turun ( 'test_results.csv' )

Pengeluaran:

Mari tunjukkan 20 rekod daripada 505 rekod. Anda boleh melihat bahawa lajur Harga memegang nilai ramalan untuk setiap rumah.

Model Lain

Mari kita ramalkan rumah menggunakan DecisionTreeRegressor. Anda boleh mengimportnya daripada modul 'sklearn.tree'.

daripada belajar pokok import DecisionTreeRegressor

# Tentukan Model

model2 = DecisionTreeRegressor ( )

# Muatkan model

model2. sesuai ( kereta_data , sasaran )

# Ketepatan Model

cetak ( model2. skor ( kereta_data , sasaran ) * 100 )

# Ramalkan test_data1 dengan model1.

data_pengujian [ 'Harga' ] = model2. menjangkakan ( data_ujian1 )

# Simpan data_ujian ke test_results.csv

data_pengujian. to_csv ( 'test_results.csv' )

# Muat turun fail ini daripada Colab

fail. muat turun ( 'test_results.csv' )

Pengeluaran:

99.94183165335028

Anda boleh melihat hasil yang diramalkan di sini:

Mari kita ramalkan rumah menggunakan LinearrEgression. Import model daripada modul 'sklearn.linear_model'.

daripada belajar model_linear import Regresi Linear

# Tentukan Model

model3 = Regresi Linear ( )

# Muatkan model

model3. sesuai ( kereta_data , sasaran )

# Ramalkan test_data1 dengan model1.

data_pengujian [ 'Harga' ] = model3. menjangkakan ( data_ujian1 )

# Simpan data_ujian ke test_results.csv

data_pengujian. to_csv ( 'test_results.csv' )

# Muat turun fail ini daripada Colab

fail. muat turun ( 'test_results.csv' )

Anda boleh melihat hasil yang diramalkan di sini:

Kesimpulan

Kini, anda dapat meramalkan harga rumah anda berdasarkan atribut seperti bilangan bilik, keluasan tanah anda, dsb. Dalam panduan ini, kami mempertimbangkan data rumah sebenar dari Seattle, Washington. Menggunakan teknik Regresi seperti Regresi Linear, Pokok Keputusan dan Hutan Rawak, kami meramalkan harga 505 rumah. Semua langkah (Prapemprosesan Data, Pembersihan Data dan Visualisasi Data) yang perlu dilakukan sebelum melatih model dijelaskan langkah demi langkah dengan coretan dan output kod.