Faset ve Etkileşim Terimiyle TensorFlow Doğrusal Regresyon

⚡ Akıllı Özet

Boston konut verileri üzerinde yapılan doğrusal regresyon analizinde, doğru etkileşim terimleri önce bulunduğunda sonuçlar iyileşir. Google Facets bu ilişkileri görsel olarak ortaya koyuyor ve iki kesişen özellik TensorFlow test kaybını 1650'den 1515'e düşürdü.

  • 🔘 Önce veri: Dağılımları ve aykırı değerleri anlamak, herhangi bir model oluşturmadan önce gelir, çünkü bir model yalnızca önceden tespit ettiğiniz bir örüntüyü genelleştirir.
  • ☑️ Özelliklere Genel Bakış: Özellik bazlı istatistikler, eksik değerleri, sıfır ağırlıklı sütunları ve eğitim ile test dağılımı arasındaki sapmaları tek bir tabloda ortaya koyar.
  • ✅ Facets Derinlemesine İnceleme: X ve Y'ye göre gruplandırma, üç yönlü ilişkileri fiyat çeyrek dilimlerine göre renklendirilmiş, okunabilir bir 2 boyutlu grafiğe dönüştürür.
  • 🧪 Korelasyon okuması: Isı haritası ve çiftli ızgara, INDUS'u NOX ile, DIS'i ise her ikisiyle de etkileşim adayı olarak işaretler.
  • ️ Standardizasyon: preprocessing.scale, tahminleyici onları görmeden önce on iki ardışık sütunu ortalar ve CHAS ile PRICE'ı olduğu gibi bırakır.
  • 📈 Ölçülen kazanç: INDUS_NOS ve INDUS_NOS_DIS'in eklenmesi, test bölümünde ortalama kaybı 86.89361'den 79.78876'ya düşürüyor.

TensorFlow'da Facet ve Etkileşim Terimi ile Doğrusal Regresyon

TensorFlow Doğrusal Regresyon

Bu eğitimde verileri nasıl kontrol edeceğinizi ve basit bir doğrusal regresyon görevi oluşturmaya nasıl hazırlayacağınızı öğreneceksiniz.

Bu eğitim iki bölüme ayrılmıştır:

  • Etkileşim arayın
  • Modeli test edin

içinde önceki ders, bir evin ortalama fiyatını tahmin etmek için Boston veri kümesini kullandınız. Boston veri seti yalnızca 506 gözlemden oluşan küçük bir boyuta sahiptir. Bu veri kümesi, yeni doğrusal regresyon algoritmalarını denemek için bir kıyaslama olarak kabul edilir.

Veri kümesi şunlardan oluşur:

Değişken Açıklama
zn 25,000 metrekarenin üzerindeki parseller için imar edilen konut arazilerinin oranı.
indus Kasaba başına perakende olmayan iş alanlarının oranı.
nox nitrik oksit konsantrasyonu
rm konut başına ortalama oda sayısı
yaş 1940'tan önce inşa edilen sahibi tarafından kullanılan birimlerin oranı
dis beş Boston istihdam merkezine olan ağırlıklı mesafeler
vergi Dolar başına tam değerli emlak vergisi oranı 10,000
ptratio bir kasabaya göre öğrenci-öğretmen oranı
Medv Sahibi tarafından kullanılan evlerin ortalama değeri bin dolar olarak
suç Şehirlere göre kişi başına düşen suç oranı
chas Charles River kukla değişkeni (nehri sınırlarsa 1; aksi takdirde 0)
B kasabaya göre siyahların oranı

Bu derste, ortalama fiyatı doğrusal bir regresör kullanarak tahmin edeceğiz ancak odak noktası, belirli bir süreç üzerindedir. makine öğrenme: "veri Hazırlama."

Bir model, verilerdeki modeli genelleştirir. Böyle bir modeli yakalamak için önce onu bulmanız gerekir. Herhangi bir makine öğrenimi algoritmasını çalıştırmadan önce veri analizi yapmak iyi bir uygulamadır.

Doğru özelliklerin seçilmesi modelinizin başarısında büyük fark yaratır. Bir kişinin ücretini tahmin etmeye çalıştığınızı düşünün; eğer cinsiyeti ortak değişken olarak dahil etmezseniz, kötü bir tahmin elde edersiniz.

Modeli geliştirmenin bir başka yolu da bağımsız değişken arasındaki korelasyona bakmaktır. Örneğe dönecek olursak, eğitimi ücreti ve aynı zamanda mesleği tahmin etmek için mükemmel bir aday olarak düşünebilirsiniz. Mesleğin eğitim düzeyine bağlı olduğunu, yani yüksek öğrenimin çoğu zaman daha iyi bir mesleğe yol açtığını söylemek doğru olur. Bu fikri genelleştirirsek, bağımlı değişken ile açıklayıcı değişken arasındaki korelasyonun başka bir açıklayıcı değişkenle büyütülebileceğini söyleyebiliriz.

Eğitimin meslek üzerindeki sınırlı etkisini yakalamak için bir etkileşim terimi kullanabiliriz.

Ücret eğrisinde eğitim ve meslek arasındaki etkileşim terimi gösterilmiştir.

Ücret denklemine bakarsanız şöyle olur:

Ücret denklemi, eğitim ve meslek etkileşim terimiyle genişletilmiştir.

If Etkileşim terimi için beta katsayısı sembolü pozitifse, bu, ek eğitim düzeyinin, yüksek meslek düzeyi için bir evin ortalama değerinde daha yüksek bir artışa yol açtığı anlamına gelir. Başka bir deyişle eğitim ile meslek arasında etkileşim etkisi vardır.

Aynı tahminleyici ailesi ayrıca şunlara da güç veriyor: doğrusal sınıflandırıcı Etiket fiyat yerine sınıf olduğunda. Bu eğitimde, hangi değişkenlerin etkileşim terimleri için iyi bir aday olabileceğini görmeye çalışacağız. Bu tür bilgilerin eklenmesinin daha iyi fiyat tahminine yol açıp açmadığını test edeceğiz.

Özet istatistikler

