Bu kılavuzda Python aracılığıyla Makine Öğrenimini kullanarak ABD evlerinin fiyatını nasıl tahmin edeceğimizi göreceğiz. Öncelikle kullandığımız veri setini tartışıyoruz ve ardından veriyi ön işleme tabi tutuyoruz. Daha sonra veri setinde mevcut olan nitelikleri görselleştiriyoruz ve eğitim veri seti üzerinde farklı Makine Öğrenimi algoritmaları uyguluyoruz (Seattle, Washington Ağustos 2022 – Aralık 2022). Son olarak Test veri setinde yer alan bazı evlerin fiyatlarını tahmin ederek bu rehberi sonlandırıyoruz. Bu projeyi uygulamaya geçmeden önce bu projede kullanılan Makine Öğrenimi terminolojilerini anlamamız gerekiyor.
Regresyon
Makine Öğreniminde sayısal verilerle çalışıyorsanız Regresyon'u anlamanız gerekir. Regresyon, Makine Öğreniminde bağımsız nitelikler ile bağımlı nitelikler (sınıf etiketi/hedef) arasındaki ilişkiyi anlamak için kullanılan Denetimli Öğrenme Tekniğidir. Makine, veri setinde bulunan her kaydı öğrenerek ev fiyatını tahmin ediyor. Dolayısıyla denetimli bir öğrenmedir.
Örneğin senaryomuzda bağımsız özellikler yatak sayısı, banyo sayısı, arazi büyüklüğü, posta kodu vb.'dir. Bunlara dayanarak evimizin fiyatını tahmin edebiliyoruz. Yani bunlar hiçbir şeye bağlı olmayan bağımsız niteliklerdir. Fiyat, bu özelliklere bağlı olan hedef özellik veya sınıf etiketidir.
1. Doğrusal Regresyon
Doğrusal Regresyon algoritması, bağımlı nitelik (Y) ve bağımsız nitelik (X) değişkenleri arasında doğrusal bir ilişki gösterir. Matematiksel olarak şu şekilde değerlendirebiliriz:
VE = aX+b
Burada “a” ve “b” Doğrusal Katsayılardır.
Python'da LinearRegression(), “sklearn.linear_model” modülünde mevcuttur. Projeyi hayata geçirirken bunu nasıl belirteceğimizi göreceğiz. Aşağıdaki parametrelere sahip modeldir:
2. Karar Ağacı
Temel olarak Karar Ağacı, düğümler kullanılarak sağlanan koşullara dayalı olarak bir problemin tüm olası çözümlerini elde etmek için kullanılan grafiksel bir gösterimdir. Karar düğümü karar vermek için kullanılır ve Yaprak düğümü belirli bir kararın çıktısını ifade eder. Karar Ağacı Regresörü ile evimizin fiyatını tahmin edebiliyoruz.
Python'da DecisionTreeRegressor “sklearn.tree” modülünde mevcuttur. Projeyi hayata geçirirken bunu nasıl belirteceğimizi göreceğiz. Aşağıdaki parametrelere sahip modeldir:
3. Rastgele Orman
Rastgele Orman, Karar Ağacı ile aynı işlevi gerçekleştirir. Ancak bir Orman (Karar Ağaçları koleksiyonu) alır ve Karar Ağaçlarının tüm çıktılarını birleştirir (ortalama değer). Örneğin Rastgele Orman boyutu 3'tür. Böylece dahili olarak üç Karar ağacı oluşturulur ve ilk Karar Ağacının Konut Fiyatı sonucu 20000 olur. İkinci Karar Ağacının Konut Fiyatı sonucu 20000 olur. son Karar Ağacı 10000'dir. 16.666.666 nihai sonuçtur ((20000+20000+10000)/3).
Python'da RandomForestRegressor “sklearn.ensemble” modülünde mevcuttur. Parametreli model aşağıdadır. Ağaç sayısını “n_estimators” parametresinde belirtebiliriz. Varsayılan olarak 100'dür.
Uygulama
ABD Konut fiyatını tahmin etme adımlarını hızlı bir şekilde görün. 2016 kayıtlarına sahip evlerin_train (CSV dosyası) veri kümesini (Makine Öğrenimi modelini eğitmek için kullanılır) dikkate alıyoruz. Daha sonra house_test dosyasında bulunan evin fiyat (505) kayıtlarını tahmin ediyoruz.
1. Eğitim ve Test Veri Kümelerini Yükleme
Pandas, Python'da veri analizi için kullanılan mevcut modüldür. Veri setlerini Python Ortamına yüklemek için bu modülü kullanıyoruz. Burada şunu kullanıyoruz: Google Şirketi Kod Ortamı olarak. Bu ücretsiz olarak mevcuttur. Sadece bir Google hesabı gereklidir.
Öncelikle dosyaları yerel bilgisayarımızdan Colab Env'e yüklememiz gerekiyor. Veri kümelerini şuradan indirin: Burada .
# Houses_train.csv ve house_test.csv dosyalarını Google Colab'ınıza yükleyin# birbiri ardına.
itibaren google. ve diğerleri içe aktarmak Dosyalar
Dosyalar. yüklemek ( )
Read_csv(), CSV verilerini bir değişkene yüklemek için kullanılan işlevdir. Parametre olarak dosya adını alır.
içe aktarmak pandalar# house_train.csv dosyasını train_data değişkenine yükleyin
tren_verileri = pandalar. okuma_csv ( 'houses_train.csv' )
# house_test.csv dosyasını test_data değişkenine yükleyin
test verisi = pandalar. okuma_csv ( 'house_test.csv' )
# test_data'yı test_data1 değişkenine kaydedin
test_data1 = test verisi
Her sütundaki sütunları ve boş olmayan kayıtların sayısını görüntüleyelim. Bu bilgiyi almak için Pandas.DataFrame.info() kullanılır.
Yazdır ( train_data. bilgi ( ) )Yazdır ( test_data1. bilgi ( ) )
Çıktı:
2. Veri Ön İşleme
Her iki veri setinde de “lot_size” sütunu sqft ve acre değerlerini tutar (“lot_size_unit’s” sütunundaki satırları görerek varyansı bulabilirsiniz). Ancak format metrekare cinsinden olmalıdır. Bu yüzden “lot_size” sütunundaki değerleri dönümden metrekareye dönüştürmemiz gerekiyor. Benzer şekilde, bu “test_data1” için de yapılmalıdır.
DataFrame.loc[] burada 'acre' ile 'lot_size_units'i bulmak ve 'lot_size'de bulunan değeri 43560 ile çarpmak için kullanılır.
# train_data'da lot_size acre değerlerini Square feet'e dönüştürüntrain_data. yer [ ( tren_verileri [ 'lot_size_units' ] == 'dönüm' ) , 'lot büyüklüğü' ] = tren_verileri [ 'lot büyüklüğü' ] * 43560
# Test_data1'de lot_size acre değerlerini Square feet'e dönüştürün
test_data1. yer [ ( test_data1 [ 'lot_size_units' ] == 'dönüm' ) , 'lot büyüklüğü' ] = test_data1 [ 'lot büyüklüğü' ] * 43560
Yazdır ( train_data. KAFA ( ) )
Yazdır ( test_data1. KAFA ( ) )
Çıktı:
Artık “lot_size” sütunundaki tüm değerlerin sqft değerleri olduğunu göreceksiniz.
Bu sütunda bazı eksik değerleri görüyorsunuz. Sütunlarda bulunan NaN değerlerini her iki veri kümesindeki aynı sütunun ortalamasıyla değiştirelim.
DataFrame['sütun_adı'].fillna(), ortalama() işlevini kullanarak eksik değerleri ortalamayla doldurmak için kullanılır. DataFrame['sütun_adı'].mean(), finna() işlevine parametre olarak iletilir. Şimdi ortalamayı görüntüleyelim ve sayıyı görelim:
# lot_size sütunundaki eksik değerleri, mevcut değerlerin ortalaması ile dolduruntren_verileri [ 'lot büyüklüğü' ] = tren_verileri [ 'lot büyüklüğü' ] . hissetmek ( tren_verileri [ 'lot büyüklüğü' ] . Anlam ( ) )
# Görüntüleme Ortalaması
Yazdır ( 'Eğitim verileri Ortalama Değeri: ' , tren_verileri [ 'lot büyüklüğü' ] . Anlam ( ) )
Yazdır ( sadece ( tren_verileri [ 'lot büyüklüğü' ] ) )
# lot_size sütunundaki eksik değerleri, mevcut değerlerin ortalaması ile doldurun
test_data1 [ 'lot büyüklüğü' ] = test_data1 [ 'lot büyüklüğü' ] . hissetmek ( test_data1 [ 'lot büyüklüğü' ] . Anlam ( ) )
# Görüntüleme Ortalaması
Yazdır ( 'Test verileri Ortalama Değeri: ' , test_data1 [ 'lot büyüklüğü' ] . Anlam ( ) )
Yazdır ( sadece ( test_data1 [ 'lot büyüklüğü' ] ) )
Çıktı:
Train Dataset sütununda bulunan eksik değerler, 18789.95194 ortalama değeriyle, 'lot_size' Test Dataset sütununda bulunan eksik değerler ise 8961.0 ortalama değeriyle değiştirildi.
3. Veri Temizleme
Modeli eğitirken sonucu tahmin etmek için gerekli olmayan bazı gereksiz özellikler vardır. Bizim durumumuzda her iki veri kümesinden de kaldırılacak “lot_size_units”, “zip_code” ve “size_units” olmak üzere üç özellik bulunmaktadır. pandas.DataFrame.drop(), bu üç sütunu her iki veri kümesinden kaldırmak için kullanılır.
tren_verileri = train_data. düşürmek ( [ 'lot_size_units' , 'posta kodu' , 'size_units' ] , eksen = 1 )test_data1 = test_data1. düşürmek ( [ 'lot_size_units' , 'posta kodu' , 'size_units' ] , eksen = 1 )
Yazdır ( train_data. bilgi ( ) )
Yazdır ( test_data1. bilgi ( ) )
Çıktı:
Artık veri kümeleri iyi durumda. Gereksiz sütunlar kaldırılır ve eksik değerler mevcut değildir.
4. Veri Görselleştirme
Train verisinin sütunları için bir histogram oluşturalım. pandas.DataFrame.hist() işlevi, tüm nitelikler için histogramlar oluşturmak amacıyla kullanılır.
train_data. geçmiş ( incir büyüklüğü = ( 4 , 9 ) )Çıktı:
Tren verilerine ilişkin yataklar, banyolar, boyut, lot_size ve fiyat sütunları için histogram oluşturulur.
Tüm alanların birbirine göre korelasyonunu oluşturalım. İlişkili değerleri çizmek için Plotly.express modülü kullanılır.
içe aktarmak planlı bir şekilde. ifade etmekdüzelt = train_data. düzelt ( )
# İlişkili verilerin grafiğini çizin
görünüm_fig = planlı bir şekilde. ifade etmek . gösteri ( düzelt , metin_auto = Doğru )
# Görüntülemek
view_fig. göstermek ( )
Çıktı:
- Yataklar 0,2935 fiyatla, -0,059 lot_size ile, 0,77 boyutla ve 0,65 banyolarla ilişkilidir.
- Banyolar 0,3173 fiyatla, -0,054 lot_size ile, 0,667 banyolarla ve 0,771 yataklarla ilişkilidir.
- Boyut 0,444 fiyatla, -0,044 lot_size ile, 0,667 boyutla ve 0,652 yataklarla ilişkilidir.
5. Modelin Hazırlanması
Fiyatı train_data'dan çıkararak hedef olarak belirlememiz gerekiyor. Eğitim ve Test verilerinde mevcut olan özelliklerin bu aşamada aynı olduğundan emin olun.
hedef = tren_verileri [ 'fiyat' ]tren_verileri = train_data. düşürmek ( [ 'fiyat' ] , eksen = 1 )
Yazdır ( train_data. bilgi ( ) )
Yazdır ( test_data1. bilgi ( ) )
Çıktı:
Artık dört bağımsız özellik (yatak, banyo, boyut ve lot_size) vardır ve fiyat, bu dört özelliğe bağlı olan bağımlı özelliktir.
6. Modeli Eğitmek
Öncelikle RandomForestRegressor algoritmasını uyguluyoruz. “sklearn.ensemble” paketinden içe aktarın. Bu bir Birleştirme Tekniğidir.
- RandomForestRegressor()'dan bir model oluşturun. Bu modele herhangi bir parametre aktarmıyoruz. Yani Karar Ağaçlarının sayısı varsayılan olarak 100'dür.
- Modeli sığdırmak için fit() yöntemini kullanın. İki parametre alır. İlk parametre bağımlı özellikler, ikinci parametre ise sınıf etiketi/hedefidir.
- Model Doğruluğunu görmek için Score() yöntemini kullanın. Ayrıca fit() yöntemiyle aynı parametreleri alır.
# Modeli Tanımlayın
model1 = Rastgele OrmanRegresör ( )
# Modeli sığdır
modeli1. yerleştirmek ( tren_verileri , hedef )
# Model Doğruluğu
Yazdır ( modeli1. Gol ( tren_verileri , hedef ) * 100 )
Çıktı:
86.084008894190337. Modeli Test Edin ve Sonuçları Saklayın
Bu, sonucu tahmin etmemiz ve saklamamız gereken son adımdır.
- Tahmin() yöntemi Test verilerini tahmin etmek için kullanılır. Modelle birlikte kullanılır ve İç İçe değerler/DataFrame listesini alır.
- Sonuçları CSV dosyasında depolamak için to_csv() yöntemini kullanın.
- Dosyayı Python ortamından (Google Colab) indirin.
test verisi [ 'Fiyat' ] = modeli1. tahmin etmek ( test_data1 )
# test_data'yı test_results.csv'ye kaydedin
test verisi. to_csv ( 'test_results.csv' )
# Bu dosyayı Colab'dan indirin
Dosyalar. indirmek ( 'test_results.csv' )
Çıktı:
505 kayıttan 20 tanesini gösterelim. Fiyat sütununda her ev için öngörülen değerlerin yer aldığını görebilirsiniz.
Diğer modeller
DecisionTreeRegressor kullanarak evleri tahmin edelim. “sklearn.tree” modülünden içe aktarabilirsiniz.
itibaren öğrendi ağaç içe aktarmak Karar AğacıRegresör# Modeli Tanımla
model2 = Karar AğacıRegresör ( )
# Modeli sığdır
model2. yerleştirmek ( tren_verileri , hedef )
# Model Doğruluğu
Yazdır ( model2. Gol ( tren_verileri , hedef ) * 100 )
# Model1 ile test_verileri1'i tahmin edin.
test verisi [ 'Fiyat' ] = model2. tahmin etmek ( test_data1 )
# test_data'yı test_results.csv'ye kaydedin
test verisi. to_csv ( 'test_results.csv' )
# Bu dosyayı Colab'dan indirin
Dosyalar. indirmek ( 'test_results.csv' )
Çıktı:
99.94183165335028Tahmin edilen sonucu burada görebilirsiniz:
LinearrEgression kullanarak evleri tahmin edelim. Modeli “sklearn.linear_model” modülünden içe aktarın.
itibaren öğrendi doğrusal_model içe aktarmak Doğrusal Regresyon# Modeli Tanımla
model3 = Doğrusal Regresyon ( )
# Modeli sığdır
modeli3. yerleştirmek ( tren_verileri , hedef )
# Model1 ile test_verileri1'i tahmin edin.
test verisi [ 'Fiyat' ] = modeli3. tahmin etmek ( test_data1 )
# test_data'yı test_results.csv'ye kaydedin
test verisi. to_csv ( 'test_results.csv' )
# Bu dosyayı Colab'dan indirin
Dosyalar. indirmek ( 'test_results.csv' )
Tahmin edilen sonucu burada görebilirsiniz:
Çözüm
Artık evinizin fiyatını oda sayısı, arsanızın alanı vb. özelliklere göre tahmin edebiliyorsunuz. Bu kılavuzda Seattle, Washington'daki gerçek ev verilerini dikkate aldık. Doğrusal Regresyon, Karar Ağacı, Rastgele Orman gibi Regresyon tekniklerini kullanarak 505 konutun fiyatını tahmin ettik. Modeli eğitmeden önce yapılması gereken tüm adımlar (Veri Ön İşleme, Veri Temizleme ve Veri Görselleştirme), kod parçacıkları ve çıktılarla adım adım anlatılmaktadır.