<jupyter_start><jupyter_text>Gépi tanulás---(2020. 02. 11. – 15. óra)<NAME>  1. Mi a gépi tanulás?  1.1. Fajtái- kimenet szerint:    - osztályozás: diszkrét kategóriák sorolás vagy címkézés (pl. spam vagy nem spam, setosa, versicolor vagy virginica, stb.)    - regresszió: folytonos kimenet (pl hány fok lesz)- bemenet szerint:    - felügyelt: tanulás során látja a megfejtést    - felügyelet nélküli: nincs plusz adat  1.2. Felügyelt osztályozás1. Az adatok előkészítése:    - Szerzünk / csinálunk egy nagy kupac adatot (*feature matrix*), amit felcímkézünk (*target vector*). Ez lesz a gold standard.    - Felbontjuk az adatot egy nagyobb részre, amin tanítjuk a rendszert (tanítóadat), és egy kisebbre, amin tesztelünk / kiértékelünk. Vagy használhatunk [*cross validation*](https://en.wikipedia.org/wiki/Cross-validation_(statistics))-t is.1. Kiválasztunk egyet a sok lehetséges módszer (döntési fa, SVM, Naive Bayes, neurális hálók, stb.) közül. 1. Paraméterezzük a módszerünket.1. Tanítunk a tanítóadaton, azaz megmutatjuk a gépnek a tulajdonságokat is és a címkéket is (model).1. Kiértékelünk, azaz a tesztadatnak megmutatjuk a tulajdonságokat a teszadatból, és megkérjük, hogy tippelje meg a címkéket.    - Ha nem vagyunk elégedettek, vagy az adaton, vagy a módszeren kell javítani és újratanítani.1. Ha elégedettek vagyunk, használjuk a modelt.  2. Scikit-learn Várt adatok:* feature-mátrix:    * egy sor = egy példány    * egy oszlop = egy feature    * általában *X*-el jelölik    * Numpy *array* vagy pandas *DataFrame* típusúban kell megadni* target-vektor:    * egy sor = egy példány, minden eleme megfelel a *feature-mátrix* egy sorának    * általában *y*-nal jelölik    * Numpy *array* vagy pandas *Series* tipusú lehet    * csak a felügyelt tanuláshoz kell Lépések:1. adatok előkészítése (X, y, train, test)2. módszer választása: `form sklearn.xyz_modul import választott_módszer`3. modell létrehozása: `model = valasztott_modszer(paraméterek...)`4. tanítás: `model.fit(X, y)`6. kiértékelés: ehhez az `sklearn.metrics`-ben vannak hasznos dolgok 5. modell használata: `model.predict(new_X)` Gépi tanulós *hello world*: iriszek három osztályba sorolása levélméreteik alapján.**jegyek**: *sepal_length*, *sepal_width*, *petal_length*, *petal_width***címkék**: *setosa*, *versicolor*, *virginica*  2.1. adatok előkészítése<jupyter_code># adatok beolvasása
import pandas as pd

path = ! [ -d 'iris.tsv' ] && echo 'iris.tsv' || echo '../13.pandas/iris.tsv'
df = pd.read_csv(path[0], sep='\t', index_col=0)
df.head()
# feature-mátrix
X = df.drop('species', axis=1)
X.head()
# target-vektor
y = df['species']
y.head()
# adatok vágása tanításhoz és teszteléshez
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y)
print(len(X_train), len(y_train), len(X_test), len(y_test))
# X_train<jupyter_output><empty_output><jupyter_text>2.2. módszer választása Naiv Bayes módszerek:* egyszerűek, nem nagyon kell paraméterezni* gyorsak* feltevés, hogy a jegyek függetlenek egymástól<jupyter_code>from sklearn.naive_bayes import GaussianNB<jupyter_output><empty_output><jupyter_text>2.3. modell létrehozása<jupyter_code>model = GaussianNB() # itt lehetnek további megadandó paraméterek az iniciálizáláshoz, de most nincsenek<jupyter_output><empty_output><jupyter_text>2.4. tanítás<jupyter_code>model.fit(X_train, y_train)<jupyter_output><empty_output><jupyter_text>2.5. jóslás<jupyter_code>y_predicted = model.predict(X_test)
# y_predicted<jupyter_output><empty_output><jupyter_text>2.6. kiértékelés<jupyter_code>from sklearn.metrics import accuracy_score, classification_report

print('accurcy: ', accuracy_score(y_test, y_predicted))
print('\nREPORT:')
print(classification_report(y_test, y_predicted))
# confusion matrix
import seaborn as sb
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix

confmat = confusion_matrix(y_test, y_predicted)
sb.heatmap(confmat, square=True, annot=True, cbar=False, 
           xticklabels=['setosa', 'versicolor', 'virginica'], 
           yticklabels=['setosa', 'versicolor', 'virginica'])
plt.xlabel('predicted value')
plt.ylabel('true value')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1104221321249702, 'fraction_numerical': 0.010732172668733603, 'mean_word_length': 5.678343949044586, 'pattern_counts': {'":': 0, '<': 26, '<?xml version=': 0, '>': 26, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '116029', 'license': 'ECL-2.0', 'n_tokens_mistral': 1753, 'n_tokens_neox': 1771, 'n_words': 396, 'path': '15.scikit/scikit.ipynb', 'repo_name': 'mittelholcz/python2019', 'size': '4203'}