TensorFlow lineaarne regressioon tahke ja interaktsiooni terminiga

โšก Nutikas kokkuvรตte

Bostoni eluasemeandmete lineaarne regressioon paraneb, kui esmalt leitakse รตiged interaktsiooniterminid. Google Tahked elemendid paljastavad need seosed visuaalselt ja kaks ristunud tunnust vรคhendavad TensorFlow testi kaotust 1650-lt 1515-le.

  • ๐Ÿ”˜ Andmed kรตigepealt: Jaotuste ja erandite mรตistmine eelneb igale mudelile, sest mudel รผldistab ainult juba leitud mustrit.
  • โ˜‘๏ธ Tahkude รผlevaade: Funktsioonipรตhine statistika paljastab puuduvad vรครคrtused, nullrasked veerud ja rongi ja testi jaotuse triivi รผhes tabelis.
  • โœ… Tahkete detailide sรผvaanalรผรผs: X ja Y jรคrgi fasseerimine muudab kolmepoolsed seosed loetavaks kahemรตรตtmeliseks graafikuks, mis on vรคrvitud hinnakvartiili jรคrgi.
  • ๐Ÿงช Korrelatsiooni lugemine: Soojuskaart ja paaride vรตrgustik tรคhistavad interaktsioonikandidaatidena INDUS-i NOX-iga ja DIS-i mรตlemaga.
  • ๐Ÿ› ๏ธ Standardimine: preprocessing.scale tsentreerib kaksteist pidevat veergu enne, kui hindaja neid nรคeb, jรคttes CHASi ja PRICE'i puutumata.
  • ๐Ÿ“ˆ Mรตรตdetud vรตimendus: INDUS_NOS ja INDUS_NOS_DIS liitmine nihutab testjaotuse keskmise kaotuse 86.89361-lt 79.78876-le.

TensorFlow lineaarne regressioon tahu ja interaktsiooniterminiga

TensorFlow lineaarne regressioon

Sellest รตpetusest saate teada, kuidas andmeid kontrollida ja valmistada ette lihtsa lineaarse regressiooniรผlesande loomiseks.

See รตpetus on jagatud kaheks osaks:

  • Otsige suhtlust
  • Testige mudelit

aasta eelmine juhendaja, kasutasite maja mediaanhinna hindamiseks Bostoni andmestikku. Bostoni andmekogum on vรคike, ainult 506 vaatlusega. Seda andmekogumit peetakse vรตrdlusaluseks uute lineaarse regressiooni algoritmide proovimisel.

Andmekogum koosneb:

Muutuja Kirjeldus
zn รœle 25,000 XNUMX ruutjalga kruntidele tsoneeritud elamumaa osakaal.
indus Mitte-jaekaubanduse aakri osakaal linna kohta.
nox lรคmmastikoksiidide kontsentratsioon
rm keskmine tubade arv eluruumi kohta
vanus enne 1940. aastat ehitatud omanike kasutuses olevate รผksuste osakaal
dis kaalutud vahemaad viie Bostoni tรถรถhรตivekeskuseni
maks tรคisvรครคrtuslik kinnisvaramaksumรครคr 10,000 XNUMX dollari kohta
ptratio รตpilaste ja รตpetajate suhe linna lรตikes
medv Omaniku kasutuses olevate kodude mediaanvรครคrtus tuhandetes dollarites
krim kuritegevuse tase elaniku kohta linnade kaupa
Chas Charles Riveri nรคivmuutuja (1, kui piirneb jรตega; 0 muidu)
B mustanahaliste osakaal linna jรคrgi

Selles รตpetuses hindame mediaanhinda lineaarse regresori abil, kuid keskendume รผhele konkreetsele protsessile. masinรตpe: "andmete ettevalmistamine."

Mudel รผldistab andmete mustri. Sellise mustri jรครคdvustamiseks peate selle kรตigepealt leidma. Hea tava on teha andmeanalรผรผs enne mis tahes masinรตppealgoritmi kรคivitamist.

ร•igete funktsioonide valimine muudab teie mudeli edukuse tรคielikult. Kujutage ette, et proovite hinnata inimeste palka, kui te ei lisa sugu muutujana, saate halva hinnangu.

Teine vรตimalus mudelit tรคiustada on vaadata sรตltumatu muutuja vahelist korrelatsiooni. Tagasi nรคite juurde, vรตite mรตelda haridusele kui suurepรคrasele kandidaadile, et ennustada palka, aga ka ametit. On aus รถelda, et amet sรตltub haridustasemest, nimelt annab kรตrgharidus sageli parema ameti. Kui seda ideed รผldistada, vรตime รถelda, et sรตltuva muutuja ja selgitava muutuja vahelist seost saab suurendada veel รผhe selgitava muutuja vรตrra.

Et tabada hariduse piiratud mรตju ametile, vรตime kasutada interaktsiooniterminit.

Hariduse ja ameti vaheline interaktsioon palgakรตveral

Kui vaadata palgavรตrrandit, on see jรคrgmine:

Palgavรตrrand laiendatud hariduse ja ameti interaktsiooniteguriga

If Beetakordaja sรผmbol interaktsioonitermini jaoks on positiivne, siis tรคhendab see, et tรคiendav haridustase toob kaasa maja mediaanvรครคrtuse suurema tรตusu kรตrge hรตivatuse taseme korral. Teisisรตnu, hariduse ja ameti vahel on koostoime.

Sama hinnangute perekond annab jรตudu ka lineaarne klassifikaator kui silt on klass, mitte hind. Selles รตpetuses pรผรผame nรคha, millised muutujad sobivad hรคsti interaktsiooniterminiteks. Testime, kas sellise teabe lisamine viib parema hinnaennustuseni.

Kokkuvรตtlik statistika

Enne mudeliga jรคtkamist on mรตned sammud, mida saate jรคrgida. Nagu varem mainitud, on mudel andmete รผldistus. Parim tava on kรตigepealt andmeid mรตista ja seejรคrel ennustus teha. Kui te oma andmeid ei tunne, on teil mudeli tรคiustamiseks vรคhe vรตimalusi.

Esimese sammuna laadige andmed pandade andmeraamina ja looge treeningkomplekt ja testimiskomplekt.

Nรคpunรคited: Selle รตpetuse jaoks peavad teil olema installitud matplotlib ja seaborn. PythonSaate installida Python pakett lennult koos Jupyter. Sa Ei peaks tee seda

!conda install -- yes matplotlib

kuid

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

Pange tรคhele, et see samm pole vajalik, kui teil on installitud matplotlib ja seaborn.

Matplotlib on teek graafiku loomiseks PythonSeaborn on statistilise visualiseerimise teek, mis on loodud matplotlibi baasil. See pakub jรคrgmist:tractive ja ilusaid sรผลพeesid.

Allolev kood impordib vajalikud teegid.

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

Raamatukogu sklearn sisaldab Bostoni andmestikku. Andmete importimiseks saate helistada selle API-le.

Versiooni mรคrkus: load_boston oli scikit-learn 1.0-s aegunud ja eemaldatud scikit-learn 1.2-st kuna andmestik kodeerib rassiliselt laetud funktsiooni. Praeguse installi korral kasutage fetch_california_housing selle asemel vรตi laadige toorfail ise. Allpool nรคidatud tรถรถvoog jรครคb samaks; erineb ainult laadur.

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

Funktsioonide nimed salvestatakse objektis feature_names massiivina.

boston.feature_names

Vรคljund

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

Saate veerge รผmber nimetada.

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

Boston DataFrame'i kaks esimest rida pรคrast veergude รผmbernimetamist

Teisendate muutuja CHAS stringmuutujaks ja mรคrgite selle jah-ga, kui CHAS = 1 ja ei, kui CHAS = 0

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

Pandade puhul on andmekogumit lihtne jagada. Jagate andmestiku juhuslikult 80-protsendilise treeningkomplekti ja 20-protsendilise testimiskomplektiga. Pandad on sisseehitatud valimfunktsioon andmeraami jagamiseks.

Esimene parameeter frac on vรครคrtus vahemikus 0 kuni 1. Mรครคrate selle vรครคrtuseks 0.8, et valida juhuslikult 80 protsenti andmekaadrist.

random_state parandab segase jรคrjestuse, nii et kรตigile tagastatakse samad read.

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

Saate mรครคrata andmete kuju. See peaks olema:

  • Rongikomplekt: 506*0.8 = 405
  • Testikomplekt: 506*0.2 = 101
print(df_train.shape, df_test.shape)

Vรคljund

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

Vรคljund

KURITEGEVUS ZN INDUS CHAS NOX RM AGE DIS RAD MAKS PTRATIO B LSTAT HIND
0 0.00632 18.0 2.31 ei 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 ei 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 ei 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 ei 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 ei 0.524 6.172 96.1 5.9505 5.0 311.0 15.2 396.90 19.15 27.1

Andmed on segased; see on sageli tasakaalust vรคljas ja รผle puistatud kรตrvalekallete vรครคrtustega, mis viskavad analรผรผsi ja masinรตppe koolituse kรตrvale.

Esimene samm andmestiku puhastamiseks on mรตista, kus see puhastamist vajab. Andmestiku puhastamine vรตib olla keeruline, eriti mis tahes รผldistaval viisil

. Google Uurimisrรผhm on selle tรถรถ jaoks vรคlja tรถรถtanud tรถรถriista nimega Tahked mis aitab andmeid visualiseerida ja neid igasugustel viisidel tรผkeldada. See on hea alguspunkt andmestiku รผlesehituse mรตistmiseks.

Tahked elemendid vรตimaldavad teil leida kohti, kus andmed ei nรคe pรคris sellised vรคlja, nagu ootate.

Vรคlja arvatud nende veebirakendus, Google muudab tรถรถriistakomplekti manustamise lihtsaks Jupyter mรคrkmik.

Facetsil on kaks osa:

  • Aspektide รผlevaade
  • Facets Deep Dive

Aspektide รผlevaade

Facets Overview annab andmestikust รผlevaate. Facets Overview jagab andmete veerud oluliste kuvatud teabe ridadeks

  1. puuduvate vaatluste protsent
  2. min ja max vรครคrtused
  3. statistika, nagu keskmine, mediaan ja standardhรคlve.
  4. See lisab ka veeru, mis nรคitab nullidega vรครคrtuste protsenti, mis on kasulik, kui enamik vรครคrtusi on nullid.
  5. Neid jaotusi on vรตimalik nรคha nii testandmestikul kui ka iga funktsiooni koolituskomplektis. See tรคhendab, et saate veel kord kontrollida, kas testil on treeningandmetega sarnane jaotus.

See on vรคhemalt miinimum, mis tuleb enne mis tahes masinรตppetoimingut teha. Selle tรถรถriistaga ei jรคta te seda olulist sammu vahele ja see toob esile mรตned kรตrvalekalded.

Facets Deep Dive

Deep Dive on lahe tรถรถriist. See vรตimaldab teil oma andmestikust selgust saada ja suumida, et nรคha รผksikut andmestikku. See tรคhendab, et saate andmeid ridade ja veergude kaupa detailselt analรผรผsida, lรคhtudes andmestiku mis tahes funktsioonist.

Kasutame neid kahte tรถรถriista Bostoni andmekogumiga.

mรคrkused: Te ei saa samaaegselt kasutada funktsiooni Facets Overview ja Facets Deep Dive. Tรถรถriista vahetamiseks peate esmalt sรผlearvuti tรผhjendama.

Enne kummagi tรถรถriista kasutamist tuleb Facets installida sรผlearvuti keskkonda.

Installige Facet

Enamiku analรผรผside jaoks saate kasutada veebirakendust Facet. Selles รตpetuses nรคete, kuidas seda kasutada a Jupyter Mรคrkmik.

Kรตigepealt peate installima nbextensions. Seda tehakse selle koodiga. Kopeerite ja kleepite jรคrgmise koodi oma masina terminali.

pip install jupyter_contrib_nbextensions

Kohe pรคrast seda peate oma arvutis olevad hoidlad kloonima. Teil on kaks valikut:

Valik 1) Kopeerige ja kleepige see kood terminali (Soovitatav)

Kui teie arvutis pole Giti installitud, minge palun sellele lehele URL Git for Windows lae leht ja jรคrgige juhiseid. Kui olete lรตpetanud, saate kasutada Maci kasutaja terminalis kรคsku git vรตi Anaconda viipa Windows kasutaja

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

Valik 2) Minna PAIR-koodi/tahkude hoidla ja laadige hoidlad alla.

PAIR-koodi tahkude hoidla leht GitHubis

รœlaltoodud hoidla lehel on 2. valiku puhul kasutatav allalaadimisnupp. Esimese valiku korral jรตuab fail teie allalaadimiskausta. Saate faili kas alla laadida lasta vรตi lohistada selle teisele teele.

Selle kรคsurealt saate kontrollida, kus tahke on salvestatud:

echo `pwd`/`ls facets`

Nรผรผd, kui olete Facetsi leidnud, peate selle installima Jupyter Mรคrkmik. Peate mรครคrama tรถรถkataloogi teele, kus tahud asuvad.

Teie praegune tรถรถkataloog ja Facetsi ZIP-i asukoht peaksid olema samad.

Terminal, mis kuvab praeguses tรถรถkataloogis asuvat tahkude kausta

รœlaltoodud terminali loend kinnitab, et facets asub praeguses tรถรถkataloogis. Tรถรถkataloogiks tuleb suunata Facet:

cd facets

Facetsi installimiseks Jupyter, on teil kaks vรตimalust. Kui olete installinud Jupyter Condaga kรตigi kasutajate jaoks kopeerige see kood:

jupyter nbextension install facets-dist/

Vastasel juhul kasutage:

jupyter nbextension install facets-dist/ --user

Olgu, kรตik on valmis. Avame aspektide รผlevaate.

Kรคivita aspektide รผlevaade Jupyter

รœlevaade kasutab a Python skript statistika arvutamiseks. Peate importima skripti nimega generic_feature_statistics_generator Jupyter. ร„rge muretsege; skript asub tahkude failides.

Peate leidma selle tee. Seda tehakse lihtsalt. Avate tahud, avate faili facets_overview ja seejรคrel python. Kopeeri tee

facets_overview Pythoni kausta failitee

Pรคrast seda minge tagasi juurde Jupyterja kirjutage jรคrgmine kood. Muutke tee '/Users/Thomas/facets/facets_overview/python' oma teeks.

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

Saate skripti importida alloleva koodiga.

from generic_feature_statistics_generator import 
GenericFeatureStatisticsGenerator

Windowsis muutub sama kood

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

from generic_feature_statistics_generator import GenericFeatureStatisticsGenerator

Funktsioonide statistika arvutamiseks peate kasutama funktsiooni GenericFeatureStatisticsGenerator() ja kasutate objekti ProtoFromDataFrames. Andmeraami saate edastada sรตnastikus. Nรคiteks kui tahame koostada rongikogumi kohta kokkuvรตtvat statistikat, saame salvestada teabe sรตnastikku ja kasutada seda objektis "ProtoFromDataFrames"

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

Nimi on kuvatava tabeli nimi ja te kasutate kokkuvรตtte arvutamiseks selle tabeli nime. Teie nรคites on andmeid sisaldav tabel df_train

# 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")

Lรตpuks kopeerige ja kleepige allolev kood. Kood pรคrineb otse GitHubist. Peaksite nรคgema seda:

Funktsioonide kokkuvรตtliku statistika รผlevaadetabel

# 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))

Korrelatsioonigraaf ja paarisvรตrk

Pรคrast andmete ja nende jaotuse kontrollimist saate joonistada korrelatsioonimaatriksi. Korrelatsioonimaatriks arvutab Pearsoni koefitsiendi. See koefitsient on piiratud vahemikuga -1 ja 1, kus positiivne vรครคrtus nรคitab positiivset korrelatsiooni ja negatiivne vรครคrtus negatiivset korrelatsiooni.

Teid huvitab, millised muutujad vรตivad olla interaktsiooniterminite jaoks head kandidaadid.

Versiooni mรคrkus: allolev mask kutsub np.bool, alias, mis oli NumPy 1.20-s aegunud ja eemaldatud NumPy 1.24-sHiljutisel NumPy-l tekitab sama rida AttributeError: module 'numpy' has no attribute 'bool'sisseehitatud bool on sisse lรผlitatav asendus.

## 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})

Vรคljund

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

Bostoni muutujate Seaborni korrelatsiooni soojuskaart

รœlaltoodud soojuskaardil tรคhistavad tumedamad ruudud tugevamaid korrelatsioone. Maatriksilt nรคete:

  • LSTAT
  • RM

On tugevalt korrelatsioonis PRICE'iga. Teine pรตnev omadus on tugev positiivne korrelatsioon NOX-i ja INDUS-i vahel, mis tรคhendab, et need kaks muutujat liiguvad samas suunas. Mรตlemad on samuti korrelatsioonis PRICE'iga. DIS on samuti tugevalt korrelatsioonis INDUS-i ja NOX-iga.

Teil on esimene vihje, et INDUS ja NOX vรตivad olla head kandidaadid interaktsiooniterminiks ning ka DIS-ile keskendumine vรตib olla huvitav.

Vรตite minna veidi sรผgavamale, joonistades paarisruudustiku. See illustreerib รผksikasjalikumalt varem joonistatud korrelatsioonikaarti.

Paarivรตrk on koostatud jรคrgmiselt:

  • รœlemine osa: sobitatud joonega hajuvusdiagramm
  • Diagonaal: tuuma tiheduse graafik
  • Alumine osa: mitme muutujaga tuuma tiheduse graafik

Sa keskendud neljale sรตltumatule muutujale. Valik vastab muutujatele, millel on tugev korrelatsioon PRICE'iga.

  • INDUS
  • NOX
  • RM
  • LSTAT

pealegi HIND.

mรคrkused et standardviga lisatakse vaikimisi hajuvusgraafikule.

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)

Vรคljund

Seaborni paarisvรตrk PRICE, INDUS, NOX, RM ja LSTAT nรคitajate pรตhjal

Alustame รผlemisest osast:

  • Hind on negatiivses korrelatsioonis INDUSe, NOXi ja LSTATiga; positiivses korrelatsioonis RM-iga.
  • LSTATi ja PRICE'i vahel on kerge mittelineaarsus.
  • Kui hind on 50, on nagu sirgjoon. Andmestiku kirjeldusest on PRICE kรคrbitud vรครคrtusega 50

Diagonaal: NOXil nรคib olevat kaks klastrit, รผks umbes 0.5 ja teine โ€‹โ€‹umbes 0.85.

Selle kohta lisateabe saamiseks vรตite vaadata alumist osa. Multivariate Kernel Density on selles mรตttes huvitav, et see vรคrvib seal, kus asub enamik punkte. Erinevus hajuvusdiagrammiga joonistab tรตenรคosustiheduse, kuigi antud koordinaadi jaoks pole andmekogumil mingit mรตtet. Kui vรคrv on tugevam, nรคitab see punkti suurt kontsentratsiooni selle piirkonna รผmber.

Kui kontrollite INDUS-i ja NOX-i mitme muutujaga tihedust, nรคete positiivset korrelatsiooni ja kahte klastrit. Kui tรถรถstuse osakaal on รผle 18, on lรคmmastikoksiidide kontsentratsioon รผle 0.6.

Vรตite mรตelda INDUSe ja NOX-i vahelise interaktsiooni lisamisele lineaarses seoses.

Lรตpuks saate kasutada teist loodud tรถรถriista Google, Tahkude sรผvaanalรผรผs. Liides on jagatud neljaks pรตhiosaks. Keskel asuv keskosa on suumitav andmete kuva. Paneeli รผlaosas on rippmenรผรผ, kus saate muuta andmete paigutust, et juhtida tahkumist, positsioneerimist ja vรคrvi. Paremal on konkreetse andmerea detailne vaade. See tรคhendab, et saate klรตpsata mis tahes andmepunktil keskmises visualiseeringus, et nรคha selle konkreetse andmepunkti รผksikasju.

Andmete visualiseerimise etapis olete huvitatud maja hinna sรตltumatu muutuja paaripรตhise korrelatsiooni otsimisest. See hรตlmab aga vรคhemalt kolme muutujat ja 3D-graafikutega on keeruline tรถรถtada.

รœks viis selle probleemi lahendamiseks on luua kategooriline muutuja. See tรคhendab, et saame luua 2D-graafiku ja vรคrvida punktid. Muutuja PRICE saab jagada nelja kategooriasse, kus iga kategooria on kvartiil (nt 0.25, 0.5, 0.75). Seda uut muutujat nimetatakse Q_PRICE-iks.

## 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")

DIS-i ja INDUS-i hajuvusdiagramm, mis on vรคrvitud hinnakvartiili jรคrgi

Fasettide kasutamise sรผvaanalรผรผs

Deep Dive'i avamiseks peate andmed teisendama JSON-vormingusse. Pandasil on selleks meetod: kutsuge DataFrame'is vรคlja to_json.

Esimene koodirida mรครคrab ัะฟั€ะฐะนdi suuruse vastavalt sellele, mitu rida andmestikus on.

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')

Allolev kood pรคrineb Google GitHub. Pรคrast koodi kรคivitamist peaksite nรคgema jรคrgmist:

Tahud Bostoni andmestiku hajutatud vaade (DeepDive)

# 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))

Teid huvitab, kas tรถรถstuse mรครคra, oksiidikontsentratsiooni, tรถรถkeskuse kauguse ja maja hinna vahel on seos.

Selleks jagage esmalt andmed hinnakvartiiliga tรถรถstusharu ja vรคrvi jรคrgi:

  • Valige lihvimine X ja valige INDUS.
  • Valige Kuva ja valige DIS. See vรคrvib tรคpid majahinna kvartiiliga

Siin tรคhendavad tumedamad vรคrvid suuremat kaugust esimesest tรถรถkeskusest.

Siiani nรคitab see jรคlle seda, mida sa tead, madalamat tรถรถstuse intressimรครคra, kรตrgemat hinda. Nรผรผd saate vaadata jaotust INDUXi ja NOXi jรคrgi.

Valige tahk Y ja valige NOX.

Nรผรผd nรคete, et esimesest tรถรถkeskusest kaugel asuval majal on madalaim tรถรถstusharu osakaal ja seega ka madalaim oksiidikontsentratsioon. Kui valite tรผรผbi kuvamise Q_PRICE-ga ja suumite alumist vasakut nurka, nรคete, mis tรผรผpi hind see on.

Teil on veel รผks vihje, et IND, NOX ja DIS vaheline interaktsioon vรตib olla mudeli tรคiustamiseks head kandidaadid.

Uuringu kรคigus on leitud kaks potentsiaalset interaktsiooni, seega on jรคrgmine samm nende testimine tegelikus mudelis.

Lineaarne regressioon TensorFlow'ga

Selles osas hindate lineaarse regressioonimudelit, mille abil TensorFlow Hinnangu API. Jรคtkake jรคrgmiselt:

  • Valmistage andmed ette
  • Vรตrdlusmudeli hindamine: interaktsioon puudub
  • Hinnake interaktsiooniga mudelit

Versiooni mรคrkus: the,en tf-estimator pakett tarniti oma lรตpliku versiooniga TensorFlow 2.15 ja puudub TensorFlow 2.16-st ja hilisematest versioonidest, seega tf.estimator.LinearRegressor tรถรถtab ainult TensorFlow 1.x peal, vรคlja arvatud juhul, kui migreerite selle Kerase lineaarsele mudelile.

Pea meeles, et masinรตppe eesmรคrk on vea minimeerimine. Sellisel juhul vรตidab mudel, millel on vรคikseim keskmine ruutviga. TensorFlow hindaja arvutab selle mรตรตdiku automaatselt.

Ettevalmistuse andmed

Enamasti on vaja andmeid teisendada. Seetรตttu ongi tahkude รผlevaade pรตnev. Kokkuvรตtlikust statistikast nรคgite, et esineb kรตrvalekaldeid. Need vรครคrtused mรตjutavad hinnanguid, kuna need ei sarnane analรผรผsitava populatsiooniga. Kรตrvalvรครคrtused tavaliselt kallutavad tulemusi. Nรคiteks positiivne kรตrvalekalle kipub koefitsienti รผle hindama.

Hea lahendus selle probleemi lahendamiseks on muutuja standardiseerimine. Standardiseerimine tรคhendab standardhรคlvet รผhe ja keskmist nulli. Standardiseerimisprotsess hรตlmab kahte etappi. Esiteks, see hรตlmabtract on muutuja keskmine vรครคrtus. Teiseks jagab see standardhรคlbega nii, et jaotuse standardhรคlve on รผhik.

Raamatukogu skikit รตppima on kasulik muutujate standardiseerimiseks. Selleks saate kasutada mooduli eeltรถรถtlust objekti skaleerimisega.

Andmestiku skaleerimiseks saate kasutada allolevat funktsiooni. Pange tรคhele, et te ei skaleeri sildi veergu ja kategooria muutujaid.

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

Funktsiooni saate kasutada skaleeritud rongi/katsekomplekti koostamiseks.

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

Pรตhiline regressioon: etalon

Esiteks treenite ja testite mudelit ilma suhtlemiseta. Eesmรคrk on nรคha mudeli jรตudlusmรตรตdikut.

Mudeli treenimise viis on tรคpselt sama, mis รตpetuses. kรตrgetasemeline API. Kasutate TensorFlow hindajat LinearRegressor.

Meeldetuletuseks peate valima:

  • mudelisse lisatavad omadused
  • funktsioone muuta
  • konstrueerida lineaarne regressor
  • konstrueerida funktsioon input_fn
  • koolitada modelli
  • testi mudelit

Mudeli treenimiseks kasutate kรตiki andmestikus olevaid muutujaid. Kokku on kaksteist pidevat muutujat ja รผks kategooriline muutuja.

## 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']

Funktsioonid teisendate numbriveeruks vรตi kategooriliseks veerguks

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'])]

Mudeli loote lineaarregressori abil. Mudeli salvestate kausta train_Boston

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

Vรคljund

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}

Iga rongi- vรตi testandmete veerg teisendatakse funktsiooniga get_input_fn tensoriks.

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)

Hindate mudelit rongi andmete pรตhjal.

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

Vรคljund

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>

Lรตpuks hindate testikomplekti mudeli jรตudlust

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

Vรคljund

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}

Mudeli kaotus on 1650.9785. See on mรตรตdik, mida jรคrgmises jaotises รผletada

Tรคiustage mudelit: interaktsiooni termin

ร•petuse esimeses osas nรคgite huvitavat seost muutujate vahel. Erinevad visualiseerimistehnikad nรคitasid, et INDUS ja NOX on omavahel seotud ning vรตimendavad teineteise mรตju hinnale. Lisaks INDUSe ja NOXi vastastikmรตjule mรตjutab hinda ka see mรตju, mis on tugevam koos DISiga.

On aeg seda ideed รผldistada ja vaadata, kas saate mudeli ennustust parandada.

Igale andmestikule tuleb lisada kaks uut veergu: train ja test. Selleks tuleb luua รผks funktsioon interaktsioonitermini arvutamiseks ja teine โ€‹โ€‹kolmiktermini arvutamiseks. Iga funktsioon loob รผhe veeru. Pรคrast uute muutujate loomist saab need treening- ja testandmestikuga รผhendada.

Kรตigepealt peate looma uue muutuja INDUSe ja NOX-i interaktsiooni jaoks.

Allolev funktsioon tagastab kaks andmekaadrit, koolitus ja test, interaktsiooniga var_1 ja var_2, teie puhul INDUS ja NOX.

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

Salvestate kaks uut veergu

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

Teiseks loote kolmekordse interaktsiooniliikme arvutamiseks teise funktsiooni.

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')

Nรผรผd, kui teil on kรตik vajalikud veerud, saate need lisada koolitus- ja testimisandmekomplekti. Nimetate need kaks uut andmeraami:

  • 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)

Vรคljund

DataFrame'i treenimine lisatud veergudega INDUS_NOS ja INDUS_NOS_DIS

See on kรตik: saate uut mudelit interaktsiooniterminite abil hinnata ja vaadata, kuidas on toimivusmรตรตdik.

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)

Vรคljund

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)

Vรคljund

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)

Vรคljund

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}

Uus kahjum on 1515.9863. Kahe uue muutuja lisamisega oli vรตimalik kahjumit vรคhendada. See tรคhendab, et saate teha paremaid ennustusi kui vรตrdlusmudeli puhul.

MUDEL Funktsioonide komplekt Mudelikataloog keskmine_kaotus kaotus
vรตrrelda 12 standardiseeritud pidevat veergu pluss CHAS rong_Boston 86.89361 1650.9785
Koostoimega Vรตrdlusnรคitaja pluss INDUS_NOS ja INDUS_NOS_DIS rong_Boston_1 79.78876 1515.9863

Mรตlemad arvud pรคrinevad samast 101-realisest testjaotusest, seega on keskmise kaotuse umbes 8-protsendiline langus omistatav ainult kahele interaktsiooniveerule.

KKK

See aegus versioonis scikit-learn 1.0 ja eemaldati versioonis 1.2. Andmestik sisaldab funktsiooni, mis pรตhineb eeldusel rassilise enesesegregatsiooni ja kinnisvarahindade kohta ning algne uuring ei kinnitanud kunagi selle รตhukvaliteedi eeldust. Tavalised asendajad on California vรตi Amesi eluase.

Polรผnoomtermin moonutab รผhe muutuja ruutu vรตi kuupi, painutades omaenda kรตverat. Interaktsioon korrutab kahte erinevat muutujat, seega รผhe tรตus sรตltub teise muutuja tรตusunurgast. See รตpetus loob teist tรผรผpi interaktsiooni, INDUS korrutatuna NOX-iga.

Otsige paare, mis korreleeruvad รผksteise ja sihtmรคrgiga. Pearsoni soojuskaart ja paaride vรตrgustik teevad seda visuaalselt; siin INDUS ja NOX koonduvad kokku ja mรตlemad track HIND, mis on signaal, mis รตigustab nende รผletamist.

Automatiseeritud funktsioonide loomise teegid genereerivad kandidaatide teisendusi ja riste, hindavad igaรผht pidurdusteguri suhtes ja sรคilitavad ainult need, mis vรคhendavad viga. See asendab siin nรคidatud kรคsitsi soojuskaardi lugemist, kuigi inimene peab ikkagi kontrollima, mida genereeritud veerud tรคhendavad.

Copilot saab korduvate graafikumallide abil hรคsti hakkama โ€“ paaride ruudustikud, maskeeritud soojuskaardid, HTML-mallid fasettide jaoks. Vaadake selle pakutud argumente, sest Seaborn nimetas mitu neist รผmber ja Copilot segab meelsasti vanu ja praeguseid signatuure.

Ei. Kadusid tuleb vรตrrelda sama vรคljalรผlitatud jaotuse alusel, nagu siin. Ainult treeningandmetele langev kaotus annab mรคrku รผle sobitamisest ning veergude lisamine parandab peaaegu alati treeningsobivust, olenemata sellest, kas need sisaldavad reaalset teavet vรตi mitte.

Mask kasutab np.bool'i, mis on NumPy versioonis 1.20 aegunud ja versioonis 1.24 eemaldatud alias. Hiljutised installid tekitavad AttributeError vea. Sisseehitatud bool'i asendamine jรคtab kรคitumise samaks; np.bool_ tรถรถtab samuti, kui vajate NumPy skalaartรผรผpi.

CHAS on kategooriline jah-vรตi-ei lipp ja PRICE on silt. Mannekeeni tsentreerimine ja skaleerimine muudab selle koefitsiendi lugemise sobitust muutmata raskemaks ning sildi skaleerimine lihtsalt skaleeriks teatatud kaotuse รผmber. Standardiseeritud on ainult kaksteist pidevat ennustajat.

Vรตta see postitus kokku jรคrgmiselt: