Hlavní navigace

Redukce atributů v datových sadách před tréninkem modelů ve scikit-learn

Dnes
Doba čtení: 41 minut

Sdílet

 Autor: Depositphotos
Často se setkáme s datovými sadami, které obsahují velké množství atributů. Většinou ovšem dopředu nevíme, které z nich má smysl použít pro trénink modelu a které atributy jsou naopak zbytečné či dokonce nevhodné.

Obsah

1. Redukce atributů v datových sadách před tréninkem modelů

2. Získání základních statistických informací o atributech v datových sadách Iris i California Housings

3. Získané statistické informace

4. Výběr atributů pro trénink modelu s využitím filtru VarianceThreshold

5. Získání jmen atributů původní datové sady a datové sady redukované

6. Výběr (filtrace) atributů pro různé mezní hodnoty (threshold)

7. Výběr K nejvhodnějších atributů pro trénink

8. Výběr čtyř nejvhodnějších atributů datové sady California Housings

9. Výběr atributů pro postupně rostoucí hodnotu K

10. Použití modelu pro výběr atributů

11. Ukázka využití modelu pro výběr atributů

12. Křížová validace modelu naučeného s využitím vyfiltrované skupiny atributů

13. Křížová validace pro model natrénovaný na datovou sadu Iris

14. Výsledky křížové validace pro datovou sadu Iris

15. Křížová validace pro model natrénovaný na datovou sadu California Housings

16. Výsledky křížové validace pro datovou sadu California housings

17. Výsledky křížové validace pro filtraci pomocí VarianceThreshold

18. Obsah navazujícího článku – neuronové sítě

19. Repositář s demonstračními příklady

20. Odkazy na Internetu

1. Redukce atributů v datových sadách před tréninkem modelů

Poměrně často se setkáme s daty (resp. přesněji řečeno s datovými sadami), které obsahují velké množství atributů. Příkladem může být například datová sada s parametry různých typů vín, která pro každé víno obsahuje jednu hodnotu s odpovědí a třináct dalších atributů, které je možné (nikoli nutné) použít pro trénink:

Variable Name                 Role
class                         Target
Alcohol                       Feature
Malicacid                     Feature
Ash                           Feature
Alcalinity_of_ash             Feature
Magnesium                     Feature
Total_phenols                 Feature
Flavanoids                    Feature
Nonflavanoid_phenols          Feature
Proanthocyanins               Feature
Color_intensity               Feature
Hue                           Feature
0D280_0D315_of_diluted_wines  Feature
Proline                       Feature

Většinou ovšem dopředu nevíme, které z těchto atributů má smysl použít pro trénink modelu a které atributy jsou naopak zbytečné či dokonce nevhodné (příliš náhodné atd.). Dnes si tedy ukážeme několik způsobů filtrace vhodných a nevhodných atributů. Opět pochopitelně použijeme knihovnu scikit-learn.

2. Získání základních statistických informací o atributech v datových sadách Iris i California Housings

Nejprve si ukažme resp. přesněji řečeno připomeňme, jakým způsobem můžeme získat základní statistické informace o atributech v datových sadách. Podobně jako v předchozích částech tohoto seriálu i dnes použijeme datové sady Iris (čtyři atributy se stejnými jednotkami i měřítkem) a California Housings (osm atributů z různými jednotkami a samozřejmě i s rozdílným měřítkem).

Získání a výpočet statistických informací pro datovou sadu Iris:

import numpy as np
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import load_iris
 
# nacteni datove sady
iris = load_iris()
 
# precteni dat z datove sady
data = iris["data"]
 
# nadpis tabulky
print("Feature                     Min          Max          Avg         Std          Var")
 
# zakladni statisticke informace o jednotlivych atributech
for i in range(len(iris["feature_names"])):
    column = data[:, i]
    feature = iris.feature_names[i]
    print(f"{feature:20}   {column.min():10.3f}   {column.max():10.3f}   {np.mean(column):10.3f}  {np.std(column):10.3f}  {np.var(column):11.3f}")

Získání a výpočet statistických informací pro datovou sadu California Housings:

import numpy as np
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import fetch_california_housing
 
# nacteni datove sady
housings = fetch_california_housing()
 
# precteni dat z datove sady
data = housings["data"]
 
# nadpis tabulky
print("Feature              Min         Max           Avg         Std         Var")
 
# zakladni statisticke informace o jednotlivych atributech
for i in range(len(housings["feature_names"])):
    column = data[:, i]
    feature = housings.feature_names[i]
    print(f"{feature:12}   {column.min():10.3f}   {column.max():10.3f}   {np.mean(column):10.3f}  {np.std(column):10.3f}  {np.var(column):11.3f}")

3. Získané statistické informace

Výše uvedené skripty vypočítaly pro každý z atributů nejmenší a největší hodnotu atributu, průměrnou hodnotu, směrodatnou odchylku a rozptyl:

Feature                     Min          Max          Avg         Std          Var
sepal length (cm)           4.300        7.900        5.843       0.825        0.681
sepal width (cm)            2.000        4.400        3.057       0.434        0.189
petal length (cm)           1.000        6.900        3.758       1.759        3.096
petal width (cm)            0.100        2.500        1.199       0.760        0.577
Poznámka: rozptyl i směrodatné odchylky jsou v tomto případě pro všechny atributy relativně malé.

Pro datovou sadu California Housings dostaneme značně odlišné hodnoty. Především stojí za pozornost velká odchylka a rozptyl pro atribut Population:

Feature              Min         Max           Avg         Std         Var
MedInc              0.500       15.000        3.871       1.900        3.609
HouseAge            1.000       52.000       28.639      12.585      158.389
AveRooms            0.846      141.909        5.429       2.474        6.121
AveBedrms           0.333       34.067        1.097       0.474        0.225
Population          3.000    35682.000     1425.477    1132.435  1282408.322
AveOccup            0.692     1243.333        3.071      10.386      107.865
Latitude           32.540       41.950       35.632       2.136        4.562
Longitude        -124.350     -114.310     -119.570       2.003        4.014
Poznámka: připomeňme si, že právě odstraněním atributu Population jsme získali nejlepší předpověď modelu (nejmenší chyba resp. největší skóre):
Ignored attribute       MSE     r2 score
MedInc                  0.805   0.392
HouseAge                0.535   0.601
AveRooms                0.536   0.596
AveBedrms               0.541   0.598
Population              0.525   0.605
AveOccup                0.539   0.596
Latitude                0.617   0.535
Longitude               0.619   0.538

4. Výběr atributů pro trénink modelu s využitím filtru VarianceThreshold

Jedním z filtrů sloužících pro snížení počtu atributů, se kterými se bude model trénovat, je filtr nazvaný VarianceThreshold. Tento filtr odstraní atribut či atributy s nejmenším (nikoli největším) rozptylem. Filtr přímo vrací novou datovou sadu. Podívejme se na jeho použití, přičemž vstupem bude datová sada California Housings:

# import tridy realizujici vyber atributu
from sklearn.feature_selection import VarianceThreshold
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import fetch_california_housing
 
# nacteni datove sady
housings = fetch_california_housing()
 
# precteni dat z datove sady
# urcenych pro trenink, validaci atd.
data = housings["data"]
 
# tvar puvodni datove sady (pocet zaznamu a atributu) pred vyberem
print("Data shape before selection:")
print(data.shape)
 
# provest filtering dat
sel = VarianceThreshold(threshold=0.6)
selected = sel.fit_transform(data)
 
# tvar upravene datove sady (pocet zaznamu a atributu)
print("Data shape after selection:")
print(selected.shape)

Tento skript po svém spuštění zobrazí tvar původní datové sady (20640 záznamů, každý s osmi atributy) a nově redukované datové sady (stejný počet záznamů, ale jen sedm atributů):

Data shape before selection:
(20640, 8)
Data shape after selection:
(20640, 7)
Poznámka: důvodem pro existenci tohoto filtru je fakt, že atribut s velmi malým rozptylem je vlastně pro trénink modelu zbytečný až nadbytečný. Extrémním případem je atribut s konstantní hodnotou, který způsobuje menší citlivost modelu.

5. Získání jmen atributů původní datové sady a datové sady redukované

V praxi je pochopitelně vhodné zjistit nejenom to, kolik atributů má nově vyfiltrovaná datová sada, ale i to, o jaké atributy se jedná. I tuto informaci lze velmi snadno zjistit pomocí get_feature_names_out:

# import tridy realizujici vyber atributu
from sklearn.feature_selection import VarianceThreshold
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import fetch_california_housing
 
# nacteni datove sady
housings = fetch_california_housing()
 
# precteni dat z datove sady
# urcenych pro trenink, validaci atd.
data = housings["data"]
 
# jmena jednotlivych atributu
feature_names = housings["feature_names"]
 
# tvar puvodni datove sady (pocet zaznamu a atributu) pred vyberem
print("Data shape before selection:")
print(data.shape)
 
# jmena vsech puvodnich atributu
print("Features before selection:")
print(feature_names)
 
print()
 
sel = VarianceThreshold(threshold=0.6)
selected = sel.fit_transform(data)
 
# tvar upravene datove sady (pocet zaznamu a atributu)
print("Data shape after selection:")
print(selected.shape)
 
# jmena vybranych atributu
print("Features after selection:")
print(sel.get_feature_names_out(input_features=housings["feature_names"]))

A takto bude vypadat výsledek běhu tohoto skriptu:

Data shape before selection:
(20640, 8)
Features before selection:
['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']
 
Data shape after selection:
(20640, 7)
Features after selection:
['MedInc' 'HouseAge' 'AveRooms' 'Population' 'AveOccup' 'Latitude' 'Longitude']
Poznámka: dostali jsme předpokládaný výsledek, který odpovídá tabulce ze třetí kapitoly.

6. Výběr (filtrace) atributů pro různé mezní hodnoty (threshold)

Pokusme se pro zajímavost manipulovat s hodnotou předávanou v parametru threshold. Jedná se o mezní hodnotu pro filtraci atributů na základě jejich rozptylu. Čím větší bude mezní hodnota, tím větší počet atributů bude obecně odstraněn. Vyzkoušejme si nyní proměnnou hodnotu threshold použít společně s datovou sadou Iris:

import numpy as np
 
# import tridy realizujici vyber atributu
from sklearn.feature_selection import VarianceThreshold
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import load_iris
 
# nacteni datove sady
iris = load_iris()
 
# precteni dat z datove sady
# urcenych pro trenink, validaci atd.
data = iris["data"]
 
# jmena jednotlivych atributu
feature_names = iris["feature_names"]
 
# tvar puvodni datove sady (pocet zaznamu a atributu) pred vyberem
print("Data shape before selection:")
print(data.shape)
 
# jmena vsech puvodnich atributu
print("Features before selection:")
print(feature_names)
 
print()
 
for threshold in np.linspace(0.0, 1.0, 11):
    sel = VarianceThreshold(threshold=threshold)
 
    selected = sel.fit_transform(data)
 
    print(threshold, selected.shape, sel.get_feature_names_out(input_features=feature_names))

Po spuštění skriptu se budou vypisovat tvary datové sady po filtraci, pochopitelně společně s názvy atributů, které v nově sadě zůstaly:

Data shape before selection:
(150, 4)
 
Features before selection:
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
 
0.0 (150, 4) ['sepal length (cm)' 'sepal width (cm)' 'petal length (cm)' 'petal width (cm)']
0.1 (150, 4) ['sepal length (cm)' 'sepal width (cm)' 'petal length (cm)' 'petal width (cm)']
0.2 (150, 3) ['sepal length (cm)' 'petal length (cm)' 'petal width (cm)']
0.3 (150, 3) ['sepal length (cm)' 'petal length (cm)' 'petal width (cm)']
0.4 (150, 3) ['sepal length (cm)' 'petal length (cm)' 'petal width (cm)']
0.5 (150, 3) ['sepal length (cm)' 'petal length (cm)' 'petal width (cm)']
0.6 (150, 2) ['sepal length (cm)' 'petal length (cm)']
0.7 (150, 1) ['petal length (cm)']
0.8 (150, 1) ['petal length (cm)']
0.9 (150, 1) ['petal length (cm)']
1.0 (150, 1) ['petal length (cm)']

7. Výběr K nejvhodnějších atributů pro trénink

Dalším typem filtrů, který je možné použít pro výběr nejvhodnějších atributů, je filtr nazvaný SelectKBest. Jak již název tohoto filtru naznačuje, bude se vracet K nejlepších atributů, přičemž ona konstanta K je volitelná uživatelem. Ukažme si nejdříve použití tohoto filtru nad datovou sadou Iris, z níž se pokusíme vybrat dva nejlepší atributy:

# import tridy realizujici vyber atributu
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import load_iris
 
# nacteni datove sady
iris = load_iris()
 
# precteni dat z datove sady
# urcenych pro trenink, validaci atd.
data = iris["data"]
 
# jmena jednotlivych atributu
feature_names = iris["feature_names"]
 
# tvar puvodni datove sady (pocet zaznamu a atributu) pred vyberem
print("Data shape before selection:")
print(data.shape)
 
# provest filtering dat
sel = SelectKBest(f_classif, k=2)
selected = sel.fit_transform(data, iris["target"])
 
# tvar upravene datove sady (pocet zaznamu a atributu)
print("Data shape after selection:")
print(selected.shape)
print(sel.get_feature_names_out(input_features=iris["feature_names"]))

Nejdříve se opět zobrazí tvar (shape) původní datové sady a posléze tvar sady vyfiltrované. A nakonec se vypíše dvojice atributů, která je podle tohoto filtru nejlepší:

Data shape before selection:
(150, 4)
Data shape after selection:
(150, 2)
['petal length (cm)' 'petal width (cm)']
Poznámka: povšimněte si, že výsledek vlastně neodpovídá předchozímu filtru, který pro vhodný threshold doporučil tyto dva atributy:
0.6 (150, 2) ['sepal length (cm)' 'petal length (cm)']

8. Výběr čtyř nejvhodnějších atributů datové sady California Housings

Stejný filtr, pouze s odlišnou hodnotou K, nyní použijeme pro výběr atributů z datové sady California Housings. Skript, který tento výběr provede, vypadá následovně:

# import tridy realizujici vyber atributu
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import fetch_california_housing
 
# nacteni datove sady
housings = fetch_california_housing()
 
# precteni dat z datove sady
# urcenych pro trenink, validaci atd.
data = housings["data"]
 
# jmena jednotlivych atributu
feature_names = housings["feature_names"]
 
# tvar puvodni datove sady (pocet zaznamu a atributu) pred vyberem
print("Data shape before selection:")
print(data.shape)
 
# provest filtering dat
sel = SelectKBest(f_classif, k=4)
selected = sel.fit_transform(data, housings["target"])
 
# tvar upravene datove sady (pocet zaznamu a atributu)
print("Data shape after selection:")
print(selected.shape)
print(sel.get_feature_names_out(input_features=housings["feature_names"]))

Výsledkem bude doporučení čtyř atributů vypsaných na posledním řádku:

Data shape before selection:
(20640, 8)
Data shape after selection:
(20640, 4)
['MedInc' 'HouseAge' 'Population' 'Latitude']

9. Výběr atributů pro postupně rostoucí hodnotu K

Samozřejmě si můžeme otestovat, jaké konkrétní atributy budou vybrány v případě, že K předávané do konstruktoru třídy SelectKBest postupně poroste od nuly do maximálního počtu atributů (tedy v našem případě pro osm atributů). Samotný test chování SelectKBest pro proměnné K lze naprogramovat velmi snadno:

# import tridy realizujici vyber atributu
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import fetch_california_housing
 
# nacteni datove sady
housings = fetch_california_housing()
 
# precteni dat z datove sady
# urcenych pro trenink, validaci atd.
data = housings["data"]
 
# jmena jednotlivych atributu
feature_names = housings["feature_names"]
 
# tvar puvodni datove sady (pocet zaznamu a atributu) pred vyberem
print("Data shape before selection:")
print(data.shape)
 
for k_best in range(0, len(feature_names)+1):
    # provest filtering dat
    sel = SelectKBest(f_classif, k=k_best)
    selected = sel.fit_transform(data, housings["target"])
 
    print(k_best, selected.shape, sel.get_feature_names_out(input_features=feature_names))

Podívejme se nyní na výsledky, od „nejlepší malé skupiny“ atributů až po všechny dostupné atributy:

0 (20640, 0) []
1 (20640, 1) ['MedInc']
2 (20640, 2) ['MedInc' 'Latitude']
3 (20640, 3) ['MedInc' 'Population' 'Latitude']
4 (20640, 4) ['MedInc' 'HouseAge' 'Population' 'Latitude']
5 (20640, 5) ['MedInc' 'HouseAge' 'Population' 'Latitude' 'Longitude']
6 (20640, 6) ['MedInc' 'HouseAge' 'AveRooms' 'Population' 'Latitude' 'Longitude']
7 (20640, 7) ['MedInc' 'HouseAge' 'AveRooms' 'AveBedrms' 'Population' 'Latitude' 'Longitude']
8 (20640, 8) ['MedInc' 'HouseAge' 'AveRooms' 'AveBedrms' 'Population' 'AveOccup' 'Latitude' 'Longitude']
Poznámka: opět stojí za povšimnutí, že atribut AveBedrms, který byl podle filtru VarianceThreshold nejhorší (adept na odstranění), zde nejhorší není (konkrétně je druhý nejhorší). Nyní je nejhorším atributem AveOccup a nejlepším atributeb MedInc. To může být na dobře fungujícím trhu s byty logické – hodnota domů koreluje s mediánem příjmů.

10. Použití modelu pro výběr atributů

Výběr atributů vhodných (či dokonce nejlepších) pro trénink určitého modelu nemusí být proveden pouze na základě prostých statistických informací, ale můžeme k této operaci použít k tomu určené modely a především pak třídu SelectFromModel, která zajistí výběr modelu:

class SelectFromModel(sklearn.base.MetaEstimatorMixin, sklearn.feature_selection._base.SelectorMixin, sklearn.base.BaseEstimator)
 |  SelectFromModel(estimator, *, threshold=None, prefit=False, norm_order=1, max_features=None, importance_getter='auto')
 |
 |  Meta-transformer for selecting features based on importance weights.
 |
 |  .. versionadded:: 0.17
 |
 |  Read more in the :ref:`User Guide <select_from_model>`.
 |
 |  Parameters
 |  ----------
 |  estimator : object
 |      The base estimator from which the transformer is built.
 |      This can be both a fitted (if ``prefit`` is set to True)
 |      or a non-fitted estimator. The estimator should have a
 |      ``feature_importances_`` or ``coef_`` attribute after fitting.
 |      Otherwise, the ``importance_getter`` parameter should be used.
 |

Povšimněte si, že v prvním parametru konstruktoru této třídy se předává takzvaný estimator neboli „odhadovač výsledků“. Výsledkem je instance modelu:

# "odhadovac" vysledku
lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
 
# vyber modelu
model = SelectFromModel(lsvc, prefit=True)

Vybraný model můžeme následně použít pro výběr atributů a popř. i natrénování:

# transformace dat
X_new = model.transform(X)
 
# natrenovani modelu
model.fit(X, y)
Poznámka: proč jsme použili konkrétně LinearSVC si vysvětlíme příště.

11. Ukázka využití modelu pro výběr atributů

Opět si na praktickém příkladu vyzkoušejme, jakým způsobem je možné použít model pro výběr atributů. Konkrétně využijeme třídy LinearSVC a SelectFromModel. Instance třídy LinearSVC bude využita pro odhad výsledků, návratová hodnota bude použita modelem pro výběr atributů. Model následně ztransformuje původní datovou sadu na sadu novou:

from sklearn.svm import LinearSVC
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel
 
# nacteni datove sady
iris = load_iris()
 
# ziskani atributu a ocekavanych vysledku
X = iris["data"]
y = iris["target"]
 
# jmena jednotlivych atributu
feature_names = iris["feature_names"]
 
# "odhadovac" vysledku
lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
 
# vyber modelu
model = SelectFromModel(lsvc, prefit=True)
 
# tisk modelu
print(model)
 
# transformace dat
X_new = model.transform(X)
 
# natrenovani modelu
model.fit(X, y)
 
# vysledek + ziskani jmen atributu, ktere se pouzily
print(X_new.shape)
print(model.get_feature_names_out(input_features=feature_names))

Zkontrolujeme výsledky vyprodukované tímto skriptem. Nyní byly pro trénink modelu vybrány tři atributy, které jsou vypsány na posledním řádku:

SelectFromModel(estimator=LinearSVC(C=0.01, dual=False, penalty='l1'),
                prefit=True)
(150, 3)
['sepal length (cm)' 'sepal width (cm)' 'petal length (cm)']
Poznámka: za povšimnutí stojí odlišné výsledky oproti filtru VarianceThreshold.

12. Křížová validace modelu naučeného s využitím vyfiltrované skupiny atributů

Ve chvíli, kdy se vybírá model, upravují se hyperparametry modelu, popř. když se filtrují vstupní atributy, je prakticky vždy dobré provést křížovou validaci. Již minule jsme si ukázali způsoby provedení křížové validace při výběru modelů a při nastavování jejich hyperparametrů. Zbývá nám jediné – ukázat si kombinaci filtraci atributů s křížovou validací. Nejedná se o nijak komplikované programy, protože již všechny potřebné třídy a funkce známe. Jen pro úplnost si v navazujících kapitolách ukážeme konkrétní postupy, a to opět na našich dvou testovacích datových sadách: Iris a California Housings.

13. Křížová validace pro model natrénovaný na datovou sadu Iris

Nejprve si ukažme provedení křížové validace pro datovou sadu Iris, z níž postupně vybíráme 1 až 4 nejlepší atributy. Bude nás zajímat, pro jakou kombinaci atributů bude natrénovaný model odhadovat nejlepší výsledky:

# import tridy realizujici vyber atributu
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif
 
from sklearn.neighbors import KNeighborsClassifier
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
 
 
# nacteni datove sady
iris = load_iris()
 
# jmena jednotlivych atributu
feature_names = iris["feature_names"]
 
# X je matice (feature matrix)
X = iris.data
 
# y je vektor (response vector)
y = iris.target
 
for k_best in range(1, len(feature_names)+1):
    # provest filtering dat
    sel = SelectKBest(f_classif, k=k_best)
    X_new = sel.fit_transform(X, y)
 
    print(k_best, X_new.shape, sel.get_feature_names_out(input_features=feature_names))
    # konstrukce klasifikatoru
    knn = KNeighborsClassifier(n_neighbors=5)
    scores = cross_val_score(knn, X_new, y, cv=10, scoring='accuracy')
    print("Average score:", scores.mean())

14. Výsledky křížové validace pro datovou sadu Iris

Výsledky získané skriptem uvedeným v předchozí kapitole by měly vypadat následovně:

1 (150, 1) ['petal length (cm)']
Average score: 0.9533333333333334
 
2 (150, 2) ['petal length (cm)' 'petal width (cm)']
Average score: 0.9666666666666666
 
3 (150, 3) ['sepal length (cm)' 'petal length (cm)' 'petal width (cm)']
Average score: 0.96
4 (150, 4) ['sepal length (cm)' 'sepal width (cm)' 'petal length (cm)' 'petal width (cm)']
 
Average score: 0.9666666666666668
Poznámka: to jsou ve skutečnosti velmi zajímavé výsledky, protože vlastně říkají, že jediným skutečně rozhodujícím atributem je „petal length“, přičemž další atributy model pouze nepatrně „doladí“. To ostatně odpovídá výsledkům, které jsme získali v rámci šesté kapitoly a vlastně i kapitoly sedmé
.

15. Křížová validace pro model natrénovaný na datovou sadu California Housings

Prakticky totožným způsobem lze zkombinovat výběr atributů s využitím SelectKBest a s ověřením natrénovaného modelu LinearRegression křížovou validací. Jak je již z názvu modelu patrné, použijeme nyní datovou sadu California Housings a necháme model odhadovat cenu nemovitosti:

# import tridy realizujici vyber atributu
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif
 
from sklearn import linear_model
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import cross_val_score
 
# nacteni datove sady
housings = fetch_california_housing()
 
# jmena jednotlivych atributu
feature_names = housings["feature_names"]
 
# X je matice (feature matrix)
X = housings.data
 
# y je vektor (response vector)
y = housings.target
 
for k_best in range(1, len(feature_names)+1):
    # provest filtering dat
    sel = SelectKBest(f_classif, k=k_best)
    X_new = sel.fit_transform(X, y)
 
    # konstrukce modelu pro regresi
    lr = linear_model.LinearRegression()
    scores = cross_val_score(lr, X_new, y, cv=10, scoring='r2')
 
    print(k_best, X_new.shape, sel.get_feature_names_out(input_features=feature_names), scores.mean())

16. Výsledky křížové validace pro datovou sadu California housings

Pro datovou sadu California Housings a pro proměnný počet atributů použitých pro trénink modelu vypadají výsledky křížové validace následovně:

1 (20640, 1) ['MedInc'] 0.3483800124754965
2 (20640, 2) ['MedInc' 'Latitude'] 0.34861270211722617
3 (20640, 3) ['MedInc' 'Population' 'Latitude'] 0.34993815052254296
4 (20640, 4) ['MedInc' 'HouseAge' 'Population' 'Latitude'] 0.3903572524665514
5 (20640, 5) ['MedInc' 'HouseAge' 'Population' 'Latitude' 'Longitude'] 0.5021339726461409
6 (20640, 6) ['MedInc' 'HouseAge' 'AveRooms' 'Population' 'Latitude' 'Longitude'] 0.5034342766060689
7 (20640, 7) ['MedInc' 'HouseAge' 'AveRooms' 'AveBedrms' 'Population' 'Latitude' 'Longitude'] 0.5100561354984194
8 (20640, 8) ['MedInc' 'HouseAge' 'AveRooms' 'AveBedrms' 'Population' 'AveOccup' 'Latitude' 'Longitude'] 0.5110068610523775
Poznámka: můžeme zde vidět poměrně velký skok v úspěšnosti modelu při přidání atributu Longitude. Před přidáním tohoto atributu dosahovalo skóre přibližné hodnoty 0,4, poté již překročilo hodnotu 0,5. A přidávání dalších atributů již kvalitě modelu příliš nepomohlo. A pochopitelně by bylo možné dosáhnout lepších výsledků přechodem na jiný model, než je jednoduchý LinearRegression
.

17. Výsledky křížové validace pro filtraci pomocí VarianceThreshold

Na závěr si ještě ukážeme výsledky křížové validace ve chvíli, kdy byla filtrace provedena s využitím filtru VarianceThreshold; zde konkrétně pro datovou sadu California Housings. Skript, který provede příslušný výpočet, vypadá následovně:

# import tridy realizujici vyber atributu
from sklearn.feature_selection import VarianceThreshold
 
from sklearn import linear_model
 
# import funkce pro nacteni datove sady, kterou pouzijeme
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import cross_val_score
 
# nacteni datove sady
housings = fetch_california_housing()
 
# jmena jednotlivych atributu
feature_names = housings["feature_names"]
 
# X je matice (feature matrix)
X = housings.data
 
# y je vektor (response vector)
y = housings.target
 
sel = VarianceThreshold(threshold=0.6)
X_new = sel.fit_transform(X, y)
 
# konstrukce modelu pro regresi
lr = linear_model.LinearRegression()
scores = cross_val_score(lr, X_new, y, cv=10, scoring='r2')
 
print(X_new.shape, sel.get_feature_names_out(input_features=feature_names), scores.mean())

A takto konkrétně bude vypadat výsledek křížové validace ve chvíli, kdy byl z původní datové sady odstraněn jeden z atributů, takže se namísto osmi atributů použilo pouze atributů sedm:

20640, 7) ['MedInc' 'HouseAge' 'AveRooms' 'Population' 'AveOccup' 'Latitude' 'Longitude'] 0.503734153650471
Poznámka: nyní již snadno můžeme měnit (třeba ve smyčce) hodnotu threshold a sledovat rozdílné skóre. Stále však mějte na paměti, že model LinearRegression není pro tuto datovou sadu nejlepší.

18. Obsah navazujícího článku – neuronové sítě

V navazujícím článku se budeme zabývat pravděpodobně nejpopulárnější skupinou modelů. Bude se jednat o modely založené na neuronových sítích. Knihovna scikit-learn v této oblasti nabízí jak varianty neuronových sítí provádějících klasifikaci, tak i neuronové sítě, které dokážou provádět regresi. A pochopitelně je možné (i když jen do určité míry) ovlivnit interní strukturu neuronové sítě, tj. zejména počet takzvaných skrytých vrstev i počet neuronů v jednotlivých skrytých vrstvách, použitou aktivační funkci atd. A vzhledem k tomu, že se z pohledu scikit-learn stále jedná o „standardní“ modely, budeme mít k dispozici všechny již popsané nástroje pro trénink, validaci, testování, křížovou validaci atd.

CS24 tip temata

19. Repositář s demonstračními příklady

Všechny demonstrační příklady využívající knihovnu Scikit-learn lze nalézt v repositáři https://github.com/tisnik/most-popular-python-libs. Následují odkazy na jednotlivé příklady i na (Jupyter) diáře s postupem výpočtů a analýz:

# Příklad Stručný popis Adresa příkladu
1 01_show_matrix.py kooperace mezi knihovnami Matplotlib a NumPy: vizualizace obsahu 2D matice https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/01_show_ma­trix.py
2 02_get_digits.py datová množina obsahující naskenované ručně napsané číslice https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/02_get_di­gits.py
3 03_get_features.py další atributy datové množiny, které použijeme při trénování https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/03_get_fe­atures.py
4 04_get_images.py přečtení a následné vykreslení jednotlivých ručně nakreslených číslic https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/04_get_i­mages.py
5 05_show_grayscale_matrix.py odstranění umělé aplikované barvové palety (obrázky ve stupních šedi) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/05_show_gra­yscale_matrix.py
6 06_grayscale_images.py vykreslení ručně nakreslených číslic ve formě obrázků ve stupních šedi https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/06_gra­yscale_images.py
7 07_multiplot.py rozdělení plochy grafu do oblastí; vykreslení více obrázků do jediného grafu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/07_mul­tiplot.py
8 08_model_preperation1.py obrázky s jejich ohodnocením https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/08_mo­del_preperation1.py
9 09_training_set.py příprava dat pro trénink https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/09_tra­ining_set.py
10 10_classification.py klasifikace obrázků https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/10_clas­sification.py
11 11_results.py vykreslení obrázků společně s jejich klasifikací https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/11_results.py
12 12_change_training_set.py změna poměru rozdělení dat na tréninkovou a testovací množinu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/12_chan­ge_training_set.py
       
13 13_blobs.py použití funkce make_blobs pro vygenerování sady bodů v rovině sdružených do oblastí https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/13_blobs.py
14 14_swap_coords.py úprava předchozího příkladu: prohození souřadnic na osách https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/14_swap_co­ords.py
15 15_blobs_scatter_plot.py základní podoba bodového diagramu (scatter plot) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/15_blob­s_scatter_plot.py
16 16_blobs_scatter_plot.py úprava bodového diagramu při zobrazení většího množství bodů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/16_blob­s_scatter_plot.py
17 17_colorized_blobs.py obarvení bodů podle oblastí https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/17_co­lorized_blobs.py
18 18_k-means.py základní použití algoritmu K-means pro clustering https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/18_k-means.py
19 19_combination.py zobrazení centroidů společně s původními body https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/19_com­bination.py
20 20_combinations.py vizualizace clusteringu původní množiny bodů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/20_com­binations.py
21 21_other_settings.py vizualizace clusteringu původní množiny bodů pro odlišnou množinu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/21_ot­her_settings.py
22 22_random_points.py clustering pro náhodná data https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/22_ran­dom_points.py
       
23 23_circles.py pseudonáhodné rozmístění bodů do kružnic, menší náhodnost výsledku https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/23_circles.py
24 24_more_noise_circles.py pseudonáhodné rozmístění bodů do kružnic, větší náhodnost výsledku https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/24_mo­re_noise_circles.py
25 25_moons.py pseudonáhodné rozmístění bodů do tvaru dvou půlměsíců, menší náhodnost https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/25_moons.py
26 26_more_noisy_moons.py pseudonáhodné rozmístění bodů do tvaru dvou půlměsíců, větší náhodnost https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/26_mo­re_noisy_moons.py
27 27_circles_kmeans.py výsledek clusteringu provedeného algoritmem K-means na „kružnice“ https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/27_cir­cles_kmeans.py
28 28_moons_kmeans.py výsledek clusteringu provedeného algoritmem K-means na „půlměsíce“ https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/28_mo­ons_kmeans.py
29 29_blobs_spectral_clustering.py spectral clustering pro body rozmístěné pomocí make_blobs https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/29_blob­s_spectral_clustering.py
30 30_circles_spectral_clustering.py spectral clustering pro body rozmístěné do kružnic https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/30_cir­cles_spectral_clustering.py
31 31_moons_spectral_clustering.py spectral clustering pro body rozmístěné do půlměsíců https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/31_mo­ons_spectral_clustering.py
32 32_moons_spectral_clustering_limits.py vyhledání limitů algoritmu spectral clustering https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/32_mo­ons_spectral_clustering_li­mits.py
       
33 33_particles_load.py načtení souřadnic částic uložených v souboru formátu CSV https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/33_par­ticles_load.py
       
34 34_lorenz_attractor.py zobrazení Lorenzova atraktoru formou bodů propojených úsečkami https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/34_lo­renz_attractor.py
35 35_lorenz_attractor_points.py Lorenzův atraktor vykreslený formou jednotlivých bodů s definovaným stylem zobrazení a velikostí stopy https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/35_lo­renz_attractor_points.py
36 36_blobs_3d.py vygenerování a zobrazení sady bodů v 3D prostoru https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/36_blob­s_3d.py
37 37_spread_blobs_3d.py vygenerování a zobrazení sady bodů v 3D prostoru, odlišné parametry při generování https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/37_spre­ad_blobs_3d.py
38 38_views.py různé pohledy na 3D graf https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/38_views.py
39 39_colorized_3d_blobs.py obarvení bodů v prostoru na základě vstupních dat https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/39_co­lorized_3d_blobs.py
40 40_kmeans_3d_blobs.py shluková analýza v 3D prostoru https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/40_kme­ans_3d_blobs.py
41 41_kmeans_spread_3d_blobs.py shluková analýza v 3D prostoru pro odlišnou množinu bodů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/41_kme­ans_spread_3d_blobs.py
42 42_kmeans_random_3d.py shluková analýza pro body rozmístěné zcela náhodně v omezeném prostoru https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/42_kme­ans_random_3d.py
       
43 43_speed_measurements.py benchmark pro postupně rostoucí počet bodů tvořících shluky https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/43_spe­ed_measurements.py
44 44_speed_measurements.py benchmark pro postupně rostoucí počet bodů rozmístěných náhodně https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/44_spe­ed_measurements.py
45 45_speed_measurements.py benchmark pro stále stejný počet bodů, u jejichž rozmístění v prostoru se používá stále větší směrodatná odchylka https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/45_spe­ed_measurements.py
       
46 46_iris_dataset.py načtení datové kolekce https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/46_i­ris_dataset.py
47 47_iris_description.py metadata o datové kolekci https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/47_i­ris_description.py
48 48_iris_data.py tvar dat – počet záznamů a počet proměnných https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/48_i­ris_data.py
49 49_iris_targets.py jména atributů, vztah mezi numerickou hodnotou atributu a jeho jménem https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/49_i­ris_targets.py
       
50 50_iris_scatter_plot1.py korelační diagram pro dvojici vybraných proměnných https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/50_i­ris_scatter_plot1.py
51 51_iris_scatter_plot2.py příprava pro tvorbu složitějších grafů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/51_i­ris_scatter_plot2.py
52 52_iris_mutliplot.py mřížka obsahující více korelačních diagramů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/52_i­ris_mutliplot.py
       
53 53_iris_histograms.py zobrazení základního histogramu pro data v sadě Iris https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/53_i­ris_histograms.py
54 54_iris_histograms.py úprava histogramu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/54_i­ris_histograms.py
       
55 55_pca.py analýza hlavních komponent (PCA), výsledek zobrazený v 2D grafu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/55_pca.py
56 56_pca_3d.py analýza hlavních komponent (PCA), výsledek zobrazený v 3D grafu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/56_pca_3d.py
57 57_kmeans.py základní shluková analýza https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/57_kmeans.py
58 58_multiple_kmeans.py větší množství výsledků shlukové analýzy pro různé atributy https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/58_mul­tiple_kmeans.py
59 59_kmeans_errors.py korektní a nekorektní výsledky základní shlukové analýzy https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/59_kme­ans_errors.py
       
60 60_basic_classifier.py aplikace jednoduchého modelu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/60_ba­sic_classifier.py
61 61_changed_model_parameters.py změna parametrů modelu pro zjištění druhů rostil https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/61_chan­ged_model_parameters.py
62 62_different_model.py použití odlišného modelu pro zjištění druhů rostlin https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/62_dif­ferent_model.py
       
63 63_verify_on_whole_data1.py otestování naučeného modelu s využitím tréninkových dat https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/63_ve­rify_on_whole_data1.py
64 64_verify_on_whole_data2.py využití funkce metrics.accuracy_score pro zjištění kvality modelu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/64_ve­rify_on_whole_data2.py
65 65_basic_comparison.py porovnání vlastností různých modelů (prozatím nekorektní řešení) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/65_ba­sic_comparison.py
66 66_training_testing_split1.py rozdělení datové sady na trénovací data a testovací data (základní varianta) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/66_tra­ining_testing_split1.py
67 67_training_testing_split2.py rozdělení datové sady na trénovací data a testovací data (náhodné rozdělení sady) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/67_tra­ining_testing_split2.py
68 68_training_testing_split3.py rozdělení datové sady na trénovací data a testovací data (využití vestavěné funkce) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/68_tra­ining_testing_split3.py
69 69_better_comparison.py vylepšené porovnání vlastností různých modelů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/69_bet­ter_comparison.py
70 70_multiple_runs.py vliv generátoru náhodných čísel na změřené výsledky https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/70_mul­tiple_runs.py
71 71_stable_multiple_runs.py generátor náhodných čísel a použití hodnoty random_state https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/71_sta­ble_multiple_runs.py
       
72 72_housings_dataset.py načtení datové sady California housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/72_hou­sings_dataset.py
73 73_housings_dataset_description.py metainformace o datové sadě California housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/73_hou­sings_dataset_description­.py
74 74_housings_data.py n-rozměrné pole s atributy jednotlivých domů/bloků https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/74_hou­sings_data.py
75 75_housings_targets.py jména atributů, ceny domů atd. https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/75_hou­sings_targets.py
76 76_housings_scatter_plot.py korelační diagram pro dvojici vybraných proměnných https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/76_hou­sings_scatter_plot.py
77 77_housings_mutliplot.py korelační diagram pro všechny kombinace dvojic proměnných https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/77_hou­sings_mutliplot.py
78 78_scatter.py dvourozměrné hodnoty reprezentované jako dvojice atributů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/78_scatter.py
79 79_linear_regression_gen_data.py model LinearRegression nad uměle vytvořenými daty https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/79_li­near_regression_gen_data.py
80 80_linear_regression_predictions.py predikce modelu provádějícího lineární regresi https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/80_li­near_regression_prediction­s.py
81 81_linear_regression_random_data.py chování modelu pro zcela náhodná data https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/81_li­near_regression_random_da­ta.py
82 82_linear_regression_housings.py model LinearRegression pro datovou sadu California housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/82_li­near_regression_housings.py
83 83_polynomial_regression_gen_data.py polynomiální regrese (základní příklad) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/83_po­lynomial_regression_gen_da­ta.py
84 84_polynomial_regression_housings.py polynomiální regrese a datová sada California housings, první příklad https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/84_po­lynomial_regression_housin­gs.py
85 85_polynomial_regression_housings2.py polynomiální regrese a datová sada California housings, druhý příklad https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/85_po­lynomial_regression_housin­gs2.py
86 86_polynomial_regression_housings3.py polynomiální regrese a datová sada California housings, třetí příklad https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/86_po­lynomial_regression_housin­gs3.py
87 87_linear_regression_errors.py výpočet chyby a skóre modelu lineární regrese https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/87_li­near_regression_errors.py
88 88_linear_regression_non_linear_data.py lineární regrese nad nelineárními daty https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/88_li­near_regression_non_linear_da­ta.py
89 89_polynomial_regression_error.py https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/89_po­lynomial_regression_error­.py
       
90 90_housings_prediction1.py regresní analýza nad daty California housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/90_hou­sings_prediction1.py
91 91_housings_prediction2.py korektní natrénování modelu pro regresi https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/91_hou­sings_prediction2.py
92 92_housings_prediction3.py omezení množství atributů (proměnných), na kterých je model natrénován https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/92_hou­sings_prediction3.py
93 93_housings_prediction_errors1.py chybně natrénovaný model při náhodné volbě dat https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/93_hou­sings_prediction_errors1.py
94 94_housings_prediction_errors2.py omezení atributů + chybně natrénovaný model https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/94_hou­sings_prediction_errors2.py
95 95_housings_histograms.py histogramy pro jednotlivé atributy (proměnné) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/95_hou­sings_histograms.py
96 96_housings_statistic.py statistické údaje pro jednotlivé atributy (proměnné) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/96_hou­sings_statistic.py
97 97_housings_statistic_normalized.py statistické údaje získané po normalizaci https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/97_hou­sings_statistic_normalized­.py
       
98 98_k_fold_help.py zobrazení nápovědy ke třídě s realizací k-foldingu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/98_k_fol­d_help.py
99 99_k_fold_old.py původní (nepodporovaná) varianta provedení k-foldingu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/99_k_fol­d_old.py
100 100_k_fold1.py interní chování algoritmu k-foldingu (základní parametry) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/100_k_fol­d1.py
101 101_k_fold2.py interní chování algoritmu k-foldingu (odlišné parametry) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/101_k_fol­d2.py
102 102_k_fold_selection.py k-folding a výběr dat pro otestování modelů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/102_k_fol­d_selection.py
103 103_average_score.py realizace výpočtu průměrného skóre pro otestování modelů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/103_a­verage_score.py
104 104_hyperparams_score.py změna hyperparametrů s výpočtem průměrného skóre (tabulka) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/104_hy­perparams_score.py
105 105_hyperparams_score_plot.py změna hyperparametrů s výpočtem průměrného skóre (graf) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/105_hy­perparams_score_plot.py
106 106_model_selection.py výběr nejlepšího modelu s využitím k-foldingu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/106_mo­del_selection.py
107 107_features_selection_basic.py výběr atributů (proměnných) pro trénink modelu (základní varianta) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/107_fe­atures_selection_basic.py
108 108_features_selection_iris.py výběr atributů (proměnných) pro trénink modelu (datová sada Iris) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/108_fe­atures_selection_iris.py
109 109_features_selection_houses.py výběr atributů (proměnných) pro trénink modelu (datová sada California Housings) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/109_fe­atures_selection_houses.py
110 110_best_features_selection_houses.py získání nejlepší sady atributů (proměnných) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/110_bes­t_features_selection_houses­.py
111 111_features_selection_graphical.py výběr atributů (proměnných) pro trénink modelu (datová sada Iris), grafický výstup https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/111_fe­atures_selection_graphical­.py
       
112 112_simplest_linear_regression.py lineární regrese bodů ležících v rovině https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/112_sim­plest_linear_regression.py
113 113_linear_regression_no_intercept.py lineární regrese při vynucení w0=0 pro obecná data https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/113_li­near_regression_no_intercep­t.py
114 114_linear_regression_from0_0.py lineární regrese při vynucení w0=0 v případě, že vstupní body obsahují počátek souřadného systému https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/114_li­near_regression_from0_0.py
115 115_linear_regression_multiple_y.py model předpovídající pro každou vstupní hodnotu dvě výstupní hodnoty (odpovědi) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/115_li­near_regression_multiple_y­.py
116 116_grid_operations.py konstrukce matice obsahující souřadnice bodů v mřížce https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/116_grid_o­perations.py
117 117_linear_regression_multiple_x.py proložení bodů v prostoru rovinou https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/117_li­near_regression_multiple_x­.py
118 118_linear_regression_multiple_x.py proložení bodů s náhodnou výškou rovinou https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/118_li­near_regression_multiple_x­.py
119 119_linear_regression_mul­tiple_x_and_y.py proložení dvou sad bodů dvojicí rovin https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/119_li­near_regression_multiple_x_an­d_y.py
120 120_linear_regression_mul­tiple_x_and_y.py proložení dvou sad bodů dvojicí rovin https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/120_li­near_regression_multiple_x_an­d_y.py
121 121_linear_regression_poly.py základní polynomická regrese https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/121_li­near_regression_poly.py
122 122_linear_regression_poly_mul­tiple_x.py polynomická regrese a body v prostoru, první příklad https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/122_li­near_regression_poly_multi­ple_x.py
123 123_linear_regression_poly_mul­tiple_x.py polynomická regrese a body v prostoru, druhý příklad https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/123_li­near_regression_poly_multi­ple_x.py
       
124 124_iris_set_statistic.py získání statistických informací o datové sadě Iris https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/124_i­ris_set_statistic.py
125 125_california_housings_statistic.py získání statistických informací o datové sadě California Housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/125_ca­lifornia_housings_statistic­.py
126 126_variance_threshold1.py výběr atributů pro trénink modelu pomocí VarianceThreshold https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/126_va­riance_threshold1.py
127 127_variance_threshold2.py výběr atributů pro trénink modelu pomocí VarianceThreshold https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/127_va­riance_threshold2.py
128 128_variance_threshold3.py výběr atributů pro trénink modelu pomocí VarianceThreshold https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/128_va­riance_threshold3.py
129 129_select_best_iris.py výběr nejvhodnějších atributů pro datovou sadu Iris https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/129_se­lect_best_iris.py
130 130_select_best_housings.py výběr nejvhodnějších atributů pro datovou sadu California Housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/130_se­lect_best_housings.py
131 131_select_k_best_housings.py výběr K nejvhodnějších atributů pro datovou sadu California Housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/131_se­lect_k_best_housings.py
132 132_select_from_model.py výběr atributů na základě k tomu určeného modelu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/132_se­lect_from_model.py
133 133_cross_validation1.py křížová validace po výběru (filtraci) modelů (datová sada Iris) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/133_cros­s_validation1.py
134 134_cross_validation2.py křížová validace po výběru (filtraci) modelů (datová sada California Housings) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/134_cros­s_validation2.py
135 135_cross_validation3.py křížová validace po výběru (filtraci) modelů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/135_cros­s_validation3.py
       
136 136_mlp_classifier01.py použití neuronové sítě pro klasifikaci https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/136_mlp_clas­sifier01.py
137 137_mlp_classifier02.py výpočet úspěšnosti modelu založeného na neuronové síti https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/137_mlp_clas­sifier02.py
138 138_mlp_classifier03.py konfigurace vrstev neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/138_mlp_clas­sifier03.py
139 139_mlp_classifier04.py proměnný počet neuronů ve vrstvách neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/139_mlp_clas­sifier04.py
140 140_mlp_classifier05.py proměnný počet neuronů ve více vrstvách neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/140_mlp_clas­sifier05.py
       
141 141_mlp_regression1.py použití neuronové sítě pro regresi https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/141_mlp_re­gression1.py

V repositáři nalezneme taktéž projektový soubor a Jupyter Notebook s vysvětlením, jak lze modely využít pro rozpoznávání obsahu rastrových obrázků:

# Příklad Stručný popis Adresa příkladu
1 pyproject.toml projektový soubor (pro PDM) se všemi závislostmi https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/py­project.toml
       
2 pdm.lock lock soubor s konkrétními verzemi všech přímých i tranzitivních závislostí https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/pdm.lock
       
3 Rozpoznání_obrazu_scikit-learn.ipynb Jupyter notebook s celým postupem https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/Roz­poznání_obrazu_scikit-learn.ipynb
       
4 particle_life.py emergence: příklad vzniku struktury https://github.com/tisnik/most-popular-python-libs/blob/master/particles/par­ticle_life.py

20. Odkazy na Internetu

  1. Shluková analýza (clustering) a knihovna Scikit-learn
    https://www.root.cz/clanky/shlukova-analyza-clustering-a-knihovna-scikit-learn/
  2. Shluková analýza (clustering) a knihovna Scikit-learn (2)
    https://www.root.cz/clanky/shlukova-analyza-clustering-a-knihovna-scikit-learn-2/
  3. Shluková analýza (clustering) a knihovna Scikit-learn (z plochy do 3D prostoru)
    https://www.root.cz/clanky/shlukova-analyza-clustering-a-knihovna-scikit-learn-z-plochy-do-3d-prostoru/
  4. Rozpoznávání obrázků knihovnou Scikit-learn: první kroky
    https://www.root.cz/clanky/roz­poznavani-obrazku-knihovnou-scikit-learn-prvni-kroky/
  5. scikit-learn: Machine Learning in Python
    https://scikit-learn.org/stable/index.html
  6. Sklearn-pandas
    https://github.com/scikit-learn-contrib/sklearn-pandas
  7. sklearn-xarray
    https://github.com/phausamann/sklearn-xarray/
  8. Clustering
    https://scikit-learn.org/stable/modules/clus­tering.html
  9. Cluster analysis (Wikipedia)
    https://en.wikipedia.org/wi­ki/Cluster_analysis
  10. Shluková analýza (Wikipedia)
    https://cs.wikipedia.org/wi­ki/Shlukov%C3%A1_anal%C3%BDza
  11. K-means
    https://cs.wikipedia.org/wiki/K-means
  12. k-means clustering
    https://en.wikipedia.org/wiki/K-means_clustering
  13. Spectral clustering
    https://en.wikipedia.org/wi­ki/Spectral_clustering
  14. Emergence
    https://cs.wikipedia.org/wi­ki/Emergence
  15. Particle Life: Vivid structures from rudimentary rules
    https://particle-life.com/
  16. Hertzsprungův–Russellův diagram
    https://cs.wikipedia.org/wi­ki/Hertzsprung%C5%AFv%E2%80%93Rus­sell%C5%AFv_diagram
  17. Using Machine Learning in an HR Diagram
    https://cocalc.com/share/pu­blic_paths/08b6e03583cbdef3cdb98­13a54ec68ff773c747f
  18. Gaia H-R diagrams: Querying Gaia data for one million nearby stars
    https://vlas.dev/post/gaia-dr2-hrd/
  19. The Hertzsprung–Russell diagram
    https://scipython.com/book2/chapter-9-data-analysis-with-pandas/problems/p92/the-hertzsprung-russell-diagram/
  20. Animated Hertzsprung-Russell Diagram with 119,614 datapoints
    https://github.com/zonination/h-r-diagram
  21. Neuraxle Pipelines
    https://github.com/Neuraxio/Neuraxle
  22. scikit-learn: Getting Started
    https://scikit-learn.org/stable/getting_started.html
  23. Support Vector Machines
    https://scikit-learn.org/stable/modules/svm.html
  24. Use Deep Learning to Detect Programming Languages
    http://searene.me/2017/11/26/use-neural-networks-to-detect-programming-languages/
  25. Natural-language processing
    https://en.wikipedia.org/wiki/Natural-language_processing
  26. THE MNIST DATABASE of handwritten digits
    http://yann.lecun.com/exdb/mnist/
  27. MNIST database (Wikipedia)
    https://en.wikipedia.org/wi­ki/MNIST_database
  28. MNIST For ML Beginners
    https://www.tensorflow.or­g/get_started/mnist/begin­ners
  29. Stránka projektu Torch
    http://torch.ch/
  30. Torch: Serialization
    https://github.com/torch/tor­ch7/blob/master/doc/seria­lization.md
  31. Torch: modul image
    https://github.com/torch/i­mage/blob/master/README.md
  32. Data pro neuronové sítě
    http://archive.ics.uci.edu/ml/in­dex.php
  33. Torch na GitHubu (několik repositářů)
    https://github.com/torch
  34. Torch (machine learning), Wikipedia
    https://en.wikipedia.org/wi­ki/Torch_%28machine_learnin­g%29
  35. Torch Package Reference Manual
    https://github.com/torch/tor­ch7/blob/master/README.md
  36. Torch Cheatsheet
    https://github.com/torch/tor­ch7/wiki/Cheatsheet
  37. Neural network containres (Torch)
    https://github.com/torch/nn/blob/mas­ter/doc/containers.md
  38. Simple layers
    https://github.com/torch/nn/blob/mas­ter/doc/simple.md#nn.Line­ar
  39. Transfer Function Layers
    https://github.com/torch/nn/blob/mas­ter/doc/transfer.md#nn.tran­sfer.dok
  40. Feedforward neural network
    https://en.wikipedia.org/wi­ki/Feedforward_neural_net­work
  41. Biologické algoritmy (4) – Neuronové sítě
    https://www.root.cz/clanky/biologicke-algoritmy-4-neuronove-site/
  42. Biologické algoritmy (5) – Neuronové sítě
    https://www.root.cz/clanky/biologicke-algoritmy-5-neuronove-site/
  43. Umělá neuronová síť (Wikipedia)
    https://cs.wikipedia.org/wi­ki/Um%C4%9Bl%C3%A1_neuronov%C3%A1_s%C3%AD%C5%A5
  44. PyTorch
    http://pytorch.org/
  45. JupyterLite na PyPi
    https://pypi.org/project/jupyterlite/
  46. JupyterLite na GitHubu
    https://github.com/jupyter­lite/jupyterlite
  47. Dokumentace k projektu JupyterLite
    https://github.com/jupyter­lite/jupyterlite
  48. Matplotlib Home Page
    http://matplotlib.org/
  49. Matplotlib (Wikipedia)
    https://en.wikipedia.org/wi­ki/Matplotlib
  50. Popis barvových map modulu matplotlib.cm
    https://gist.github.com/en­dolith/2719900#id7
  51. Ukázky (palety) barvových map modulu matplotlib.cm
    http://matplotlib.org/exam­ples/color/colormaps_refe­rence.html
  52. Galerie grafů vytvořených v Matplotlibu
    https://matplotlib.org/3.2.1/gallery/
  53. 3D rendering
    https://en.wikipedia.org/wi­ki/3D_rendering
  54. 3D computer graphics
    https://en.wikipedia.org/wi­ki/3D_computer_graphics
  55. Primary 3D view planes
    https://matplotlib.org/sta­ble/gallery/mplot3d/view_pla­nes_3d.html
  56. Getting started in scikit-learn with the famous iris dataset
    https://www.youtube.com/wat­ch?v=hd1W4CyPX58
  57. Training a machine learning model with scikit-learn
    https://www.youtube.com/wat­ch?v=RlQuVL6-qe8
  58. Iris (plant)
    https://en.wikipedia.org/wi­ki/Iris_(plant)
  59. Kosatec
    https://cs.wikipedia.org/wiki/Kosatec
  60. Iris setosa
    https://en.wikipedia.org/wi­ki/Iris_setosa
  61. Iris versicolor
    https://en.wikipedia.org/wi­ki/Iris_versicolor
  62. Iris virginica
    https://en.wikipedia.org/wi­ki/Iris_virginica
  63. Druh
    https://cs.wikipedia.org/wiki/Druh
  64. Iris subg. Limniris
    https://en.wikipedia.org/wi­ki/Iris_subg._Limniris
  65. Iris Dataset Classification with Python: A Tutorial
    https://www.pycodemates.com/2022/05/i­ris-dataset-classification-with-python.html
  66. Iris flower data set
    https://en.wikipedia.org/wi­ki/Iris_flower_data_set
  67. List of datasets for machine-learning research
    https://en.wikipedia.org/wi­ki/List_of_datasets_for_machi­ne-learning_research
  68. Analýza hlavních komponent
    https://cs.wikipedia.org/wi­ki/Anal%C3%BDza_hlavn%C3%AD­ch_komponent
  69. Principal component analysis
    https://en.wikipedia.org/wi­ki/Principal_component_ana­lysis
  70. Scikit-learn Crash Course – Machine Learning Library for Python
    https://www.youtube.com/wat­ch?v=0B5eIE_1vpU
  71. calm-notebooks
    https://github.com/koaning/calm-notebooks
  72. Should you teach Python or R for data science?
    https://www.dataschool.io/python-or-r-for-data-science/
  73. nbviewer: A simple way to share Jupyter Notebooks
    https://nbviewer.org/
  74. AI vs Machine Learning (Youtube)
    https://www.youtube.com/wat­ch?v=4RixMPF4×is
  75. Machine Learning | What Is Machine Learning? | Introduction To Machine Learning | 2024 | Simplilearn (Youtube)
    https://www.youtube.com/wat­ch?v=ukzFI9rgwfU
  76. A Gentle Introduction to Machine Learning (Youtube)
    https://www.youtube.com/wat­ch?v=Gv9_4yMHFhI
  77. Machine Learning vs Deep Learning
    https://www.youtube.com/wat­ch?v=q6kJ71tEYqM
  78. Umělá inteligence (slajdy)
    https://slideplayer.cz/sli­de/12119218/
  79. Úvod do umělé inteligence
    https://slideplayer.cz/slide/2505525/
  80. Umělá inteligence I / Artificial Intelligence I
    https://ktiml.mff.cuni.cz/~bartak/ui/
  81. Matplotlib vs. seaborn vs. Plotly vs. MATLAB vs. ggplot2 vs. pandas
    https://ritza.co/articles/matplotlib-vs-seaborn-vs-plotly-vs-MATLAB-vs-ggplot2-vs-pandas/
  82. Matplotlib, Seaborn or Plotnine?
    https://www.reddit.com/r/da­tascience/comments/jvrqxt/mat­plotlib_seaborn_or_plotni­ne/
  83. @Rabeez: Rabeez/plotting_comparison.ipynb
    https://gist.github.com/Ra­beez/ffc0b59d4a41e20fa8d94­4c44a96adbc
  84. Matplotlib, Seaborn, Plotly and Plotnine Comparison
    https://python.plainenglish­.io/matplotlib-seaborn-plotly-and-plotnine-comparison-baf2db5a9c40
  85. Data Visualization 101: How to Choose a Python Plotting Library
    https://towardsdatascience.com/data-visualization-101-how-to-choose-a-python-plotting-library-853460a08a8a
  86. Data science in Python: pandas, seaborn, scikit-learn
    https://www.youtube.com/wat­ch?v=3ZWuPVWq7p4
  87. 7.2. Real world datasets
    https://scikit-learn.org/stable/datasets/re­al_world.html#california-housing-dataset
  88. 7.2.7. California Housing dataset
    https://scikit-learn.org/stable/datasets/re­al_world.html#california-housing-dataset
  89. Comprehensive Guide to Classification Models in Scikit-Learn
    https://www.geeksforgeeks­.org/comprehensive-guide-to-classification-models-in-scikit-learn/
  90. Tidy Data Visualization: ggplot2 vs seaborn
    https://blog.tidy-intelligence.com/posts/ggplot2-vs-seaborn/
  91. seaborn: statistical data visualization
    https://seaborn.pydata.org/
  92. Linear regression (Wikipedia)
    https://en.wikipedia.org/wi­ki/Linear_regression
  93. Lineární regrese (Wikipedia)
    https://cs.wikipedia.org/wi­ki/Line%C3%A1rn%C3%AD_regre­se
  94. Iris Flower Classification with MLP Classifier
    https://www.metriccoders.com/post/iris-flower-classification-with-mlp-classifier

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.