Modellemeye geçmeden önce izleyebileceğiniz birkaç adım var. Daha önce de belirtildiği gibi, model verilerin genelleştirilmesidir. En iyi uygulama, önce verileri anlamak ve sonra tahmin yapmaktır. Verilerinizi bilmiyorsanız, modelinizi geliştirme şansınız çok azdır.

İlk adım olarak verileri bir pandas veri çerçevesi olarak yükleyin ve bir eğitim seti ve test seti oluşturun.

İpucu: Bu eğitim için matplotlib ve seaborn'un kurulu olması gerekmektedir. Python. Bunu kurabilirsiniz. Python anında paket Jupyter. Sen Yapmamalı Bunu yap

!conda install -- yes matplotlib

fakat

import sys
!{sys.executable} -m pip install matplotlib # Already installed
!{sys.executable} -m pip install seaborn 

Matplotlib ve seaborn'un kurulu olması durumunda bu adımın gerekli olmadığını unutmayın.

Matplotlib grafik oluşturmak için kullanılan kütüphanedir. PythonSeaborn, matplotlib üzerine kurulu bir istatistiksel görselleştirme kütüphanesidir. Aşağıdaki özellikleri sağlar:tracCanlı ve güzel arsalar.

Aşağıdaki kod gerekli kütüphaneleri içe aktarır.

import pandas as pd
from sklearn import datasets
import tensorflow as tf
from sklearn.datasets import load_boston
import numpy as np

Sklearn kütüphanesi Boston veri setini içerir. Verileri içe aktarmak için API'sini arayabilirsiniz.

Sürüm notu: load_boston scikit-learn 1.0 sürümünde kullanımdan kaldırıldı ve scikit-learn 1.2 sürümünde kaldırıldı. Çünkü veri seti ırksal olarak yüklü bir özelliği kodluyor. Mevcut bir kurulumda şunu kullanın: Kaliforniya konutlarını getir Bunun yerine, ham dosyayı kendiniz yükleyin. Aşağıda gösterilen iş akışı değişmemiştir; yalnızca yükleyici farklıdır.

boston = load_boston()
df = pd.DataFrame(boston.data)

Özellik adları, feature_names nesnesinde bir dizi olarak saklanır.

boston.feature_names

Çıktı

array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD','TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')

Sütunları yeniden adlandırabilirsiniz.

df.columns = boston.feature_names
df['PRICE'] = boston.target
df.head(2)

Sütun adları değiştirildikten sonra Boston DataFrame'inin ilk iki satırı.

CHAS değişkenini bir dize değişkeni olarak dönüştürürsünüz ve CHAS = 1 ise evet, CHAS = 0 ise hayır olarak etiketlersiniz.

df['CHAS'] = df['CHAS'].map({1:'yes', 0:'no'})
df['CHAS'].head(5)
0    no
1    no
2    no
3    no
4    no
Name: CHAS, dtype: object

Pandalarla veri kümesini bölmek kolaydır. Veri kümesini yüzde 80'i eğitim seti ve yüzde 20'si test seti olacak şekilde rastgele bölersiniz. Pandalar Veri çerçevesini bölmek için yerleşik bir örnekleme fonksiyonuna sahiptir.

İlk parametre frac 0'dan 1'e kadar bir değerdir. Veri çerçevesinin yüzde 0.8'ini rastgele seçmek için bunu 80'e ayarlarsınız.

`random_state` karıştırma işlemini düzeltir, böylece herkese aynı satırlar gösterilir.

### Create train/test set
df_train=df.sample(frac=0.8,random_state=200)
df_test=df.drop(df_train.index)

Verilerin şeklini alabilirsiniz. Olmalı:

  • Tren seti: 506*0.8 = 405
  • Test seti: 506*0.2 = 101
print(df_train.shape, df_test.shape)

Çıktı

(405, 14) (101, 14)
df_test.head(5)

Çıktı

suç ZN ENDÜSTRİ CAS NOX RM YAŞ DIS RAD VERGİ PTRATIO B LSTAT FİYAT
0 0.00632 18.0 2.31 yok hayır 0.538 6.575 65.2 4.0900 1.0 296.0 15.3 396.90 4.98 24.0
1 0.02731 0.0 7.07 yok hayır 0.469 6.421 78.9 4.9671 2.0 242.0 17.8 396.90 9.14 21.6
3 0.03237 0.0 2.18 yok hayır 0.458 6.998 45.8 6.0622 3.0 222.0 18.7 394.63 2.94 33.4
6 0.08829 12.5 7.87 yok hayır 0.524 6.012 66.6 5.5605 5.0 311.0 15.2 395.60 12.43 22.9
7 0.14455 12.5 7.87 yok hayır 0.524 6.172 96.1 5.9505 5.0 311.0 15.2 396.90 19.15 27.1

Veriler dağınıktır; genellikle dengesizdir ve analiz ve makine öğrenimi eğitimini boşa çıkaran aykırı değerlerle serpilir.

Veri kümesini temizlemenin ilk adımı, nerede temizlenmesi gerektiğini anlamaktır. Bir veri kümesini temizlemek, özellikle genelleştirilebilir bir şekilde yapmak zor olabilir

MKS Google Araştırma ekibi bu iş için bir araç geliştirdi. YÖNÜ Bu, verileri görselleştirmenize ve çeşitli şekillerde dilimlemenize yardımcı olur. Veri kümesinin nasıl yapılandırıldığını anlamak için iyi bir başlangıç ​​noktasıdır.

Facets özelliği, verilerin beklediğiniz gibi görünmediği yerleri bulmanıza olanak tanır.

Web uygulamaları hariç, Google Bu, araç setini kolayca entegre etmeyi sağlar. Jupyter not defteri.

Facet'lerin iki bölümü vardır:

  • Özelliklere Genel Bakış
  • Yönlerin Derinlemesine İncelemesi

Özelliklere Genel Bakış

Facets Genel Bakış, veri kümesinin genel bir görünümünü sunar. Facets Genel Bakış, veri sütunlarını belirgin bilgilerin satırlarına bölerek gösterir

  1. eksik gözlem yüzdesi
  2. minimum ve maksimum değerler
  3. ortalama, medyan ve standart sapma gibi istatistikler.
  4. Ayrıca sıfır olan değerlerin yüzdesini gösteren bir sütun da ekler; bu, değerlerin çoğu sıfır olduğunda faydalıdır.
  5. Bu dağılımları hem test veri setinde hem de her bir özellik için eğitim setinde görmek mümkündür. Bu, testin eğitim verilerine benzer bir dağılıma sahip olduğunu iki kez kontrol edebileceğiniz anlamına gelir.

Bu, en azından herhangi bir makine öğrenimi görevinden önce yapılması gereken minimum işlemdir. Bu araçla bu önemli adımı kaçırmazsınız ve bazı anormallikleri vurgularsınız.

Yönlerin Derinlemesine İncelemesi

Facets Deep Dive harika bir araç. Veri kümeniz hakkında daha net bilgi edinmenizi ve tek tek veri parçalarını görmek için en ince ayrıntısına kadar yakınlaştırmanızı sağlar. Bu, veri kümesinin herhangi bir özelliğine göre verileri satır ve sütun bazında filtreleyebileceğiniz anlamına gelir.

Bu iki aracı Boston veri seti ile kullanacağız.

not: Yönlere Genel Bakış ve Yönlerin Derinlemesine Dalışını aynı anda kullanamazsınız. Aracı değiştirmek için önce not defterini temizlemeniz gerekir.

Her iki araç da kullanılmadan önce Facets'in notebook ortamına yüklenmesi gerekmektedir.

Faset'i yükle

Analizin çoğu için Facet web uygulamasını kullanabilirsiniz. Bu eğitimde, bunu bir süre içinde nasıl kullanacağınızı göreceksiniz. Jupyter Defter.

Öncelikle nbextensions'ı kurmanız gerekiyor. Bu kodla yapılır. Aşağıdaki kodu kopyalayıp makinenizin terminaline yapıştırın.

pip install jupyter_contrib_nbextensions

Bundan hemen sonra bilgisayarınızdaki depoları klonlamanız gerekir. İki seçeneğiniz var:

Seçenek 1) Bu kodu kopyalayıp terminale yapıştırın (Önerilen)

Bilgisayarınızda Git yüklü değilse lütfen buraya gidin. URL için git Windows Sayfayı indirmek ve talimatları izleyin. İşiniz bittiğinde, Mac Kullanıcısı için terminaldeki git komutunu veya Anaconda komut istemini kullanabilirsiniz. Windows kullanıcı

git clone https://github.com/PAIR-code/facets

Seçenek 2) MyCAD'de yazılım Güncelleme ye git PAIR-code/facets deposu ve depoları indirin.

GitHub'daki PAIR-code facets deposu sayfası

Yukarıdaki depo sayfasında, 2. seçenekte kullanılan indirme düğmesi bulunmaktadır. Birinci seçeneği seçerseniz, dosya indirme klasörünüze kaydedilir. Dosyayı indirme klasöründe bırakabilir veya başka bir klasöre sürükleyebilirsiniz.

Bu komut satırıyla Facet'lerin nerede saklandığını kontrol edebilirsiniz:

echo `pwd`/`ls facets`

Artık Facets'i bulduğunuza göre, onu yüklemeniz gerekiyor. Jupyter Not defteri. Çalışma dizinini, özelliklerin bulunduğu yola ayarlamanız gerekir.

Mevcut çalışma dizininiz ve Facets zip konumunuz aynı olmalıdır.

Terminalde mevcut çalışma dizinindeki facets klasörü gösteriliyor.

Yukarıdaki terminal çıktısı, facets'in geçerli çalışma dizininde bulunduğunu doğruluyor. Çalışma dizinini Facet'e yönlendirmeniz gerekiyor:

cd facets

Facets'i yüklemek için Jupyter, iki seçeneğiniz var. Eğer yüklediyseniz Jupyter Conda ile tüm kullanıcılar için bu kodu kopyalayın:

jupyter nbextension install facets-dist/

Aksi takdirde şunu kullanın:

jupyter nbextension install facets-dist/ --user

Pekala, hazırsınız. Faset Genel Bakış'ı açalım.

Fonksiyonlara Genel Bakış'ı çalıştırın. Jupyter

Genel bakış bir kullanır Python istatistikleri hesaplamak için komut dosyası. generic_feature_statistics_generator adlı komut dosyasını içe aktarmanız gerekir Jupyter. Merak etme; komut dosyası, faset dosyalarında bulunur.

Onun yolunu bulmanız gerekiyor. Kolayca yapılır. Faset'leri açıyorsunuz, facets_overview dosyasını ve ardından python'u açıyorsunuz. Yolu kopyala

facets_overview python klasörünün dosya yolu

Ondan sonra geri dön Jupyterve aşağıdaki kodu yazın. '/Users/Thomas/facets/facets_overview/python' yolunu kendi yolunuzla değiştirin.

# Add the facets overview python code to the python path# Add t 
import sys
sys.path.append('/Users/Thomas/facets/facets_overview/python')

Komut dosyasını aşağıdaki kodla içe aktarabilirsiniz.

from generic_feature_statistics_generator import 
GenericFeatureStatisticsGenerator

Windows'ta aynı kod şu şekilde olur:

import sys
sys.path.append(r"C:\Users\Admin\Anaconda3\facets-master\facets_overview\python")

from generic_feature_statistics_generator import GenericFeatureStatisticsGenerator

Özellik istatistiklerini hesaplamak için GenericFeatureStatistics fonksiyonunu kullanmanız gerekir.Generator() ve ProtoFromDataFrames nesnesini kullanırsınız. Veri çerçevesini bir sözlüğe aktarabilirsiniz. Örneğin tren seti için özet istatistik oluşturmak istersek bilgiyi bir sözlükte saklayabilir ve `ProtoFromDataFrames' nesnesinde kullanabiliriz.

'name': 'train', 'table': df_train

Ad, tablonun görüntülendiği adıdır ve özetini hesaplamak istediğiniz tablonun adını kullanırsınız. Örneğinizde verileri içeren tablo df_train'dir

# Calculate the feature statistics proto from the datasets and stringify it for use in facets overview
import base64

gfsg = GenericFeatureStatisticsGenerator()

proto = gfsg.ProtoFromDataFrames([{'name': 'train', 'table': df_train},
                                  {'name': 'test', 'table': df_test}])

#proto = gfsg.ProtoFromDataFrames([{'name': 'train', 'table': df_train}])
protostr = base64.b64encode(proto.SerializeToString()).decode("utf-8")

Son olarak aşağıdaki kodu kopyalayıp yapıştırmanız yeterli. Kod doğrudan GitHub'dan geliyor. Bunu görebilmelisiniz:

Özelliklere Genel Bakış tablosu, özellik başına özet istatistiklerini gösterir.

# Display the facets overview visualization for this data# Displ 
from IPython.core.display import display, HTML

HTML_TEMPLATE = """<link rel="import" href="/nbextensions/facets-dist/facets-jupyter.html" >
        <facets-overview id="elem"></facets-overview>
        <script>
          document.querySelector("#elem").protoInput = "{protostr}";
        </script>"""
html = HTML_TEMPLATE.format(protostr=protostr)
display(HTML(html))

Korelasyon Grafiği ve Çift Izgarası

Verileri ve dağılımlarını kontrol ettikten sonra, bir korelasyon matrisi çizebilirsiniz. Korelasyon matrisi, Pearson katsayısını hesaplar. Bu katsayı -1 ile 1 arasında sınırlıdır; pozitif değer pozitif korelasyonu, negatif değer ise negatif korelasyonu gösterir.

Hangi değişkenlerin etkileşim terimleri için iyi bir aday olabileceğini görmek ilginizi çekiyor.

Sürüm notu: Aşağıdaki maske çağrı yapıyor np.boolNumPy 1.20'de kullanımdan kaldırılan bir takma ad. NumPy 1.24'te kaldırıldıSon NumPy sürümünde aynı satırda bir hata oluşuyor. AttributeError: module 'numpy' has no attribute 'bool'; yerleşik bool Doğrudan yerine takılabilen bir üründür.

## Choose important feature and further check with Dive
%matplotlib inline  
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="ticks")
# Compute the correlation matrix
corr = df.corr('pearson')
# Generate a mask for the upper triangle
mask = np.zeros_like(corr, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
# Set up the matplotlib figure
f, ax = plt.subplots(figsize=(11, 9))

# Generate a custom diverging colormap
cmap = sns.diverging_palette(220, 10, as_cmap=True)

# Draw the heatmap with the mask and correct aspect ratio
sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0,annot=True,
            square=True, linewidths=.5, cbar_kws={"shrink": .5})

Çıktı

<matplotlib.axes._subplots.AxesSubplot at 0x1a184d6518>

Boston değişkenlerinin Seaborn korelasyon ısı haritası

Yukarıdaki ısı haritasında, daha koyu renkli kareler daha güçlü korelasyonları göstermektedir. Matristen şunları görebilirsiniz:

  • LSTAT
  • RM

Fiyat ile güçlü bir korelasyona sahiptirler. Bir diğer heyecan verici özellik ise NOX ve INDUS arasındaki güçlü pozitif korelasyondur; bu da bu iki değişkenin aynı yönde hareket ettiği anlamına gelir. Her ikisi de fiyat ile korelasyonludur. DIS de INDUS ve NOX ile yüksek korelasyona sahiptir.

INDUS ve NOX'un etkileşim terimi için iyi adaylar olabileceğine dair ilk ipucunu aldınız ve DIS'e de odaklanmak ilginç olabilir.

Bir çift ızgara çizerek biraz daha derine inebilirsiniz. Daha önce çizdiğiniz korelasyon haritasını daha ayrıntılı olarak gösterecektir.

Çiftli ızgara aşağıdaki şekilde oluşturulur:

  • Üst kısım: Yerleştirilmiş çizgiyle dağılım grafiği
  • Çapraz: Çekirdek yoğunluğu grafiği
  • Alt kısım: Çok değişkenli çekirdek yoğunluğu grafiği

Dört bağımsız değişkene odaklanıyorsunuz. Seçiminiz, FİYAT ile güçlü korelasyona sahip değişkenlere karşılık geliyor.

  • ENDÜSTRİ
  • NOX
  • RM
  • LSTAT

üstelik FİYAT.

not standart hatanın varsayılan olarak dağılım grafiğine eklendiğini gösterir.

attributes = ["PRICE", "INDUS", "NOX", "RM", "LSTAT"]

g = sns.PairGrid(df[attributes])
g = g.map_upper(sns.regplot, color="g")
g = g.map_lower(sns.kdeplot,cmap="Reds", shade=True, shade_lowest=False)
g = g.map_diag(sns.kdeplot)

Çıktı

Seaborn'un FİYAT, ENDÜSTRİYEL, NOX, RM ve LSTAT çiftli tablosu

Üst kısımla başlayalım:

  • Fiyat INDUS, NOX ve LSTAT ile negatif ilişkilidir; RM ile pozitif korelasyona sahiptir.
  • LSTAT ve PRICE arasında hafif bir doğrusal olmayan ilişki vardır.
  • Fiyat 50'ye eşit olduğunda düz bir çizgi vardır. Veri kümesinin açıklamasına göre PRICE, 50 değerinde kesilmiştir.

Diyagonal: NOX'in biri 0.5 civarında ve diğeri 0.85 civarında olmak üzere iki kümesi var gibi görünüyor.

Daha fazlasını kontrol etmek için alt kısma bakabilirsiniz. Çok Değişkenli Çekirdek Yoğunluğu, noktaların çoğunun bulunduğu yeri renklendirmesi açısından ilginçtir. Veri kümesinde belirli bir koordinat için hiçbir nokta olmamasına rağmen, dağılım grafiğindeki fark bir olasılık yoğunluğu çizer. Rengin daha güçlü olması bu alanın çevresinde yüksek bir nokta konsantrasyonuna işaret eder.

INDUS ve NOX'in çok değişkenli yoğunluğunu kontrol ederseniz pozitif korelasyonu ve iki kümeyi görebilirsiniz. Sanayinin payı yüzde 18'in üzerinde olduğunda nitrik oksit konsantrasyonu 0.6'nın üzerinde oluyor.

INDUS ve NOX arasına doğrusal ilişkiye bir etkileşim eklemeyi düşünebilirsiniz.

Son olarak, tarafından oluşturulan ikinci aracı kullanabilirsiniz. GoogleFacets Deep Dive. Arayüz dört ana bölüme ayrılmıştır. Ortadaki alan, verilerin yakınlaştırılabilir bir görüntüsüdür. Panelin üst kısmında, veri düzenini değiştirmek, fasetlemeyi, konumlandırmayı ve rengi kontrol etmek için kullanabileceğiniz açılır menü bulunur. Sağda, belirli bir veri satırının ayrıntılı görünümü yer alır. Bu, ortadaki görselleştirmedeki herhangi bir veri noktasına tıklayarak o veri noktası hakkında ayrıntılı bilgi görebileceğiniz anlamına gelir.

Veri görselleştirme adımı sırasında, evin fiyatındaki bağımsız değişken arasındaki çift yönlü korelasyonu aramakla ilgileniyorsunuz. Ancak, en az üç değişkeni içerir ve 3B grafiklerle çalışmak karmaşıktır.

Bu sorunu çözmenin bir yolu, kategorik bir değişken oluşturmaktır. Yani, 2 boyutlu bir grafik oluşturup noktaları renklendirebiliriz. FİYAT değişkenini her biri bir çeyreklik dilimi (örneğin, 0.25, 0.5, 0.75) temsil eden dört kategoriye ayırabilirsiniz. Bu yeni değişkene Q_PRICE adını verin.

## Check non linearity with important features
df['Q_PRICE'] =  pd.qcut(df['PRICE'], 4, labels=["Lowest", "Low", "Upper", "upper_plus"])
## Show non linearity between RM and LSTAT
ax = sns.lmplot(x="DIS", y="INDUS", hue="Q_PRICE", data=df, fit_reg = False,palette="Set3")

Fiyat çeyrek dilimlerine göre renklendirilmiş DIS ve INDUS'un dağılım grafiği.

Facets Deep Dive'ı Kullanma

Deep Dive'ı açmak için verileri JSON formatına dönüştürmeniz gerekir. Pandas'ın bunun için bir yöntemi vardır: DataFrame üzerinde `to_json` yöntemini çağırın.

Kodun ilk satırı, veri setinin içerdiği satır sayısına göre sprite boyutunu ayarlar.

df['Q_PRICE'] =  pd.qcut(df['PRICE'], 4, labels=["Lowest", "Low", "Upper", "upper_plus"])
sprite_size = 32 if len(df.index)>50000 else 64
jsonstr = df.to_json(orient='records')

Aşağıdaki kod şuradan geliyor: Google GitHub. Kodu çalıştırdıktan sonra şunu görmelisiniz:

Facets Deep Dive, Boston veri setinin çok yönlü dağılım görünümünü sunmaktadır.

# Display thde Dive visualization for this data
from IPython.core.display import display, HTML

# Create Facets template  
HTML_TEMPLATE = """<link rel="import" href="/nbextensions/facets-dist/facets-jupyter.html">
        <facets-dive sprite-image-width="{sprite_size}" sprite-image-height="{sprite_size}" id="elem" height="600"></facets-dive>
        <script>
          document.querySelector("#elem").data = {jsonstr};
        </script>"""

# Load the json dataset and the sprite_size into the template
html = HTML_TEMPLATE.format(jsonstr=jsonstr, sprite_size=sprite_size)

# Display the template
display(HTML(html))

Endüstri oranı, oksit konsantrasyonu, iş merkezine uzaklık ve evin fiyatı arasında bir bağlantı olup olmadığını görmek istiyorsunuz.

Bunun için önce verileri sektör aralığına ve renge göre fiyat çeyreğiyle bölersiniz:

  • Faceting X'i seçin ve INDUS'u seçin.
  • Ekran'ı seçin ve DIS'i seçin. Noktaları ev fiyatının dörtte biri ile renklendirecek

Burada daha koyu renkler, ilk iş merkezine olan mesafenin daha fazla olduğunu gösteriyor.

Şu ana kadar yine bildiğinizi gösteriyor; daha düşük endüstri oranı, daha yüksek fiyat. Artık INDUX ve NOX'a göre dağılıma bakabilirsiniz.

Yönlendirme Y'yi seçin ve NOX'u seçin.

Şimdi ilk iş merkezinden uzaktaki evin en düşük endüstri payına ve dolayısıyla en düşük oksit konsantrasyonuna sahip olduğunu görebilirsiniz. Q_PRICE ile türü görüntülemeyi ve sol alt köşeyi yakınlaştırmayı seçerseniz, ne tür bir fiyat olduğunu görebilirsiniz.

IND, NOX ve DIS arasındaki etkileşimin modeli geliştirmek için iyi adaylar olabileceğine dair başka bir ipucunuz daha var.

Bu araştırma sonucunda iki olası etkileşim adayı ortaya çıktı, bu nedenle bir sonraki adım bunları gerçek bir modelde test etmektir.

TensorFlow ile Doğrusal Regresyon

Bu bölümde, aşağıdaki yöntemle doğrusal regresyon modelini tahmin edeceksiniz: TensorFlow Tahminleyici API'si. Aşağıdaki adımları izleyeceksiniz:

  • Verileri hazırlayın
  • Bir kıyaslama modeli tahmin edin: Etkileşim yok
  • Etkileşimli bir modeli tahmin edin

Sürüm notu: the tf-estimator Bu paket, TensorFlow 2.15 ile birlikte son sürümünü yayınladı ve TensorFlow 2.16 ve sonrasında artık mevcut değil, bu nedenle tf.estimator.LinearRegressor Keras doğrusal modeline geçirmediğiniz sürece yalnızca TensorFlow 1.x üzerinde çalışır.

Unutmayın, makine öğreniminin amacı hatayı en aza indirmektir. Bu durumda, en düşük ortalama karesel hataya sahip model kazanacaktır. TensorFlow tahmincisi bu ölçütü otomatik olarak hesaplar.

Hazırlık verileri

Çoğu durumda verilerinizi dönüştürmeniz gerekir. Bu nedenle Facets Overview oldukça ilgi çekicidir. Özet istatistiğinden, aykırı değerler olduğunu gördünüz. Bu değerler, analiz ettiğiniz popülasyona benzemedikleri için tahminleri etkiler. Aykırı değerler genellikle sonuçları çarpıtır. Örneğin, pozitif bir aykırı değer, katsayıyı aşırı tahmin etme eğilimindedir.

Bu sorunu çözmek için iyi bir yöntem, değişkeni standartlaştırmaktır. Standartlaştırma, standart sapmanın bir ve ortalamanın sıfır olması anlamına gelir. Standartlaştırma süreci iki adımdan oluşur. Öncelikle, değişkenin standart sapması belirlenir.tracİlk olarak, değişkenin ortalama değerini hesaplar. İkinci olarak, dağılımın birim standart sapmaya sahip olması için standart sapmaya böler.

Kütüphane scikit-öğrenme Değişkenleri standartlaştırmak faydalıdır. Bunun için ölçek nesnesiyle birlikte ön işleme modülünü kullanabilirsiniz.

Bir veri kümesini ölçeklendirmek için aşağıdaki işlevi kullanabilirsiniz. Etiket sütununu ve kategorik değişkenleri ölçeklendirmediğinizi unutmayın.

from sklearn import preprocessing
def standardize_data(df): 
    X_scaled = preprocessing.scale(df[['CRIM', 'ZN', 'INDUS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
       'TAX', 'PTRATIO', 'B', 'LSTAT']])
    X_scaled_df = pd.DataFrame(X_scaled, columns = ['CRIM', 'ZN', 'INDUS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
       'TAX', 'PTRATIO', 'B', 'LSTAT'])
    df_scale = pd.concat([X_scaled_df,
                       df['CHAS'],
                       df['PRICE']],axis=1, join='inner')
    return df_scale

Ölçeklendirilmiş eğitim/test kümesini oluşturmak için işlevi kullanabilirsiniz.

df_train_scale = standardize_data(df_train)
df_test_scale = standardize_data(df_test)

Temel regresyon: Karşılaştırma

Her şeyden önce, bir modeli etkileşim olmadan eğitir ve test edersiniz. Amaç modelin performans metriğini görmektir.

Modeli eğitme yöntemi, eğitimde anlatıldığı gibidir. üst düzey API. TensorFlow tahmin aracı LinearRegressor'u kullanacaksınız.

Bir hatırlatma olarak şunları seçmeniz gerekir:

  • modele eklenecek özellikler
  • özellikleri dönüştür
  • doğrusal regresörü oluşturun
  • input_fn işlevini oluşturun
  • modeli eğit
  • modeli test et

Veri setindeki tüm değişkenleri modeli eğitmek için kullanıyorsunuz. Toplamda on iki sürekli değişken ve bir kategorik değişken bulunmaktadır.

## Add features to the bucket: 
### Define continuous list
CONTI_FEATURES  = ['CRIM', 'ZN', 'INDUS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD','TAX', 'PTRATIO', 'B', 'LSTAT']
CATE_FEATURES = ['CHAS']

Özellikleri sayısal bir sütuna veya kategorik bir sütuna dönüştürürsünüz

continuous_features = [tf.feature_column.numeric_column(k) for k in CONTI_FEATURES]
#categorical_features = tf.feature_column.categorical_column_with_hash_bucket(CATE_FEATURES, hash_bucket_size=1000)
categorical_features = [tf.feature_column.categorical_column_with_vocabulary_list('CHAS', ['yes','no'])]

Modeli lineerRegressor ile yaratırsınız. Modeli train_Boston klasöründe saklıyorsunuz

model = tf.estimator.LinearRegressor(    
	model_dir="train_Boston",     
    feature_columns=categorical_features + continuous_features)

Çıktı

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': 'train_Boston', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1a19e76ac8>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Eğitim veya test verilerindeki her sütun, get_input_fn fonksiyonu kullanılarak bir Tensor'a dönüştürülür.

FEATURES = ['CRIM', 'ZN', 'INDUS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD','TAX', 'PTRATIO', 'B', 'LSTAT', 'CHAS']
LABEL= 'PRICE'
def get_input_fn(data_set, num_epochs=None, n_batch = 128, shuffle=True):
    return tf.estimator.inputs.pandas_input_fn(
       x=pd.DataFrame({k: data_set[k].values for k in FEATURES}),
       y = pd.Series(data_set[LABEL].values),
       batch_size=n_batch,   
       num_epochs=num_epochs,
       shuffle=shuffle)

Modeli tren verilerine göre tahmin edersiniz.

model.train(input_fn=get_input_fn(df_train_scale, 
                                      num_epochs=None,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)

Çıktı

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into train_Boston/model.ckpt.
INFO:tensorflow:loss = 56417.703, step = 1
INFO:tensorflow:global_step/sec: 144.457
INFO:tensorflow:loss = 76982.734, step = 101 (0.697 sec)
INFO:tensorflow:global_step/sec: 258.392
INFO:tensorflow:loss = 21246.334, step = 201 (0.383 sec)
INFO:tensorflow:global_step/sec: 227.998
INFO:tensorflow:loss = 30534.78, step = 301 (0.439 sec)
INFO:tensorflow:global_step/sec: 210.739
INFO:tensorflow:loss = 36794.5, step = 401 (0.477 sec)
INFO:tensorflow:global_step/sec: 234.237
INFO:tensorflow:loss = 8562.981, step = 501 (0.425 sec)
INFO:tensorflow:global_step/sec: 238.1
INFO:tensorflow:loss = 34465.08, step = 601 (0.420 sec)
INFO:tensorflow:global_step/sec: 237.934
INFO:tensorflow:loss = 12241.709, step = 701 (0.420 sec)
INFO:tensorflow:global_step/sec: 220.687
INFO:tensorflow:loss = 11019.228, step = 801 (0.453 sec)
INFO:tensorflow:global_step/sec: 232.702
INFO:tensorflow:loss = 24049.678, step = 901 (0.432 sec)
INFO:tensorflow:Saving checkpoints for 1000 into train_Boston/model.ckpt.
INFO:tensorflow:Loss for final step: 23228.568.


<tensorflow.python.estimator.canned.linear.LinearRegressor at 0x1a19e76320>

Son olarak modelin test setindeki performansını tahmin edersiniz.

model.evaluate(input_fn=get_input_fn(df_test_scale, 
                                      num_epochs=1,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)

Çıktı

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-05-29-02:40:43
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from train_Boston/model.ckpt-1000
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Finished evaluation at 2018-05-29-02:40:43
INFO:tensorflow:Saving dict for global step 1000: average_loss = 86.89361, global_step = 1000, loss = 1650.9785


{'average_loss': 86.89361, 'global_step': 1000, 'loss': 1650.9785}

Modelin kaybı 1650.9785'dir. Bu, bir sonraki bölümde geçilmesi gereken metriktir.

Modeli geliştirin: Etkileşim terimi

Eğitimin ilk bölümünde, değişkenler arasında ilginç bir ilişki gördünüz. Farklı görselleştirme teknikleri, INDUS ve NOX'un birbirine bağlı olduğunu ve fiyat üzerindeki etkilerini karşılıklı olarak artırdığını ortaya koydu. INDUS ve NOX arasındaki etkileşim sadece fiyatı etklemekle kalmıyor, aynı zamanda DIS ile etkileşime girdiğinde bu etki daha da güçlü oluyor.

Bu fikri genelleştirmenin ve model tahminini iyileştirip iyileştiremeyeceğimizi görmenin zamanı geldi.

Her veri setine iki yeni sütun eklemeniz gerekiyor: eğitim ve test. Bunun için, etkileşim terimini hesaplayan bir fonksiyon ve üçlü etkileşim terimini hesaplayan başka bir fonksiyon oluşturacaksınız. Her fonksiyon tek bir sütun üretir. Yeni değişkenler oluşturulduktan sonra, bunları eğitim veri setine ve test veri setine ekleyebilirsiniz.

Öncelikle INDUS ve NOX arasındaki etkileşim için yeni bir değişken oluşturmanız gerekiyor.

Aşağıdaki işlev, INDUS ve NOX durumunuzda var_1 ve var_2 arasındaki etkileşimle birlikte eğitim ve test olmak üzere iki veri çerçevesi döndürür.

def interaction_term(var_1, var_2, name):
    t_train = df_train_scale[var_1]*df_train_scale[var_2]
    train = t_train.rename(name)
    t_test = df_test_scale[var_1]*df_test_scale[var_2]
    test = t_test.rename(name)
    return train, test

İki yeni sütunu saklıyorsunuz

interation_ind_ns_train, interation_ind_ns_test= interaction_term('INDUS', 'NOX', 'INDUS_NOS')
interation_ind_ns_train.shape
(325,)

İkinci olarak üçlü etkileşim terimini hesaplamak için ikinci bir fonksiyon yaratırsınız.

def triple_interaction_term(var_1, var_2,var_3, name):
    t_train = df_train_scale[var_1]*df_train_scale[var_2]*df_train_scale[var_3]
    train = t_train.rename(name)
    t_test = df_test_scale[var_1]*df_test_scale[var_2]*df_test_scale[var_3]
    test = t_test.rename(name)
    return train, test
interation_ind_ns_dis_train, interation_ind_ns_dis_test= triple_interaction_term('INDUS', 'NOX', 'DIS','INDUS_NOS_DIS')

Artık ihtiyacınız olan tüm sütunlara sahip olduğunuza göre bunları veri kümesini eğitmek ve test etmek için ekleyebilirsiniz. Bu iki yeni veri çerçevesine isim verin:

  • df_train_new
  • df_test_new
df_train_new = pd.concat([df_train_scale,
                          interation_ind_ns_train,
                          interation_ind_ns_dis_train],
                         axis=1, join='inner')
df_test_new = pd.concat([df_test_scale,
                         interation_ind_ns_test,
                         interation_ind_ns_dis_test],
                         axis=1, join='inner')
df_train_new.head(5)

Çıktı

INDUS_NOS ve INDUS_NOS_DIS sütunları eklenmiş Eğitim Veri Çerçevesi

İşte bu kadar: Etkileşim terimlerini içeren yeni modeli tahmin edebilir ve performans ölçütünün nasıl olduğunu görebilirsiniz.

CONTI_FEATURES_NEW  = ['CRIM', 'ZN', 'INDUS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD','TAX', 'PTRATIO', 'B', 'LSTAT',
                       'INDUS_NOS', 'INDUS_NOS_DIS']
### Define categorical list
continuous_features_new = [tf.feature_column.numeric_column(k) for k in CONTI_FEATURES_NEW]
model = tf.estimator.LinearRegressor(
    model_dir="train_Boston_1", 
    feature_columns= categorical_features + continuous_features_new)

Çıktı

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': 'train_Boston_1', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1a1a5d5860>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Code

FEATURES = ['CRIM', 'ZN', 'INDUS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD','TAX', 'PTRATIO', 'B', 'LSTAT','INDUS_NOS', 'INDUS_NOS_DIS','CHAS']
LABEL= 'PRICE'
def get_input_fn(data_set, num_epochs=None, n_batch = 128, shuffle=True):
    return tf.estimator.inputs.pandas_input_fn(
       x=pd.DataFrame({k: data_set[k].values for k in FEATURES}),
       y = pd.Series(data_set[LABEL].values),
       batch_size=n_batch,   
       num_epochs=num_epochs,
       shuffle=shuffle)
model.train(input_fn=get_input_fn(df_train_new, 
                                      num_epochs=None,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)

Çıktı

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into train_Boston_1/model.ckpt.
INFO:tensorflow:loss = 56417.703, step = 1
INFO:tensorflow:global_step/sec: 124.844
INFO:tensorflow:loss = 65522.3, step = 101 (0.803 sec)
INFO:tensorflow:global_step/sec: 182.704
INFO:tensorflow:loss = 15384.148, step = 201 (0.549 sec)
INFO:tensorflow:global_step/sec: 208.189
INFO:tensorflow:loss = 22020.305, step = 301 (0.482 sec)
INFO:tensorflow:global_step/sec: 213.855
INFO:tensorflow:loss = 28208.812, step = 401 (0.468 sec)
INFO:tensorflow:global_step/sec: 209.758
INFO:tensorflow:loss = 7606.877, step = 501 (0.473 sec)
INFO:tensorflow:global_step/sec: 196.618
INFO:tensorflow:loss = 26679.76, step = 601 (0.514 sec)
INFO:tensorflow:global_step/sec: 196.472
INFO:tensorflow:loss = 11377.163, step = 701 (0.504 sec)
INFO:tensorflow:global_step/sec: 172.82
INFO:tensorflow:loss = 8592.07, step = 801 (0.578 sec)
INFO:tensorflow:global_step/sec: 168.916
INFO:tensorflow:loss = 19878.56, step = 901 (0.592 sec)
INFO:tensorflow:Saving checkpoints for 1000 into train_Boston_1/model.ckpt.
INFO:tensorflow:Loss for final step: 19598.387.


<tensorflow.python.estimator.canned.linear.LinearRegressor at 0x1a1a5d5e10>
model.evaluate(input_fn=get_input_fn(df_test_new, 
                                      num_epochs=1,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)

Çıktı

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-05-29-02:41:14
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from train_Boston_1/model.ckpt-1000
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Finished evaluation at 2018-05-29-02:41:14
INFO:tensorflow:Saving dict for global step 1000: average_loss = 79.78876, global_step = 1000, loss = 1515.9863


{'average_loss': 79.78876, 'global_step': 1000, 'loss': 1515.9863}

Yeni kayıp 1515.9863. Sadece iki yeni değişken ekleyerek kaybı azaltabildiniz. Bu, kıyaslama modelinden daha iyi bir tahmin yapabileceğiniz anlamına gelir.

Model Özellik seti Model dizini ortalama_kayıp kayıp
kıyaslama 12 standartlaştırılmış sürekli kolon artı CHAS Boston treni 86.89361 1650.9785
Etkileşimle Benchmark plus INDUS_NOS and INDUS_NOS_DIS Boston treni_1 79.78876 1515.9863

Her iki rakam da aynı 101 satırlık test bölümünden elde edildi, bu nedenle ortalama kayıptaki yaklaşık yüzde 8'lik düşüş yalnızca iki etkileşim sütununa atfedilebilir.

SSS

Bu özellik scikit-learn 1.0'da kullanımdan kaldırılmış ve 1.2'de tamamen silinmiştir. Veri seti, ırksal kendi kendine ayrışma ve ev fiyatları hakkındaki bir varsayıma dayalı bir özellik içermektedir ve orijinal çalışma hava kalitesi varsayımını hiçbir zaman doğrulamamıştır. Genellikle California veya Ames konutları alternatif olarak kullanılır.

Bir polinom terimi, kendi eğrisini bükmek için bir değişkenin karesini veya küpünü alır. Bir etkileşim ise iki farklı değişkeni çarpar, bu nedenle birinin eğimi diğerinin seviyesine bağlıdır. Bu eğitimde ikinci tür olan INDUS çarpı NOX oluşturulacaktır.

Birbirleriyle ve hedefle korelasyon gösteren çiftleri arayın. Pearson ısı haritası ve çift ızgarası bunu görsel olarak yapar; burada INDUS ve NOX birlikte kümelenir ve her ikisi de track FİYATI, bu sinyallerin geçilmesini haklı çıkaran sinyaldir.

Otomatik özellik mühendisliği kütüphaneleri, aday dönüşümler ve çaprazlamalar oluşturur, her birini bir test verisiyle karşılaştırarak puanlandırır ve yalnızca hatayı azaltanları saklar. Bu, burada gösterilen manuel ısı haritası okuma yönteminin yerini alır, ancak oluşturulan sütunların ne anlama geldiğini bir insanın yine de doğrulaması gerekir.

Copilot, tekrarlayan grafik çizim kalıplarını (çift ızgaralar, maskeli ısı haritaları, Facet'ler için HTML şablonları) iyi bir şekilde ele alıyor. Önerdiği argümanları kontrol edin, çünkü seaborn bunlardan birkaçının adını değiştirdi ve Copilot eski ve yeni imzaları sorunsuz bir şekilde karıştıracaktır.

Hayır. Kayıp değerleri, burada olduğu gibi, aynı ayrılmış veri kümesi üzerinde karşılaştırılmalıdır. Sadece eğitim verilerinde düşen bir kayıp değeri aşırı uyum (overfitting) sinyali verir ve sütun eklemek, gerçek bilgi taşıyıp taşımadıklarına bakılmaksızın, eğitim verilerinin uyumunu neredeyse her zaman iyileştirir.

Bu maske, NumPy 1.20'de kullanımdan kaldırılan ve 1.24'te tamamen silinen np.bool takma adını kullanıyor. Son kurulumlarda AttributeError hatası oluşuyor. Yerleşik bool'u kullanmak davranışı aynı bırakıyor; NumPy skalar türüne ihtiyacınız varsa np.bool_ de işe yarıyor.

CHAS, kategorik bir evet-hayır bayrağıdır ve PRICE ise etikettir. Kukla değişkeni merkezlemek ve ölçeklendirmek, uyumu değiştirmeden katsayısının okunmasını zorlaştırır ve etiketi ölçeklendirmek, bildirilen kaybı yeniden ölçeklendirmek anlamına gelir. Yalnızca on iki sürekli tahminleyici standartlaştırılmıştır.

Bu yazıyı şu şekilde özetleyin: