parent
b407bc769d
commit
1f5af4814d
@ -0,0 +1,159 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "69389392fa6346e0dfa30f664b7b6fec",
|
||||
"translation_date": "2025-09-05T16:06:36+00:00",
|
||||
"source_file": "1-Introduction/1-intro-to-ML/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Bevezetés a gépi tanulásba
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
---
|
||||
|
||||
[](https://youtu.be/6mSx_KJxcHI "Gépi tanulás kezdőknek - Bevezetés a gépi tanulásba")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videóért, amely bemutatja ezt a leckét.
|
||||
|
||||
Üdvözlünk ezen a kezdőknek szóló klasszikus gépi tanulás kurzuson! Akár teljesen új vagy a témában, akár tapasztalt ML szakemberként szeretnéd felfrissíteni tudásodat, örülünk, hogy csatlakoztál hozzánk! Célunk, hogy barátságos kiindulópontot biztosítsunk a gépi tanulás tanulmányozásához, és szívesen fogadjuk, értékeljük, valamint beépítjük [visszajelzéseidet](https://github.com/microsoft/ML-For-Beginners/discussions).
|
||||
|
||||
[](https://youtu.be/h0e2HAPTGF4 "Bevezetés a gépi tanulásba")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy videóért: MIT John Guttag bemutatja a gépi tanulást
|
||||
|
||||
---
|
||||
## Első lépések a gépi tanulásban
|
||||
|
||||
Mielőtt elkezdenéd ezt a tananyagot, győződj meg róla, hogy számítógéped készen áll a notebookok helyi futtatására.
|
||||
|
||||
- **Állítsd be a gépedet ezekkel a videókkal**. Használd az alábbi linkeket, hogy megtanuld [hogyan telepítsd a Python-t](https://youtu.be/CXZYvNRIAKM) a rendszeredre, és [hogyan állítsd be egy szövegszerkesztőt](https://youtu.be/EU8eayHWoZg) a fejlesztéshez.
|
||||
- **Tanuld meg a Python alapjait**. Ajánlott, hogy legyen alapvető ismereted a [Pythonról](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), egy programozási nyelvről, amely hasznos az adatkutatók számára, és amelyet ebben a kurzusban használunk.
|
||||
- **Tanuld meg a Node.js-t és a JavaScriptet**. A kurzus során néhány alkalommal használjuk a JavaScriptet webalkalmazások készítéséhez, ezért szükséged lesz [node](https://nodejs.org) és [npm](https://www.npmjs.com/) telepítésére, valamint [Visual Studio Code](https://code.visualstudio.com/) használatára Python és JavaScript fejlesztéshez.
|
||||
- **Hozz létre egy GitHub fiókot**. Mivel itt találtál ránk a [GitHubon](https://github.com), lehet, hogy már van fiókod, de ha nincs, hozz létre egyet, majd forkolj meg ezt a tananyagot, hogy saját magad használhasd. (Ne felejts el csillagot adni nekünk 😊)
|
||||
- **Ismerkedj meg a Scikit-learnnel**. Ismerd meg a [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) könyvtárat, amelyet ezekben a leckékben hivatkozunk.
|
||||
|
||||
---
|
||||
## Mi az a gépi tanulás?
|
||||
|
||||
A 'gépi tanulás' kifejezés napjaink egyik legnépszerűbb és leggyakrabban használt fogalma. Nem kizárt, hogy legalább egyszer hallottad már ezt a kifejezést, ha valamilyen szinten ismered a technológiát, függetlenül attól, hogy milyen területen dolgozol. A gépi tanulás mechanikája azonban a legtöbb ember számára rejtély. Egy gépi tanulás kezdő számára a téma néha túlterhelőnek tűnhet. Ezért fontos megérteni, hogy valójában mi is a gépi tanulás, és lépésről lépésre, gyakorlati példákon keresztül tanulni róla.
|
||||
|
||||
---
|
||||
## A hype görbe
|
||||
|
||||

|
||||
|
||||
> A Google Trends mutatja a 'gépi tanulás' kifejezés legutóbbi hype görbéjét
|
||||
|
||||
---
|
||||
## Egy rejtélyes univerzum
|
||||
|
||||
Egy lenyűgöző rejtélyekkel teli univerzumban élünk. Nagy tudósok, mint Stephen Hawking, Albert Einstein és sokan mások, életüket annak szentelték, hogy értelmes információkat találjanak, amelyek feltárják a körülöttünk lévő világ rejtélyeit. Ez az emberi tanulás feltétele: egy emberi gyermek új dolgokat tanul, és évről évre felfedezi világának szerkezetét, ahogy felnőtté válik.
|
||||
|
||||
---
|
||||
## A gyermek agya
|
||||
|
||||
Egy gyermek agya és érzékei érzékelik környezetük tényeit, és fokozatosan megtanulják az élet rejtett mintázatait, amelyek segítenek logikai szabályokat alkotni a tanult minták azonosításához. Az emberi agy tanulási folyamata teszi az embereket a világ legkifinomultabb élőlényévé. Azáltal, hogy folyamatosan tanulunk, felfedezzük a rejtett mintákat, majd innoválunk ezek alapján, képesek vagyunk egyre jobbak lenni életünk során. Ez a tanulási képesség és fejlődési kapacitás összefüggésben áll egy [agy plaszticitásának](https://www.simplypsychology.org/brain-plasticity.html) nevezett fogalommal. Felületesen nézve motivációs hasonlóságokat vonhatunk az emberi agy tanulási folyamata és a gépi tanulás fogalmai között.
|
||||
|
||||
---
|
||||
## Az emberi agy
|
||||
|
||||
Az [emberi agy](https://www.livescience.com/29365-human-brain.html) érzékeli a valós világ dolgait, feldolgozza az érzékelt információkat, racionális döntéseket hoz, és bizonyos körülmények alapján cselekszik. Ezt nevezzük intelligens viselkedésnek. Amikor egy intelligens viselkedési folyamatot programozunk egy gépbe, azt mesterséges intelligenciának (AI) nevezzük.
|
||||
|
||||
---
|
||||
## Néhány terminológia
|
||||
|
||||
Bár a fogalmak összekeverhetők, a gépi tanulás (ML) a mesterséges intelligencia fontos részhalmaza. **Az ML arra összpontosít, hogy speciális algoritmusokat használjon értelmes információk feltárására és rejtett minták megtalálására az érzékelt adatokból, hogy támogassa a racionális döntéshozatali folyamatot**.
|
||||
|
||||
---
|
||||
## AI, ML, Mélytanulás
|
||||
|
||||

|
||||
|
||||
> Egy diagram, amely bemutatja az AI, ML, mélytanulás és adatkutatás közötti kapcsolatokat. Infografika [Jen Looper](https://twitter.com/jenlooper) által, amelyet [ez a grafika](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) inspirált.
|
||||
|
||||
---
|
||||
## Lefedendő fogalmak
|
||||
|
||||
Ebben a tananyagban csak a gépi tanulás alapvető fogalmait fogjuk lefedni, amelyeket egy kezdőnek ismernie kell. Elsősorban a 'klasszikus gépi tanulást' tárgyaljuk, főként a Scikit-learn használatával, amely egy kiváló könyvtár, amit sok diák használ az alapok elsajátításához. Ahhoz, hogy megértsük a mesterséges intelligencia vagy mélytanulás szélesebb körű fogalmait, elengedhetetlen a gépi tanulás erős alapvető ismerete, és ezt szeretnénk itt biztosítani.
|
||||
|
||||
---
|
||||
## Ebben a kurzusban megtanulod:
|
||||
|
||||
- a gépi tanulás alapfogalmait
|
||||
- az ML történetét
|
||||
- az ML és az igazságosság kapcsolatát
|
||||
- regressziós ML technikákat
|
||||
- osztályozási ML technikákat
|
||||
- klaszterezési ML technikákat
|
||||
- természetes nyelvfeldolgozási ML technikákat
|
||||
- időbeli előrejelzési ML technikákat
|
||||
- megerősítéses tanulást
|
||||
- az ML valós alkalmazásait
|
||||
|
||||
---
|
||||
## Amit nem fogunk lefedni
|
||||
|
||||
- mélytanulás
|
||||
- neurális hálózatok
|
||||
- mesterséges intelligencia
|
||||
|
||||
A jobb tanulási élmény érdekében elkerüljük a neurális hálózatok, a 'mélytanulás' - többrétegű modellépítés neurális hálózatokkal - és az AI komplexitásait, amelyeket egy másik tananyagban fogunk tárgyalni. Emellett egy közelgő adatkutatási tananyagot is kínálunk, amely erre a nagyobb területre összpontosít.
|
||||
|
||||
---
|
||||
## Miért érdemes gépi tanulást tanulni?
|
||||
|
||||
A gépi tanulás rendszerszempontból úgy definiálható, mint automatizált rendszerek létrehozása, amelyek képesek rejtett mintákat tanulni az adatokból, hogy segítsenek intelligens döntések meghozatalában.
|
||||
|
||||
Ez a motiváció lazán inspirálódik abból, ahogyan az emberi agy bizonyos dolgokat tanul az érzékelt adatok alapján.
|
||||
|
||||
✅ Gondolkodj el egy percre azon, hogy egy vállalkozás miért választaná a gépi tanulási stratégiákat egy keményen kódolt szabályalapú motor létrehozása helyett.
|
||||
|
||||
---
|
||||
## A gépi tanulás alkalmazásai
|
||||
|
||||
A gépi tanulás alkalmazásai ma már szinte mindenhol jelen vannak, és olyan elterjedtek, mint az adatok, amelyek társadalmainkban áramlanak, okostelefonjaink, csatlakoztatott eszközeink és más rendszereink által generálva. Figyelembe véve a legmodernebb gépi tanulási algoritmusok hatalmas potenciálját, a kutatók vizsgálják azok képességét, hogy multidimenziós és multidiszciplináris valós problémákat oldjanak meg nagy pozitív eredményekkel.
|
||||
|
||||
---
|
||||
## Alkalmazott ML példák
|
||||
|
||||
**A gépi tanulást számos módon használhatod**:
|
||||
|
||||
- Betegség valószínűségének előrejelzésére egy beteg kórtörténete vagy jelentései alapján.
|
||||
- Időjárási adatok felhasználásával időjárási események előrejelzésére.
|
||||
- Szöveg érzelmi tartalmának megértésére.
|
||||
- Hamis hírek és propaganda terjedésének megállítására.
|
||||
|
||||
A pénzügyek, közgazdaságtan, földtudomány, űrkutatás, biomedikai mérnökség, kognitív tudomány és még a humán tudományok területei is alkalmazzák a gépi tanulást, hogy megoldják saját területük nehéz, adatfeldolgozás-igényes problémáit.
|
||||
|
||||
---
|
||||
## Összegzés
|
||||
|
||||
A gépi tanulás automatizálja a mintázat-felfedezés folyamatát azáltal, hogy értelmes betekintéseket talál a valós vagy generált adatokból. Bizonyította értékét az üzleti, egészségügyi és pénzügyi alkalmazásokban, többek között.
|
||||
|
||||
A közeljövőben a gépi tanulás alapjainak megértése elengedhetetlen lesz minden területen dolgozó emberek számára, tekintettel annak széles körű elterjedésére.
|
||||
|
||||
---
|
||||
# 🚀 Kihívás
|
||||
|
||||
Rajzolj papíron vagy egy online alkalmazás, például [Excalidraw](https://excalidraw.com/) segítségével egy vázlatot arról, hogyan érted az AI, ML, mélytanulás és adatkutatás közötti különbségeket. Adj hozzá néhány ötletet arról, hogy milyen problémák megoldására alkalmasak ezek a technikák.
|
||||
|
||||
# [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
---
|
||||
# Áttekintés és önálló tanulás
|
||||
|
||||
Ha többet szeretnél megtudni arról, hogyan dolgozhatsz ML algoritmusokkal a felhőben, kövesd ezt a [tanulási útvonalat](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott).
|
||||
|
||||
Vegyél részt egy [tanulási útvonalon](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott), amely az ML alapjairól szól.
|
||||
|
||||
---
|
||||
# Feladat
|
||||
|
||||
[Indulj el](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,23 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "4c4698044bb8af52cfb6388a4ee0e53b",
|
||||
"translation_date": "2025-09-05T16:08:21+00:00",
|
||||
"source_file": "1-Introduction/1-intro-to-ML/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Kezdj neki és állítsd be
|
||||
|
||||
## Útmutató
|
||||
|
||||
Ebben a nem értékelt feladatban frissítsd fel a Python tudásodat, és állítsd be a környezetedet úgy, hogy notebookokat tudj futtatni.
|
||||
|
||||
Kövesd ezt a [Python tanulási útvonalat](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), majd állítsd be a rendszereidet az alábbi bevezető videók segítségével:
|
||||
|
||||
https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,165 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "6a05fec147e734c3e6bfa54505648e2b",
|
||||
"translation_date": "2025-09-05T16:09:18+00:00",
|
||||
"source_file": "1-Introduction/2-history-of-ML/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# A gépi tanulás története
|
||||
|
||||

|
||||
> Sketchnote készítette: [Tomomi Imura](https://www.twitter.com/girlie_mac)
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
---
|
||||
|
||||
[](https://youtu.be/N6wxM4wZ7V0 "Gépi tanulás kezdőknek - A gépi tanulás története")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videóért, amely bemutatja ezt a leckét.
|
||||
|
||||
Ebben a leckében végigjárjuk a gépi tanulás és mesterséges intelligencia történetének főbb mérföldköveit.
|
||||
|
||||
A mesterséges intelligencia (MI) mint terület története szorosan összefonódik a gépi tanulás történetével, mivel a gépi tanulás alapját képező algoritmusok és számítástechnikai fejlődések hozzájárultak az MI fejlődéséhez. Érdemes megjegyezni, hogy bár ezek a területek mint különálló kutatási irányok az 1950-es években kezdtek körvonalazódni, fontos [algoritmikus, statisztikai, matematikai, számítástechnikai és technikai felfedezések](https://wikipedia.org/wiki/Timeline_of_machine_learning) már korábban is történtek, és átfedték ezt az időszakot. Valójában az emberek már [évszázadok óta](https://wikipedia.org/wiki/History_of_artificial_intelligence) foglalkoznak ezekkel a kérdésekkel: ez a cikk a "gondolkodó gép" ötletének történelmi szellemi alapjait tárgyalja.
|
||||
|
||||
---
|
||||
## Figyelemre méltó felfedezések
|
||||
|
||||
- 1763, 1812 [Bayes-tétel](https://wikipedia.org/wiki/Bayes%27_theorem) és elődei. Ez a tétel és alkalmazásai az események bekövetkezésének valószínűségét írják le korábbi ismeretek alapján.
|
||||
- 1805 [Legkisebb négyzetek módszere](https://wikipedia.org/wiki/Least_squares) Adrien-Marie Legendre francia matematikustól. Ez az elmélet, amelyet a regresszióról szóló egységünkben tanulni fogsz, segít az adatok illesztésében.
|
||||
- 1913 [Markov-láncok](https://wikipedia.org/wiki/Markov_chain), amelyeket Andrey Markov orosz matematikusról neveztek el, egy eseménysorozatot írnak le, amely az előző állapoton alapul.
|
||||
- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron), egy lineáris osztályozó típusa, amelyet Frank Rosenblatt amerikai pszichológus talált fel, és amely a mélytanulás fejlődésének alapját képezi.
|
||||
|
||||
---
|
||||
|
||||
- 1967 [Legközelebbi szomszéd](https://wikipedia.org/wiki/Nearest_neighbor) algoritmus, amelyet eredetileg útvonalak feltérképezésére terveztek. Gépi tanulásban mintázatok felismerésére használják.
|
||||
- 1970 [Visszaterjesztés](https://wikipedia.org/wiki/Backpropagation), amelyet [előrecsatolt neurális hálók](https://wikipedia.org/wiki/Feedforward_neural_network) tanítására használnak.
|
||||
- 1982 [Rekurzív neurális hálók](https://wikipedia.org/wiki/Recurrent_neural_network), amelyek az előrecsatolt neurális hálókból származnak, és időbeli gráfokat hoznak létre.
|
||||
|
||||
✅ Végezz egy kis kutatást. Mely más dátumok emelkednek ki a gépi tanulás és MI történetében?
|
||||
|
||||
---
|
||||
## 1950: Gondolkodó gépek
|
||||
|
||||
Alan Turing, egy igazán figyelemre méltó személy, akit [2019-ben a közönség](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) a 20. század legnagyobb tudósának választott, segített lefektetni a "gondolkodó gép" koncepciójának alapjait. Turing a kétkedőkkel és saját empirikus bizonyítékok iránti igényével küzdött, részben azáltal, hogy megalkotta a [Turing-tesztet](https://www.bbc.com/news/technology-18475646), amelyet a NLP leckéinkben fogsz megvizsgálni.
|
||||
|
||||
---
|
||||
## 1956: Dartmouth nyári kutatási projekt
|
||||
|
||||
"A Dartmouth nyári kutatási projekt a mesterséges intelligenciáról egy alapvető esemény volt a mesterséges intelligencia mint terület számára," és itt alkották meg a 'mesterséges intelligencia' kifejezést ([forrás](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)).
|
||||
|
||||
> A tanulás vagy az intelligencia bármely más jellemzője elvileg olyan pontosan leírható, hogy egy gép képes legyen szimulálni azt.
|
||||
|
||||
---
|
||||
|
||||
A vezető kutató, John McCarthy matematikaprofesszor remélte, hogy "a tanulás vagy az intelligencia bármely más jellemzője elvileg olyan pontosan leírható, hogy egy gép képes legyen szimulálni azt." A résztvevők között volt egy másik kiemelkedő személyiség, Marvin Minsky.
|
||||
|
||||
A workshopot annak tulajdonítják, hogy számos vitát kezdeményezett és ösztönzött, beleértve "a szimbolikus módszerek felemelkedését, a korlátozott területekre összpontosító rendszereket (korai szakértői rendszerek), valamint a deduktív rendszerek és az induktív rendszerek közötti különbségeket." ([forrás](https://wikipedia.org/wiki/Dartmouth_workshop)).
|
||||
|
||||
---
|
||||
## 1956 - 1974: "Az aranyévek"
|
||||
|
||||
Az 1950-es évektől a '70-es évek közepéig nagy optimizmus uralkodott abban a reményben, hogy az MI számos problémát megoldhat. 1967-ben Marvin Minsky magabiztosan kijelentette, hogy "Egy generáción belül ... az 'mesterséges intelligencia' létrehozásának problémája lényegében megoldódik." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall)
|
||||
|
||||
A természetes nyelvfeldolgozás kutatása virágzott, a keresés finomodott és hatékonyabbá vált, és létrejött a 'mikrovilágok' koncepciója, ahol egyszerű feladatokat lehetett elvégezni egyszerű nyelvi utasításokkal.
|
||||
|
||||
---
|
||||
|
||||
A kutatást jól finanszírozták kormányzati ügynökségek, előrelépések történtek a számítástechnikában és algoritmusokban, és intelligens gépek prototípusait építették. Néhány ilyen gép:
|
||||
|
||||
* [Shakey robot](https://wikipedia.org/wiki/Shakey_the_robot), amely képes volt manőverezni és 'intelligensen' dönteni a feladatok elvégzéséről.
|
||||
|
||||

|
||||
> Shakey 1972-ben
|
||||
|
||||
---
|
||||
|
||||
* Eliza, egy korai 'beszélgetőbot', képes volt emberekkel beszélgetni és primitív 'terapeutaként' működni. Az NLP leckékben többet fogsz tanulni Elizáról.
|
||||
|
||||

|
||||
> Eliza egy verziója, egy chatbot
|
||||
|
||||
---
|
||||
|
||||
* "Blocks world" egy mikrovilág példája volt, ahol blokkokat lehetett egymásra rakni és rendezni, és kísérleteket lehetett végezni a gépek döntéshozatalának tanításával. Az olyan könyvtárakkal, mint [SHRDLU](https://wikipedia.org/wiki/SHRDLU), végzett fejlesztések elősegítették a nyelvfeldolgozás fejlődését.
|
||||
|
||||
[](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world SHRDLU-val")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy videóért: Blocks world SHRDLU-val
|
||||
|
||||
---
|
||||
## 1974 - 1980: "AI tél"
|
||||
|
||||
Az 1970-es évek közepére nyilvánvalóvá vált, hogy az 'intelligens gépek' létrehozásának bonyolultságát alábecsülték, és az ígéreteket, tekintettel a rendelkezésre álló számítástechnikai kapacitásra, túlértékelték. A finanszírozás megszűnt, és a terület iránti bizalom csökkent. Néhány probléma, amely befolyásolta a bizalmat:
|
||||
|
||||
---
|
||||
- **Korlátok**. A számítástechnikai kapacitás túl korlátozott volt.
|
||||
- **Kombinatorikus robbanás**. Az edzéshez szükséges paraméterek száma exponenciálisan nőtt, ahogy egyre többet vártak el a számítógépektől, anélkül, hogy a számítástechnikai kapacitás és képesség párhuzamosan fejlődött volna.
|
||||
- **Adathiány**. Az adatok hiánya akadályozta az algoritmusok tesztelését, fejlesztését és finomítását.
|
||||
- **A megfelelő kérdéseket tesszük fel?**. Az éppen feltett kérdéseket is elkezdték megkérdőjelezni. A kutatók kritikákat kaptak a megközelítéseikkel kapcsolatban:
|
||||
- A Turing-teszteket megkérdőjelezték többek között a 'kínai szoba elmélet' révén, amely azt állította, hogy "egy digitális számítógép programozása látszólag megértést mutathat, de nem képes valódi megértést produkálni." ([forrás](https://plato.stanford.edu/entries/chinese-room/))
|
||||
- Az olyan mesterséges intelligenciák, mint a "terapeuta" ELIZA társadalomba való bevezetésének etikáját megkérdőjelezték.
|
||||
|
||||
---
|
||||
|
||||
Ezzel egy időben különböző MI iskolák kezdtek kialakulni. Egy dichotómia jött létre ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies) gyakorlatok között. _Scruffy_ laborok órákig finomították a programokat, amíg el nem érték a kívánt eredményeket. _Neat_ laborok "a logikára és a formális problémamegoldásra" összpontosítottak. ELIZA és SHRDLU jól ismert _scruffy_ rendszerek voltak. Az 1980-as években, amikor igény mutatkozott a gépi tanulási rendszerek reprodukálhatóságára, a _neat_ megközelítés fokozatosan előtérbe került, mivel eredményei jobban magyarázhatók.
|
||||
|
||||
---
|
||||
## 1980-as évek: Szakértői rendszerek
|
||||
|
||||
Ahogy a terület fejlődött, egyre világosabbá vált az üzleti haszna, és az 1980-as években elterjedtek a 'szakértői rendszerek'. "A szakértői rendszerek az első igazán sikeres mesterséges intelligencia (MI) szoftverformák közé tartoztak." ([forrás](https://wikipedia.org/wiki/Expert_system)).
|
||||
|
||||
Ez a rendszer valójában _hibrid_, részben egy szabálymotorból áll, amely meghatározza az üzleti követelményeket, és egy következtetési motorból, amely a szabályrendszert használja új tények levonására.
|
||||
|
||||
Ebben az időszakban a neurális hálók iránti figyelem is növekedett.
|
||||
|
||||
---
|
||||
## 1987 - 1993: AI 'lehűlés'
|
||||
|
||||
A specializált szakértői rendszerek hardverének elterjedése sajnos túlságosan specializálttá vált. A személyi számítógépek térnyerése versenyre kelt ezekkel a nagy, specializált, központosított rendszerekkel. Elkezdődött a számítástechnika demokratizálása, amely végül utat nyitott a modern big data robbanásának.
|
||||
|
||||
---
|
||||
## 1993 - 2011
|
||||
|
||||
Ez az időszak új korszakot hozott a gépi tanulás és MI számára, hogy megoldja azokat a problémákat, amelyeket korábban az adatok és számítástechnikai kapacitás hiánya okozott. Az adatok mennyisége gyorsan növekedni kezdett és szélesebb körben elérhetővé vált, jó és rossz értelemben egyaránt, különösen a 2007 körüli okostelefon megjelenésével. A számítástechnikai kapacitás exponenciálisan bővült, és az algoritmusok is fejlődtek. A terület kezdett éretté válni, ahogy a múlt szabad szellemű napjai egy valódi tudományággá kristályosodtak.
|
||||
|
||||
---
|
||||
## Most
|
||||
|
||||
Ma a gépi tanulás és MI szinte minden részét érinti az életünknek. Ez a korszak gondos megértést igényel az algoritmusok emberi életre gyakorolt kockázatairól és potenciális hatásairól. Ahogy Brad Smith, a Microsoft egyik vezetője kijelentette: "Az információs technológia olyan kérdéseket vet fel, amelyek alapvető emberi jogi védelmek, például a magánélet és a véleménynyilvánítás szabadsága szívéhez vezetnek. Ezek a kérdések fokozzák a felelősséget a technológiai cégek számára, amelyek ezeket a termékeket létrehozzák. Véleményünk szerint ezek átgondolt kormányzati szabályozást és normák kidolgozását is igénylik az elfogadható felhasználások körül" ([forrás](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)).
|
||||
|
||||
---
|
||||
|
||||
Még nem tudjuk, mit tartogat a jövő, de fontos megérteni ezeket a számítógépes rendszereket, valamint a szoftvereket és algoritmusokat, amelyeket futtatnak. Reméljük, hogy ez a tananyag segít jobban megérteni, hogy saját magad dönthess.
|
||||
|
||||
[](https://www.youtube.com/watch?v=mTtDfKgLm54 "A mélytanulás története")
|
||||
> 🎥 Kattints a fenti képre egy videóért: Yann LeCun a mélytanulás történetéről beszél ebben az előadásban
|
||||
|
||||
---
|
||||
## 🚀Kihívás
|
||||
|
||||
Merülj el az egyik történelmi pillanatban, és tudj meg többet az emberekről, akik mögötte állnak. Érdekes személyiségek vannak, és egyetlen tudományos felfedezés sem született kulturális vákuumban. Mit fedezel fel?
|
||||
|
||||
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
---
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Íme néhány néznivaló és hallgatnivaló:
|
||||
|
||||
[Ez a podcast, amelyben Amy Boyd az MI fejlődéséről beszél](http://runasradio.com/Shows/Show/739)
|
||||
|
||||
[](https://www.youtube.com/watch?v=EJt3_bFYKss "Az MI története Amy Boyd által")
|
||||
|
||||
---
|
||||
|
||||
## Feladat
|
||||
|
||||
[Hozz létre egy idővonalat](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "eb6e4d5afd1b21a57d2b9e6d0aac3969",
|
||||
"translation_date": "2025-09-05T16:11:32+00:00",
|
||||
"source_file": "1-Introduction/2-history-of-ML/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Készíts egy idővonalat
|
||||
|
||||
## Útmutató
|
||||
|
||||
Használva [ezt a repót](https://github.com/Digital-Humanities-Toolkit/timeline-builder), hozz létre egy idővonalat az algoritmusok, matematika, statisztika, mesterséges intelligencia (AI) vagy gépi tanulás (ML) történetének valamely aspektusáról, vagy ezek kombinációjáról. Koncentrálhatsz egy személyre, egy ötletre, vagy egy hosszabb gondolkodási időszakra. Ügyelj arra, hogy multimédiás elemeket is hozzáadj.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szoruló |
|
||||
| --------- | ----------------------------------------------- | -------------------------------------- | ------------------------------------------------------------- |
|
||||
| | Egy közzétett idővonal GitHub oldalként van bemutatva | A kód hiányos és nincs közzétéve | Az idővonal hiányos, nem jól kutatott és nincs közzétéve |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális, emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "dbda60e7b1fe5f18974e7858eff0004e",
|
||||
"translation_date": "2025-09-05T16:02:24+00:00",
|
||||
"source_file": "1-Introduction/3-fairness/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Fedezd fel a Responsible AI Toolbox-t
|
||||
|
||||
## Útmutató
|
||||
|
||||
Ebben a leckében megismerkedtél a Responsible AI Toolbox-szal, egy "nyílt forráskódú, közösség által vezérelt projekttel, amely segíti az adatkutatókat az AI rendszerek elemzésében és fejlesztésében." Ehhez a feladathoz fedezz fel a RAI Toolbox egyik [notebookját](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb), és számolj be az eredményeidről egy dolgozatban vagy prezentációban.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiváló | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ------- | --------- | ------------------- |
|
||||
| | Egy dolgozat vagy PowerPoint prezentáció bemutatja a Fairlearn rendszereit, a futtatott notebookot, és az abból levont következtetéseket | Egy dolgozat bemutatásra kerül, de következtetések nélkül | Nem kerül bemutatásra dolgozat |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,132 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
|
||||
"translation_date": "2025-09-05T16:03:22+00:00",
|
||||
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Gépi tanulás technikái
|
||||
|
||||
A gépi tanulási modellek és az általuk használt adatok létrehozása, használata és karbantartása nagyon eltérő folyamat, mint sok más fejlesztési munkafolyamat. Ebben a leckében eloszlatjuk a folyamat körüli homályt, és bemutatjuk azokat a fő technikákat, amelyeket ismerned kell. A következőket fogod megtanulni:
|
||||
|
||||
- Megérteni a gépi tanulás alapvető folyamatait.
|
||||
- Felfedezni az alapfogalmakat, mint például a „modellek”, „előrejelzések” és „tanító adatok”.
|
||||
|
||||
## [Előzetes kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
[](https://youtu.be/4NGM0U2ZSHU "Gépi tanulás kezdőknek - Gépi tanulás technikái")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videóért, amely bemutatja ezt a leckét.
|
||||
|
||||
## Bevezetés
|
||||
|
||||
Magas szinten nézve a gépi tanulási (ML) folyamatok létrehozása több lépésből áll:
|
||||
|
||||
1. **Határozd meg a kérdést**. A legtöbb ML folyamat egy olyan kérdés feltevésével kezdődik, amelyet nem lehet egyszerű feltételes programmal vagy szabályalapú motorral megválaszolni. Ezek a kérdések gyakran az adatok gyűjteménye alapján történő előrejelzések körül forognak.
|
||||
2. **Gyűjtsd össze és készítsd elő az adatokat**. Ahhoz, hogy megválaszolhasd a kérdésedet, adatokra van szükséged. Az adatok minősége és néha mennyisége határozza meg, hogy mennyire jól tudod megválaszolni az eredeti kérdésedet. Az adatok vizualizálása fontos része ennek a fázisnak. Ez a fázis magában foglalja az adatok tanító és tesztelő csoportokra való felosztását a modell építéséhez.
|
||||
3. **Válassz egy tanítási módszert**. A kérdésed és az adataid jellege alapján ki kell választanod, hogyan szeretnéd tanítani a modellt, hogy az a legjobban tükrözze az adataidat, és pontos előrejelzéseket készítsen. Ez az ML folyamat azon része, amely specifikus szakértelmet igényel, és gyakran jelentős mennyiségű kísérletezést.
|
||||
4. **Tanítsd a modellt**. A tanító adataidat használva különböző algoritmusok segítségével tanítasz egy modellt, hogy felismerje az adatokban rejlő mintázatokat. A modell belső súlyokat használhat, amelyeket úgy lehet beállítani, hogy bizonyos adatokat előnyben részesítsen másokkal szemben, hogy jobb modellt építsen.
|
||||
5. **Értékeld a modellt**. Az összegyűjtött adatokból származó, korábban nem látott adatok (tesztelő adatok) segítségével ellenőrzöd, hogyan teljesít a modell.
|
||||
6. **Paraméterek finomhangolása**. A modell teljesítménye alapján újra elvégezheted a folyamatot különböző paraméterek vagy változók használatával, amelyek az algoritmusok viselkedését szabályozzák.
|
||||
7. **Előrejelzés**. Új bemenetek segítségével tesztelheted a modell pontosságát.
|
||||
|
||||
## Milyen kérdést tegyünk fel?
|
||||
|
||||
A számítógépek különösen ügyesek az adatokban rejtett mintázatok felfedezésében. Ez a képesség nagyon hasznos a kutatók számára, akik olyan kérdéseket tesznek fel egy adott területen, amelyeket nem lehet könnyen megválaszolni feltételes szabálymotor létrehozásával. Például egy aktuáriusi feladat esetén egy adatkutató képes lehet kézzel készített szabályokat alkotni a dohányosok és nem dohányosok halálozási arányáról.
|
||||
|
||||
Ha azonban sok más változót is figyelembe veszünk, egy ML modell hatékonyabb lehet a jövőbeli halálozási arányok előrejelzésére a korábbi egészségügyi előzmények alapján. Egy vidámabb példa lehet az áprilisi időjárás előrejelzése egy adott helyen olyan adatok alapján, mint szélesség, hosszúság, éghajlatváltozás, óceán közelsége, jet stream mintázatok és még sok más.
|
||||
|
||||
✅ Ez a [prezentáció](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) az időjárási modellekről történelmi perspektívát nyújt az ML időjárás-elemzésben való használatáról.
|
||||
|
||||
## Modellépítés előtti feladatok
|
||||
|
||||
Mielőtt elkezdenéd a modell építését, számos feladatot kell elvégezned. Ahhoz, hogy tesztelhesd a kérdésedet és hipotézist alkothass a modell előrejelzései alapján, azonosítanod és konfigurálnod kell néhány elemet.
|
||||
|
||||
### Adatok
|
||||
|
||||
Ahhoz, hogy bármilyen bizonyossággal megválaszolhasd a kérdésedet, megfelelő mennyiségű és típusú adatra van szükséged. Ezen a ponton két dolgot kell tenned:
|
||||
|
||||
- **Adatok gyűjtése**. Az előző leckében tárgyalt adatelemzési méltányosságot szem előtt tartva gyűjtsd össze az adataidat gondosan. Légy tisztában az adatok forrásaival, az esetleges benne rejlő torzításokkal, és dokumentáld az eredetüket.
|
||||
- **Adatok előkészítése**. Az adatok előkészítési folyamatának több lépése van. Lehet, hogy össze kell gyűjtened és normalizálnod kell az adatokat, ha különböző forrásokból származnak. Az adatok minőségét és mennyiségét különböző módszerekkel javíthatod, például szöveges adatok számokká alakításával (ahogy a [Klaszterezés](../../5-Clustering/1-Visualize/README.md) során tesszük). Új adatokat is generálhatsz az eredeti alapján (ahogy a [Kategorizálás](../../4-Classification/1-Introduction/README.md) során tesszük). Az adatokat tisztíthatod és szerkesztheted (ahogy a [Webalkalmazás](../../3-Web-App/README.md) lecke előtt tesszük). Végül lehet, hogy véletlenszerűsítened és keverned kell az adatokat, az alkalmazott tanítási technikák függvényében.
|
||||
|
||||
✅ Miután összegyűjtötted és feldolgoztad az adatokat, szánj egy pillanatot arra, hogy megnézd, az adatok formája lehetővé teszi-e számodra a tervezett kérdés megválaszolását. Lehet, hogy az adatok nem teljesítenek jól az adott feladatban, ahogy azt a [Klaszterezés](../../5-Clustering/1-Visualize/README.md) leckékben felfedezzük!
|
||||
|
||||
### Jellemzők és cél
|
||||
|
||||
Egy [jellemző](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) az adataid mérhető tulajdonsága. Sok adatállományban ez oszlopfejlécként jelenik meg, például „dátum”, „méret” vagy „szín”. A jellemző változók, amelyeket általában `X`-ként jelölünk a kódban, azokat a bemeneti változókat képviselik, amelyeket a modell tanítására használunk.
|
||||
|
||||
A cél az, amit megpróbálsz előre jelezni. A célt általában `y`-ként jelöljük a kódban, és az adatokkal kapcsolatos kérdésedre adott választ képviseli: decemberben milyen **színű** tökök lesznek a legolcsóbbak? San Franciscóban melyik környékeken lesz a legjobb az ingatlanok **ára**? Néha a célt címke attribútumnak is nevezik.
|
||||
|
||||
### Jellemző változó kiválasztása
|
||||
|
||||
🎓 **Jellemzők kiválasztása és kinyerése** Hogyan döntöd el, melyik változót válaszd ki a modell építésekor? Valószínűleg végig fogsz menni egy jellemzők kiválasztási vagy kinyerési folyamatán, hogy kiválaszd a legmegfelelőbb változókat a legjobb teljesítményű modellhez. Ezek azonban nem ugyanazok: „A jellemzők kinyerése új jellemzőket hoz létre az eredeti jellemzők függvényeiből, míg a jellemzők kiválasztása az eredeti jellemzők egy részhalmazát adja vissza.” ([forrás](https://wikipedia.org/wiki/Feature_selection))
|
||||
|
||||
### Adatok vizualizálása
|
||||
|
||||
Az adatkutató eszköztárának fontos része az adatok vizualizálásának képessége, amelyhez számos kiváló könyvtár, például Seaborn vagy MatPlotLib áll rendelkezésre. Az adatok vizuális ábrázolása lehetővé teheti, hogy rejtett összefüggéseket fedezz fel, amelyeket kihasználhatsz. A vizualizációk segíthetnek abban is, hogy torzítást vagy kiegyensúlyozatlan adatokat fedezz fel (ahogy azt a [Kategorizálás](../../4-Classification/2-Classifiers-1/README.md) során felfedezzük).
|
||||
|
||||
### Adatállomány felosztása
|
||||
|
||||
A tanítás előtt fel kell osztanod az adatállományodat két vagy több, egyenlőtlen méretű részre, amelyek még mindig jól reprezentálják az adatokat.
|
||||
|
||||
- **Tanítás**. Az adatállomány ezen része illeszkedik a modelledhez, hogy megtanítsa azt. Ez a rész az eredeti adatállomány többségét alkotja.
|
||||
- **Tesztelés**. A tesztadatállomány az eredeti adatokból származó független adatok csoportja, amelyet a modell teljesítményének megerősítésére használsz.
|
||||
- **Érvényesítés**. Az érvényesítési készlet egy kisebb független példák csoportja, amelyet a modell hiperparamétereinek vagy architektúrájának finomhangolására használsz, hogy javítsd a modellt. Az adatok méretétől és a kérdésedtől függően lehet, hogy nem szükséges ezt a harmadik készletet létrehozni (ahogy azt a [Idősor előrejelzés](../../7-TimeSeries/1-Introduction/README.md) leckében megjegyezzük).
|
||||
|
||||
## Modell építése
|
||||
|
||||
A tanító adataidat használva az a célod, hogy egy modellt, vagyis az adataid statisztikai reprezentációját építsd fel különböző algoritmusok segítségével, hogy **tanítsd** azt. A modell tanítása során az adatoknak való kitettség lehetővé teszi, hogy feltételezéseket tegyen az általa felfedezett mintázatokról, amelyeket érvényesít, elfogad vagy elutasít.
|
||||
|
||||
### Tanítási módszer kiválasztása
|
||||
|
||||
A kérdésed és az adataid jellege alapján választasz egy módszert a tanításhoz. A [Scikit-learn dokumentációjának](https://scikit-learn.org/stable/user_guide.html) átlépése során - amelyet ebben a kurzusban használunk - számos módot fedezhetsz fel a modell tanítására. Tapasztalatodtól függően lehet, hogy több különböző módszert kell kipróbálnod a legjobb modell felépítéséhez. Valószínűleg egy olyan folyamaton mész keresztül, amely során az adatkutatók értékelik a modell teljesítményét azáltal, hogy nem látott adatokat adnak neki, ellenőrzik a pontosságot, torzítást és más minőségromboló problémákat, és kiválasztják a legmegfelelőbb tanítási módszert az adott feladathoz.
|
||||
|
||||
### Modell tanítása
|
||||
|
||||
A tanító adataiddal felvértezve készen állsz arra, hogy „illeszd” azokat egy modell létrehozásához. Észre fogod venni, hogy sok ML könyvtárban megtalálható a „model.fit” kód - ekkor küldöd be a jellemző változót értékek tömbjeként (általában „X”) és egy célváltozót (általában „y”).
|
||||
|
||||
### Modell értékelése
|
||||
|
||||
Miután a tanítási folyamat befejeződött (egy nagy modell tanítása sok iterációt, vagy „epoch”-ot igényelhet), képes leszel értékelni a modell minőségét tesztadatok segítségével, hogy felmérd a teljesítményét. Ezek az adatok az eredeti adatok egy részhalmazát képezik, amelyeket a modell korábban nem elemzett. Kinyomtathatsz egy táblázatot a modell minőségéről szóló metrikákról.
|
||||
|
||||
🎓 **Modell illesztése**
|
||||
|
||||
A gépi tanulás kontextusában a modell illesztése arra utal, hogy a modell alapvető funkciója mennyire pontosan próbálja elemezni azokat az adatokat, amelyekkel nem ismerős.
|
||||
|
||||
🎓 **Alulillesztés** és **túlillesztés** gyakori problémák, amelyek rontják a modell minőségét, mivel a modell vagy nem elég jól, vagy túl jól illeszkedik. Ez azt okozza, hogy a modell vagy túl szorosan, vagy túl lazán igazodik a tanító adataihoz. Egy túlillesztett modell túl jól előrejelzi a tanító adatokat, mert túl jól megtanulta az adatok részleteit és zaját. Egy alulillesztett modell nem pontos, mivel sem a tanító adatait, sem azokat az adatokat, amelyeket még nem „látott”, nem tudja pontosan elemezni.
|
||||
|
||||

|
||||
> Infografika: [Jen Looper](https://twitter.com/jenlooper)
|
||||
|
||||
## Paraméterek finomhangolása
|
||||
|
||||
Miután az első tanítás befejeződött, figyeld meg a modell minőségét, és fontold meg annak javítását a „hiperparaméterek” finomhangolásával. Olvass többet a folyamatról [a dokumentációban](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
|
||||
|
||||
## Előrejelzés
|
||||
|
||||
Ez az a pillanat, amikor teljesen új adatokat használhatsz a modell pontosságának tesztelésére. Egy „alkalmazott” ML környezetben, ahol webes eszközöket építesz a modell használatához a gyakorlatban, ez a folyamat magában foglalhatja a felhasználói bemenetek (például egy gombnyomás) összegyűjtését egy változó beállításához, amelyet elküldesz a modellnek következtetésre vagy értékelésre.
|
||||
|
||||
Ezekben a leckékben felfedezed, hogyan használhatod ezeket a lépéseket az adatok előkészítésére, modellek építésére, tesztelésére, értékelésére és előrejelzésére - mindazokat a mozdulatokat, amelyeket egy adatkutató végez, és még többet, ahogy haladsz az úton, hogy „full stack” ML mérnökké válj.
|
||||
|
||||
---
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
Rajzolj egy folyamatábrát, amely tükrözi egy ML szakember lépéseit. Hol látod magad jelenleg a folyamatban? Hol gondolod, hogy nehézségekbe ütközöl? Mi tűnik könnyűnek számodra?
|
||||
|
||||
## [Utólagos kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Keress online interjúkat adatkutatókkal, akik a napi munkájukról beszélnek. Itt van [egy](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
|
||||
|
||||
## Feladat
|
||||
|
||||
[Interjú egy adatkutatóval](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "70d65aeddc06170bc1aed5b27805f930",
|
||||
"translation_date": "2025-09-05T16:05:46+00:00",
|
||||
"source_file": "1-Introduction/4-techniques-of-ML/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Beszélgetés egy adatelemzővel
|
||||
|
||||
## Útmutató
|
||||
|
||||
A cégedben, egy felhasználói csoportban, vagy barátaid és diáktársaid között beszélgess valakivel, aki hivatásszerűen adatelemzőként dolgozik. Írj egy rövid (500 szavas) esszét a napi tevékenységeikről. Szakértők, vagy inkább "full stack" módon dolgoznak?
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------- | --------------------- |
|
||||
| | A megfelelő hosszúságú esszé, forrásokkal ellátva, .doc fájl formátumban | Az esszé rosszul hivatkozott vagy rövidebb a szükséges hosszúságnál | Nincs esszé benyújtva |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,36 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "cf8ecc83f28e5b98051d2179eca08e08",
|
||||
"translation_date": "2025-09-05T15:57:50+00:00",
|
||||
"source_file": "1-Introduction/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Bevezetés a gépi tanulásba
|
||||
|
||||
A tananyag ezen részében megismerkedsz a gépi tanulás alapfogalmaival, azzal, hogy mi is ez, valamint annak történetével és a kutatók által alkalmazott technikákkal. Fedezzük fel együtt a gépi tanulás új világát!
|
||||
|
||||

|
||||
> Fotó: <a href="https://unsplash.com/@bill_oxford?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Bill Oxford</a> az <a href="https://unsplash.com/s/photos/globe?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a> oldalán
|
||||
|
||||
### Leckék
|
||||
|
||||
1. [Bevezetés a gépi tanulásba](1-intro-to-ML/README.md)
|
||||
1. [A gépi tanulás és mesterséges intelligencia története](2-history-of-ML/README.md)
|
||||
1. [Méltányosság és gépi tanulás](3-fairness/README.md)
|
||||
1. [A gépi tanulás technikái](4-techniques-of-ML/README.md)
|
||||
### Köszönetnyilvánítás
|
||||
|
||||
"A gépi tanulás bevezetése" című anyagot ♥️-vel írta egy csapat, amelynek tagjai: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) és [Jen Looper](https://twitter.com/jenlooper)
|
||||
|
||||
"A gépi tanulás története" című anyagot ♥️-vel írta [Jen Looper](https://twitter.com/jenlooper) és [Amy Boyd](https://twitter.com/AmyKateNicho)
|
||||
|
||||
"Méltányosság és gépi tanulás" című anyagot ♥️-vel írta [Tomomi Imura](https://twitter.com/girliemac)
|
||||
|
||||
"A gépi tanulás technikái" című anyagot ♥️-vel írta [Jen Looper](https://twitter.com/jenlooper) és [Chris Noring](https://twitter.com/softchris)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,227 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
|
||||
"translation_date": "2025-09-05T15:21:00+00:00",
|
||||
"source_file": "2-Regression/1-Tools/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Kezdjük el a Python és a Scikit-learn használatát regressziós modellekhez
|
||||
|
||||

|
||||
|
||||
> Vázlatrajz: [Tomomi Imura](https://www.twitter.com/girlie_mac)
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
> ### [Ez a lecke R nyelven is elérhető!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
|
||||
|
||||
## Bevezetés
|
||||
|
||||
Ebben a négy leckében megtanulhatod, hogyan építs regressziós modelleket. Rövidesen megbeszéljük, hogy mire használhatók ezek. De mielőtt bármibe belekezdenél, győződj meg róla, hogy a megfelelő eszközök rendelkezésre állnak a folyamat elindításához!
|
||||
|
||||
Ebben a leckében megtanulod:
|
||||
|
||||
- Hogyan konfiguráld a számítógéped helyi gépi tanulási feladatokhoz.
|
||||
- Hogyan dolgozz Jupyter notebookokkal.
|
||||
- Hogyan használd a Scikit-learn könyvtárat, beleértve annak telepítését.
|
||||
- Hogyan fedezd fel a lineáris regressziót egy gyakorlati feladaton keresztül.
|
||||
|
||||
## Telepítések és konfigurációk
|
||||
|
||||
[](https://youtu.be/-DfeD2k2Kj0 "ML kezdőknek - Eszközök beállítása gépi tanulási modellek építéséhez")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videóért, amely bemutatja, hogyan konfiguráld a számítógéped a gépi tanuláshoz.
|
||||
|
||||
1. **Telepítsd a Python-t**. Győződj meg róla, hogy a [Python](https://www.python.org/downloads/) telepítve van a számítógépeden. A Python-t számos adatfeldolgozási és gépi tanulási feladathoz fogod használni. A legtöbb számítógépes rendszer már tartalmaz Python telepítést. Hasznosak lehetnek a [Python Coding Pack-ek](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) is, amelyek megkönnyítik a beállítást néhány felhasználó számára.
|
||||
|
||||
A Python bizonyos használati módjai azonban eltérő verziókat igényelhetnek. Ezért hasznos lehet egy [virtuális környezetben](https://docs.python.org/3/library/venv.html) dolgozni.
|
||||
|
||||
2. **Telepítsd a Visual Studio Code-ot**. Győződj meg róla, hogy a Visual Studio Code telepítve van a számítógépedre. Kövesd ezeket az utasításokat a [Visual Studio Code telepítéséhez](https://code.visualstudio.com/). Ebben a kurzusban a Python-t a Visual Studio Code-ban fogod használni, ezért érdemes lehet felfrissíteni a tudásodat arról, hogyan [konfiguráld a Visual Studio Code-ot](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) Python fejlesztéshez.
|
||||
|
||||
> Ismerkedj meg a Python-nal ezeknek a [Learn moduloknak](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) a segítségével.
|
||||
>
|
||||
> [](https://youtu.be/yyQM70vi7V8 "Python beállítása a Visual Studio Code-ban")
|
||||
>
|
||||
> 🎥 Kattints a fenti képre egy videóért: Python használata a VS Code-ban.
|
||||
|
||||
3. **Telepítsd a Scikit-learn-t**, a [következő utasítások](https://scikit-learn.org/stable/install.html) alapján. Mivel Python 3-at kell használnod, ajánlott egy virtuális környezet használata. Ha M1 Mac-en telepíted ezt a könyvtárat, különleges utasításokat találsz a fenti oldalon.
|
||||
|
||||
4. **Telepítsd a Jupyter Notebook-ot**. Telepítsd a [Jupyter csomagot](https://pypi.org/project/jupyter/).
|
||||
|
||||
## A gépi tanulási fejlesztési környezeted
|
||||
|
||||
A Python kód fejlesztéséhez és gépi tanulási modellek létrehozásához **notebookokat** fogsz használni. Ez a fájltípus az adatkutatók körében gyakori eszköz, és `.ipynb` kiterjesztéssel azonosítható.
|
||||
|
||||
A notebookok interaktív környezetet biztosítanak, amely lehetővé teszi a fejlesztő számára, hogy kódot írjon, jegyzeteket készítsen, és dokumentációt írjon a kód köré, ami különösen hasznos kísérleti vagy kutatási projektek esetén.
|
||||
|
||||
[](https://youtu.be/7E-jC8FLA2E "ML kezdőknek - Jupyter Notebookok beállítása regressziós modellek építéséhez")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videóért, amely bemutatja ezt a gyakorlatot.
|
||||
|
||||
### Gyakorlat - dolgozz egy notebookkal
|
||||
|
||||
Ebben a mappában megtalálod a _notebook.ipynb_ fájlt.
|
||||
|
||||
1. Nyisd meg a _notebook.ipynb_ fájlt a Visual Studio Code-ban.
|
||||
|
||||
Egy Jupyter szerver indul el Python 3+ környezettel. A notebookban olyan részeket találsz, amelyek `futtathatók`, azaz kódrészletek. Egy kódrészletet a lejátszás gombra hasonlító ikon kiválasztásával futtathatsz.
|
||||
|
||||
2. Válaszd ki az `md` ikont, és adj hozzá egy kis markdown szöveget, például a következőt: **# Üdvözöllek a notebookodban**.
|
||||
|
||||
Ezután adj hozzá egy kis Python kódot.
|
||||
|
||||
3. Írd be a következő kódot: **print('hello notebook')**.
|
||||
4. Kattints a nyílra a kód futtatásához.
|
||||
|
||||
A következő kimenetet kell látnod:
|
||||
|
||||
```output
|
||||
hello notebook
|
||||
```
|
||||
|
||||

|
||||
|
||||
A kódot megjegyzésekkel egészítheted ki, hogy önmagad számára dokumentáld a notebookot.
|
||||
|
||||
✅ Gondolkodj el egy percre azon, hogy mennyire különbözik egy webfejlesztő munkakörnyezete egy adatkutatóétól.
|
||||
|
||||
## Scikit-learn használatának elsajátítása
|
||||
|
||||
Most, hogy a Python be van állítva a helyi környezetedben, és kényelmesen használod a Jupyter notebookokat, ismerkedj meg a Scikit-learn-nel (ejtsd: `száj` mint a `science`). A Scikit-learn egy [kiterjedt API-t](https://scikit-learn.org/stable/modules/classes.html#api-ref) biztosít, amely segít a gépi tanulási feladatok elvégzésében.
|
||||
|
||||
A [weboldaluk](https://scikit-learn.org/stable/getting_started.html) szerint: "A Scikit-learn egy nyílt forráskódú gépi tanulási könyvtár, amely támogatja a felügyelt és felügyelet nélküli tanulást. Emellett különféle eszközöket biztosít a modellillesztéshez, adat-előfeldolgozáshoz, modellkiválasztáshoz és értékeléshez, valamint számos egyéb segédprogramhoz."
|
||||
|
||||
Ebben a kurzusban a Scikit-learn-t és más eszközöket fogsz használni gépi tanulási modellek építéséhez, hogy úgynevezett 'hagyományos gépi tanulási' feladatokat végezz. Szándékosan kerültük a neurális hálózatokat és a mélytanulást, mivel ezek jobban lefedhetők a hamarosan megjelenő 'AI kezdőknek' tananyagunkban.
|
||||
|
||||
A Scikit-learn egyszerűvé teszi a modellek építését és értékelését. Elsősorban numerikus adatok használatára összpontosít, és számos előre elkészített adathalmazt tartalmaz tanulási célokra. Emellett előre elkészített modelleket is tartalmaz, amelyeket a diákok kipróbálhatnak. Fedezzük fel a folyamatot, amely során előre csomagolt adatokat töltünk be, és egy beépített becslőt használunk az első ML modellünkhöz a Scikit-learn segítségével.
|
||||
|
||||
## Gyakorlat - az első Scikit-learn notebookod
|
||||
|
||||
> Ez az oktatóanyag a Scikit-learn weboldalán található [lineáris regressziós példa](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) alapján készült.
|
||||
|
||||
[](https://youtu.be/2xkXL5EUpS0 "ML kezdőknek - Az első lineáris regressziós projekted Python-ban")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videóért, amely bemutatja ezt a gyakorlatot.
|
||||
|
||||
A leckéhez tartozó _notebook.ipynb_ fájlban töröld ki az összes cellát a 'szemetes' ikonra kattintva.
|
||||
|
||||
Ebben a részben egy kis, a Scikit-learn-be beépített diabétesz adathalmazzal fogsz dolgozni tanulási célokra. Képzeld el, hogy egy kezelést szeretnél tesztelni cukorbetegek számára. A gépi tanulási modellek segíthetnek meghatározni, hogy mely betegek reagálnának jobban a kezelésre, a változók kombinációi alapján. Még egy nagyon alapvető regressziós modell is, ha vizualizáljuk, információt nyújthat a változókról, amelyek segíthetnek a klinikai vizsgálatok megszervezésében.
|
||||
|
||||
✅ Számos regressziós módszer létezik, és hogy melyiket választod, az attól függ, milyen kérdésre keresel választ. Ha például egy adott korú személy várható magasságát szeretnéd megjósolni, lineáris regressziót használnál, mivel egy **numerikus értéket** keresel. Ha viszont azt szeretnéd megtudni, hogy egy konyha típusa vegánnak tekinthető-e vagy sem, akkor egy **kategória-hozzárendelést** keresel, így logisztikus regressziót használnál. Később többet megtudhatsz a logisztikus regresszióról. Gondolkodj el azon, hogy milyen kérdéseket tehetsz fel az adatokkal kapcsolatban, és melyik módszer lenne megfelelőbb.
|
||||
|
||||
Kezdjünk neki ennek a feladatnak.
|
||||
|
||||
### Könyvtárak importálása
|
||||
|
||||
Ehhez a feladathoz néhány könyvtárat fogunk importálni:
|
||||
|
||||
- **matplotlib**. Ez egy hasznos [grafikonkészítő eszköz](https://matplotlib.org/), amelyet vonaldiagramok készítésére fogunk használni.
|
||||
- **numpy**. A [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) egy hasznos könyvtár numerikus adatok kezelésére Python-ban.
|
||||
- **sklearn**. Ez a [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) könyvtár.
|
||||
|
||||
Importálj néhány könyvtárat a feladatok elvégzéséhez.
|
||||
|
||||
1. Add hozzá az importokat az alábbi kód beírásával:
|
||||
|
||||
```python
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
from sklearn import datasets, linear_model, model_selection
|
||||
```
|
||||
|
||||
A fenti kódban importálod a `matplotlib`-et, a `numpy`-t, valamint a `datasets`, `linear_model` és `model_selection` modulokat a `sklearn`-ből. A `model_selection` a teszt- és tanulóhalmazok szétválasztására szolgál.
|
||||
|
||||
### A diabétesz adathalmaz
|
||||
|
||||
A beépített [diabétesz adathalmaz](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 442 diabéteszhez kapcsolódó mintát tartalmaz, 10 jellemző változóval, amelyek közül néhány:
|
||||
|
||||
- age: életkor években
|
||||
- bmi: testtömegindex
|
||||
- bp: átlagos vérnyomás
|
||||
- s1 tc: T-sejtek (egy típusú fehérvérsejtek)
|
||||
|
||||
✅ Ez az adathalmaz tartalmazza a 'nem' fogalmát, mint a diabétesz kutatás szempontjából fontos jellemző változót. Számos orvosi adathalmaz tartalmaz ilyen típusú bináris osztályozást. Gondolkodj el azon, hogy az ilyen kategorizálások hogyan zárhatnak ki bizonyos népességcsoportokat a kezelésekből.
|
||||
|
||||
Most töltsd be az X és y adatokat.
|
||||
|
||||
> 🎓 Ne feledd, hogy ez felügyelt tanulás, és szükségünk van egy megnevezett 'y' célváltozóra.
|
||||
|
||||
Egy új kódcellában töltsd be a diabétesz adathalmazt a `load_diabetes()` hívásával. A `return_X_y=True` bemenet jelzi, hogy az `X` egy adatmátrix lesz, az `y` pedig a regressziós cél.
|
||||
|
||||
1. Adj hozzá néhány print parancsot, hogy megjelenítsd az adatmátrix alakját és az első elemét:
|
||||
|
||||
```python
|
||||
X, y = datasets.load_diabetes(return_X_y=True)
|
||||
print(X.shape)
|
||||
print(X[0])
|
||||
```
|
||||
|
||||
Amit válaszként kapsz, az egy tuple. Amit csinálsz, az az, hogy a tuple első két értékét hozzárendeled az `X`-hez és az `y`-hoz. Tudj meg többet a [tuple-ökről](https://wikipedia.org/wiki/Tuple).
|
||||
|
||||
Láthatod, hogy ezek az adatok 442 elemet tartalmaznak, amelyek 10 elemből álló tömbökbe vannak rendezve:
|
||||
|
||||
```text
|
||||
(442, 10)
|
||||
[ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076
|
||||
-0.04340085 -0.00259226 0.01990842 -0.01764613]
|
||||
```
|
||||
|
||||
✅ Gondolkodj el az adatok és a regressziós cél közötti kapcsolaton. A lineáris regresszió az X jellemző és az y célváltozó közötti kapcsolatot jósolja meg. Megtalálod a [célváltozót](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) a diabétesz adathalmaz dokumentációjában? Mit mutat ez az adathalmaz a célváltozó alapján?
|
||||
|
||||
2. Ezután válassz ki egy részt ebből az adathalmazból, hogy ábrázolhasd, például az adathalmaz 3. oszlopát. Ezt a `:` operátorral teheted meg, hogy kiválaszd az összes sort, majd az index (2) segítségével kiválaszd a 3. oszlopot. Az adatokat 2D tömbbé is átalakíthatod - ahogy az ábrázoláshoz szükséges - a `reshape(n_rows, n_columns)` használatával. Ha az egyik paraméter -1, a megfelelő dimenzió automatikusan kiszámításra kerül.
|
||||
|
||||
```python
|
||||
X = X[:, 2]
|
||||
X = X.reshape((-1,1))
|
||||
```
|
||||
|
||||
✅ Bármikor nyomtasd ki az adatokat, hogy ellenőrizd az alakjukat.
|
||||
|
||||
3. Most, hogy az adatok készen állnak az ábrázolásra, megnézheted, hogy egy gép segíthet-e logikus határvonalat húzni az adathalmaz számai között. Ehhez szét kell választanod az adatokat (X) és a célváltozót (y) teszt- és tanulóhalmazokra. A Scikit-learn egyszerű módot kínál erre; az adataidat egy adott ponton oszthatod szét.
|
||||
|
||||
```python
|
||||
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
|
||||
```
|
||||
|
||||
4. Most készen állsz a modell betanítására! Töltsd be a lineáris regressziós modellt, és tanítsd be az X és y tanulóhalmazokkal a `model.fit()` használatával:
|
||||
|
||||
```python
|
||||
model = linear_model.LinearRegression()
|
||||
model.fit(X_train, y_train)
|
||||
```
|
||||
|
||||
✅ A `model.fit()` egy olyan függvény, amelyet sok ML könyvtárban, például a TensorFlow-ban is láthatsz.
|
||||
|
||||
5. Ezután hozz létre egy előrejelzést a tesztadatok alapján a `predict()` függvény használatával. Ezt fogod használni a vonal meghúzásához az adathalmaz csoportjai között.
|
||||
|
||||
```python
|
||||
y_pred = model.predict(X_test)
|
||||
```
|
||||
|
||||
6. Most itt az ideje, hogy megjelenítsd az adatokat egy diagramon. A Matplotlib
|
||||
✅ Gondolkodj el egy kicsit azon, mi történik itt. Egy egyenes vonal halad át sok apró adatponton, de pontosan mit csinál? Látod, hogyan tudnád ezt a vonalat felhasználni arra, hogy megjósold, hol helyezkedne el egy új, még nem látott adatpont a grafikon y tengelyéhez viszonyítva? Próbáld meg szavakba önteni ennek a modellnek a gyakorlati hasznát.
|
||||
|
||||
Gratulálok, elkészítetted az első lineáris regressziós modelledet, készítettél vele egy előrejelzést, és megjelenítetted egy grafikonon!
|
||||
|
||||
---
|
||||
## 🚀Kihívás
|
||||
|
||||
Ábrázolj egy másik változót ebből az adatállományból. Tipp: szerkeszd ezt a sort: `X = X[:,2]`. Ennek az adatállománynak a célértéke alapján mit tudsz felfedezni a cukorbetegség betegségként való előrehaladásáról?
|
||||
## [Utólagos kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Ebben a bemutatóban egyszerű lineáris regresszióval dolgoztál, nem pedig univariáns vagy többszörös lineáris regresszióval. Olvass egy kicsit ezeknek a módszereknek a különbségeiről, vagy nézd meg [ezt a videót](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef).
|
||||
|
||||
Olvass többet a regresszió fogalmáról, és gondolkodj el azon, milyen típusú kérdésekre lehet választ adni ezzel a technikával. Vegyél részt [ebben a bemutatóban](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott), hogy elmélyítsd a tudásodat.
|
||||
|
||||
## Feladat
|
||||
|
||||
[Egy másik adatállomány](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,27 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "74a5cf83e4ebc302afbcbc4f418afd0a",
|
||||
"translation_date": "2025-09-05T15:23:35+00:00",
|
||||
"source_file": "2-Regression/1-Tools/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Regresszió Scikit-learn segítségével
|
||||
|
||||
## Útmutató
|
||||
|
||||
Tekintsd meg a [Linnerud adatállományt](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) a Scikit-learn-ben. Ez az adatállomány több [célváltozót](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset) tartalmaz: „Három edzés (adat) és három fiziológiai (cél) változót tartalmaz, amelyeket húsz középkorú férfitól gyűjtöttek egy fitneszklubban.”
|
||||
|
||||
Saját szavaiddal írd le, hogyan lehet létrehozni egy regressziós modellt, amely ábrázolja a derékméret és az elvégzett felülések közötti kapcsolatot. Végezd el ugyanezt az adatállomány többi adatpontjára is.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- |
|
||||
| Leíró bekezdés beküldése | Jól megírt bekezdés került beküldésre | Néhány mondat került beküldésre | Nem került beküldésre leírás |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T15:24:00+00:00",
|
||||
"source_file": "2-Regression/1-Tools/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,226 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "7c077988328ebfe33b24d07945f16eca",
|
||||
"translation_date": "2025-09-05T15:24:45+00:00",
|
||||
"source_file": "2-Regression/2-Data/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Készítsünk regressziós modellt Scikit-learn segítségével: adatok előkészítése és vizualizálása
|
||||
|
||||

|
||||
|
||||
Infografika: [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
> ### [Ez a lecke elérhető R-ben is!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
|
||||
|
||||
## Bevezetés
|
||||
|
||||
Most, hogy rendelkezésedre állnak azok az eszközök, amelyekkel elkezdheted a gépi tanulási modellek építését Scikit-learn segítségével, készen állsz arra, hogy kérdéseket tegyél fel az adataiddal kapcsolatban. Amikor adatokkal dolgozol és gépi tanulási megoldásokat alkalmazol, nagyon fontos, hogy megtanuld, hogyan tegyél fel megfelelő kérdéseket, hogy kiaknázhasd az adathalmazodban rejlő lehetőségeket.
|
||||
|
||||
Ebben a leckében megtanulod:
|
||||
|
||||
- Hogyan készítsd elő az adataidat a modellépítéshez.
|
||||
- Hogyan használd a Matplotlibet adatvizualizációhoz.
|
||||
|
||||
## Hogyan tegyél fel megfelelő kérdést az adataiddal kapcsolatban?
|
||||
|
||||
Az a kérdés, amelyre választ szeretnél kapni, meghatározza, hogy milyen típusú gépi tanulási algoritmusokat fogsz használni. A kapott válasz minősége pedig nagymértékben függ az adataid természetétől.
|
||||
|
||||
Nézd meg a [leckéhez biztosított adatokat](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv). Ezt a .csv fájlt megnyithatod VS Code-ban. Egy gyors átnézés azonnal megmutatja, hogy vannak hiányzó értékek, valamint szöveges és numerikus adatok keveréke. Van egy furcsa oszlop is, amelyet "Package"-nek hívnak, ahol az adatok között szerepelnek például "sacks", "bins" és más értékek. Az adatok valójában elég zűrösek.
|
||||
|
||||
[](https://youtu.be/5qGjczWTrDQ "ML kezdőknek - Hogyan elemezzünk és tisztítsunk egy adathalmazt")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videóért, amely bemutatja az adatok előkészítését ehhez a leckéhez.
|
||||
|
||||
Valójában nem túl gyakori, hogy egy adathalmaz teljesen készen áll arra, hogy gépi tanulási modellt készítsünk belőle. Ebben a leckében megtanulod, hogyan készíts elő egy nyers adathalmazt standard Python könyvtárak segítségével. Emellett különböző technikákat is megismerhetsz az adatok vizualizálására.
|
||||
|
||||
## Esettanulmány: "a tökpiac"
|
||||
|
||||
Ebben a mappában találsz egy .csv fájlt a gyökér `data` mappában, amelynek neve [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv). Ez a fájl 1757 sor adatot tartalmaz a tökpiacról, városok szerint csoportosítva. Ez nyers adat, amelyet az [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) oldalról származtatott az Egyesült Államok Mezőgazdasági Minisztériuma.
|
||||
|
||||
### Adatok előkészítése
|
||||
|
||||
Ezek az adatok közkincsnek számítanak. Az USDA weboldaláról külön fájlokban, városonként letölthetők. Az adatok túlzott szétaprózódásának elkerülése érdekében az összes városi adatot egy táblázatba fűztük össze, így már egy kicsit _előkészítettük_ az adatokat. Most nézzük meg közelebbről az adatokat.
|
||||
|
||||
### A tökadatok - korai következtetések
|
||||
|
||||
Mit veszel észre ezekkel az adatokkal kapcsolatban? Már láttad, hogy van szövegek, számok, hiányzó értékek és furcsa értékek keveréke, amelyeket értelmezni kell.
|
||||
|
||||
Milyen kérdést tehetsz fel ezekkel az adatokkal kapcsolatban regressziós technikát alkalmazva? Például: "Előrejelezni egy tök árát egy adott hónapban." Ha újra megnézed az adatokat, láthatod, hogy néhány változtatást kell végrehajtanod, hogy létrehozd a feladathoz szükséges adatstruktúrát.
|
||||
|
||||
## Gyakorlat - elemezd a tökadatokat
|
||||
|
||||
Használjuk a [Pandas](https://pandas.pydata.org/) könyvtárat (a név a `Python Data Analysis` rövidítése), amely nagyon hasznos az adatok formázásához, hogy elemezzük és előkészítsük a tökadatokat.
|
||||
|
||||
### Először ellenőrizd a hiányzó dátumokat
|
||||
|
||||
Először lépéseket kell tenned a hiányzó dátumok ellenőrzésére:
|
||||
|
||||
1. Konvertáld a dátumokat hónap formátumba (ezek amerikai dátumok, tehát a formátum `MM/DD/YYYY`).
|
||||
2. Hozz létre egy új oszlopot, amely csak a hónapot tartalmazza.
|
||||
|
||||
Nyisd meg a _notebook.ipynb_ fájlt a Visual Studio Code-ban, és importáld a táblázatot egy új Pandas dataframe-be.
|
||||
|
||||
1. Használd a `head()` függvényt az első öt sor megtekintéséhez.
|
||||
|
||||
```python
|
||||
import pandas as pd
|
||||
pumpkins = pd.read_csv('../data/US-pumpkins.csv')
|
||||
pumpkins.head()
|
||||
```
|
||||
|
||||
✅ Milyen függvényt használnál az utolsó öt sor megtekintéséhez?
|
||||
|
||||
1. Ellenőrizd, hogy van-e hiányzó adat az aktuális dataframe-ben:
|
||||
|
||||
```python
|
||||
pumpkins.isnull().sum()
|
||||
```
|
||||
|
||||
Van hiányzó adat, de lehet, hogy ez nem számít a feladat szempontjából.
|
||||
|
||||
1. Hogy könnyebben dolgozhass a dataframe-mel, válaszd ki csak azokat az oszlopokat, amelyekre szükséged van, a `loc` függvény segítségével, amely az eredeti dataframe-ből egy sorokból (első paraméter) és oszlopokból (második paraméter) álló csoportot von ki. Az alábbi esetben a `:` kifejezés azt jelenti, hogy "minden sor".
|
||||
|
||||
```python
|
||||
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
|
||||
pumpkins = pumpkins.loc[:, columns_to_select]
|
||||
```
|
||||
|
||||
### Másodszor, határozd meg a tök átlagárát
|
||||
|
||||
Gondold át, hogyan határozhatod meg egy tök átlagárát egy adott hónapban. Mely oszlopokat választanád ehhez a feladathoz? Tipp: három oszlopra lesz szükséged.
|
||||
|
||||
Megoldás: vedd az `Low Price` és `High Price` oszlopok átlagát, hogy kitöltsd az új Price oszlopot, és konvertáld a Date oszlopot úgy, hogy csak a hónapot mutassa. Szerencsére az előző ellenőrzés szerint nincs hiányzó adat a dátumok vagy árak esetében.
|
||||
|
||||
1. Az átlag kiszámításához add hozzá a következő kódot:
|
||||
|
||||
```python
|
||||
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
|
||||
|
||||
month = pd.DatetimeIndex(pumpkins['Date']).month
|
||||
|
||||
```
|
||||
|
||||
✅ Nyugodtan nyomtass ki bármilyen adatot, amit ellenőrizni szeretnél a `print(month)` segítségével.
|
||||
|
||||
2. Most másold át az átalakított adatokat egy új Pandas dataframe-be:
|
||||
|
||||
```python
|
||||
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
|
||||
```
|
||||
|
||||
Ha kinyomtatod a dataframe-et, egy tiszta, rendezett adathalmazt fogsz látni, amelyre építheted az új regressziós modelledet.
|
||||
|
||||
### De várj! Valami furcsa van itt
|
||||
|
||||
Ha megnézed a `Package` oszlopot, a tökök sokféle konfigurációban kerülnek értékesítésre. Néhányat "1 1/9 bushel" mértékegységben, néhányat "1/2 bushel" mértékegységben, néhányat darabonként, néhányat fontonként, és néhányat nagy dobozokban, amelyek szélessége változó.
|
||||
|
||||
> Úgy tűnik, hogy a tökök súlyának következetes mérése nagyon nehéz
|
||||
|
||||
Ha beleásod magad az eredeti adatokba, érdekes, hogy bármi, aminek `Unit of Sale` értéke 'EACH' vagy 'PER BIN', szintén a `Package` típus szerint van megadva, például hüvelykben, binben vagy darabonként. Úgy tűnik, hogy a tökök súlyának következetes mérése nagyon nehéz, ezért szűrjük őket úgy, hogy csak azokat a tököket válasszuk ki, amelyek `Package` oszlopában szerepel a 'bushel' szó.
|
||||
|
||||
1. Adj hozzá egy szűrőt a fájl tetejére, az eredeti .csv importálása alá:
|
||||
|
||||
```python
|
||||
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
|
||||
```
|
||||
|
||||
Ha most kinyomtatod az adatokat, láthatod, hogy csak azokat a körülbelül 415 sort kapod, amelyek bushelben mért tököket tartalmaznak.
|
||||
|
||||
### De várj! Még egy dolgot meg kell tenni
|
||||
|
||||
Észrevetted, hogy a bushel mennyisége soronként változik? Normalizálnod kell az árképzést, hogy bushelre vetítve mutasd az árakat, tehát végezz némi matematikát az árak standardizálásához.
|
||||
|
||||
1. Add hozzá ezeket a sorokat a new_pumpkins dataframe létrehozó blokk után:
|
||||
|
||||
```python
|
||||
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
|
||||
|
||||
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
|
||||
```
|
||||
|
||||
✅ A [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) szerint a bushel súlya a termék típusától függ, mivel ez egy térfogatmérés. "Egy bushel paradicsom például 56 fontot kell, hogy nyomjon... A levelek és zöldek több helyet foglalnak kevesebb súllyal, így egy bushel spenót csak 20 font." Ez mind elég bonyolult! Ne foglalkozzunk a bushel-font átváltással, hanem inkább bushelre vetítve árazzunk. Mindez a bushel tökök tanulmányozása azonban megmutatja, mennyire fontos megérteni az adatok természetét!
|
||||
|
||||
Most már elemezheted az árképzést egységenként a bushel mértékegység alapján. Ha még egyszer kinyomtatod az adatokat, láthatod, hogyan lett standardizálva.
|
||||
|
||||
✅ Észrevetted, hogy a fél bushelben árult tökök nagyon drágák? Ki tudod találni, miért? Tipp: a kis tökök sokkal drágábbak, mint a nagyok, valószínűleg azért, mert sokkal több van belőlük bushelben, tekintve az egy nagy üreges tök által elfoglalt kihasználatlan helyet.
|
||||
|
||||
## Vizualizációs stratégiák
|
||||
|
||||
Az adatelemzők egyik feladata, hogy bemutassák az adatok minőségét és természetét, amelyekkel dolgoznak. Ehhez gyakran készítenek érdekes vizualizációkat, például diagramokat, grafikonokat és táblázatokat, amelyek az adatok különböző aspektusait mutatják be. Ily módon vizuálisan képesek megmutatni az összefüggéseket és hiányosságokat, amelyeket egyébként nehéz lenne feltárni.
|
||||
|
||||
[](https://youtu.be/SbUkxH6IJo0 "ML kezdőknek - Hogyan vizualizáljuk az adatokat Matplotlib segítségével")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videóért, amely bemutatja az adatok vizualizálását ehhez a leckéhez.
|
||||
|
||||
A vizualizációk segíthetnek meghatározni, hogy mely gépi tanulási technika a legmegfelelőbb az adatokhoz. Például egy olyan szórásdiagram, amely látszólag egy vonalat követ, azt jelzi, hogy az adatok jó jelöltek lehetnek egy lineáris regressziós feladathoz.
|
||||
|
||||
Egy adatvizualizációs könyvtár, amely jól működik Jupyter notebookokban, a [Matplotlib](https://matplotlib.org/) (amelyet az előző leckében is láttál).
|
||||
|
||||
> Szerezz több tapasztalatot az adatvizualizációval [ezekben az oktatóanyagokban](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
|
||||
|
||||
## Gyakorlat - kísérletezz a Matplotlibgel
|
||||
|
||||
Próbálj meg néhány alapvető diagramot készíteni, hogy megjelenítsd az új dataframe-et, amelyet éppen létrehoztál. Mit mutatna egy alapvető vonaldiagram?
|
||||
|
||||
1. Importáld a Matplotlibet a fájl tetején, a Pandas importálása alatt:
|
||||
|
||||
```python
|
||||
import matplotlib.pyplot as plt
|
||||
```
|
||||
|
||||
1. Futtasd újra az egész notebookot a frissítéshez.
|
||||
1. A notebook alján adj hozzá egy cellát, hogy dobozdiagramot készíts:
|
||||
|
||||
```python
|
||||
price = new_pumpkins.Price
|
||||
month = new_pumpkins.Month
|
||||
plt.scatter(price, month)
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
Hasznos ez a diagram? Meglepett valami vele kapcsolatban?
|
||||
|
||||
Ez nem különösebben hasznos, mivel csak az adataidat mutatja pontok szórásaként egy adott hónapban.
|
||||
|
||||
### Tedd hasznossá
|
||||
|
||||
Ahhoz, hogy a diagramok hasznos adatokat mutassanak, általában valahogyan csoportosítani kell az adatokat. Próbáljunk meg létrehozni egy diagramot, ahol az y tengely a hónapokat mutatja, és az adatok az eloszlást szemléltetik.
|
||||
|
||||
1. Adj hozzá egy cellát, hogy csoportosított oszlopdiagramot készíts:
|
||||
|
||||
```python
|
||||
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
|
||||
plt.ylabel("Pumpkin Price")
|
||||
```
|
||||
|
||||

|
||||
|
||||
Ez egy hasznosabb adatvizualizáció! Úgy tűnik, hogy a tökök legmagasabb ára szeptemberben és októberben van. Ez megfelel az elvárásaidnak? Miért vagy miért nem?
|
||||
|
||||
---
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
Fedezd fel a Matplotlib által kínált különböző vizualizációs típusokat. Mely típusok a legmegfelelőbbek regressziós problémákhoz?
|
||||
|
||||
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Nézd meg az adatvizualizáció különböző módjait. Készíts listát a rendelkezésre álló könyvtárakról, és jegyezd fel, hogy melyek a legjobbak adott típusú feladatokhoz, például 2D vizualizációkhoz vagy 3D vizualizációkhoz. Mit fedezel fel?
|
||||
|
||||
## Feladat
|
||||
|
||||
[Adatvizualizáció felfedezése](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,23 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "4485a1ed4dd1b5647365e3d87456515d",
|
||||
"translation_date": "2025-09-05T15:27:01+00:00",
|
||||
"source_file": "2-Regression/2-Data/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Vizualizációk felfedezése
|
||||
|
||||
Számos különböző könyvtár érhető el az adatok vizualizálásához. Készíts néhány vizualizációt a leckében található Pumpkin adatok felhasználásával egy mintafüzetben matplotlib és seaborn segítségével. Melyik könyvtár használata egyszerűbb?
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiváló | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ------- | --------- | ------------------- |
|
||||
| | Egy füzetet adtak be, amely két felfedezést/vizualizációt tartalmaz | Egy füzetet adtak be, amely egy felfedezést/vizualizációt tartalmaz | Nem adtak be füzetet |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T15:27:22+00:00",
|
||||
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "cc471fa89c293bc735dd3a9a0fb79b1b",
|
||||
"translation_date": "2025-09-05T15:13:45+00:00",
|
||||
"source_file": "2-Regression/3-Linear/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Hozz létre egy regressziós modellt
|
||||
|
||||
## Útmutató
|
||||
|
||||
Ebben a leckében bemutattuk, hogyan lehet modellt építeni Lineáris és Polinomiális regresszió segítségével. Ezen ismeretek alapján keress egy adatállományt, vagy használd a Scikit-learn beépített készleteinek egyikét, hogy létrehozz egy új modellt. Magyarázd el a jegyzetfüzetedben, miért választottad az adott technikát, és mutasd be a modelled pontosságát. Ha nem pontos, magyarázd el, miért.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiváló | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ----------------------------------------------------------- | -------------------------- | ------------------------------- |
|
||||
| | teljes jegyzetfüzetet mutat be jól dokumentált megoldással | a megoldás hiányos | a megoldás hibás vagy problémás |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T15:14:12+00:00",
|
||||
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget az ebből a fordításból eredő félreértésekért vagy téves értelmezésekért.
|
@ -0,0 +1,405 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "abf86d845c84330bce205a46b382ec88",
|
||||
"translation_date": "2025-09-05T15:15:21+00:00",
|
||||
"source_file": "2-Regression/4-Logistic/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Logisztikus regresszió kategóriák előrejelzésére
|
||||
|
||||

|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
> ### [Ez a lecke elérhető R-ben is!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html)
|
||||
|
||||
## Bevezetés
|
||||
|
||||
Ebben az utolsó leckében a regresszióról, amely az egyik alapvető _klasszikus_ gépi tanulási technika, megvizsgáljuk a logisztikus regressziót. Ezt a technikát arra használhatjuk, hogy mintázatokat fedezzünk fel bináris kategóriák előrejelzésére. Ez a cukorka csokoládé vagy sem? Ez a betegség fertőző vagy sem? Ez az ügyfél választja-e ezt a terméket vagy sem?
|
||||
|
||||
Ebben a leckében megtanulod:
|
||||
|
||||
- Egy új könyvtár használatát az adatok vizualizálásához
|
||||
- Logisztikus regresszió technikáit
|
||||
|
||||
✅ Mélyítsd el a logisztikus regresszióval kapcsolatos tudásodat ebben a [Learn modulban](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott)
|
||||
|
||||
## Előfeltétel
|
||||
|
||||
A tökadatokkal való munka során már elég jól megismerkedtünk ahhoz, hogy felismerjük, van egy bináris kategória, amellyel dolgozhatunk: `Color`.
|
||||
|
||||
Építsünk egy logisztikus regressziós modellt, hogy előre jelezzük, adott változók alapján _milyen színű lesz egy adott tök_ (narancs 🎃 vagy fehér 👻).
|
||||
|
||||
> Miért beszélünk bináris osztályozásról egy regresszióval kapcsolatos leckében? Csak nyelvi kényelmi okokból, mivel a logisztikus regresszió [valójában egy osztályozási módszer](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), bár lineáris alapú. Az adatok osztályozásának más módjairól a következő leckecsoportban tanulhatsz.
|
||||
|
||||
## Fogalmazzuk meg a kérdést
|
||||
|
||||
A mi céljaink érdekében ezt binárisként fogalmazzuk meg: 'Fehér' vagy 'Nem fehér'. Az adatainkban van egy 'csíkos' kategória is, de kevés előfordulása van, így nem fogjuk használni. Ez amúgy is eltűnik, amikor eltávolítjuk az adatállományból a null értékeket.
|
||||
|
||||
> 🎃 Érdekesség: néha a fehér tököket 'szellem' tököknek hívjuk. Nem túl könnyű őket faragni, ezért nem olyan népszerűek, mint a narancssárgák, de nagyon jól néznek ki! Így a kérdésünket úgy is megfogalmazhatnánk: 'Szellem' vagy 'Nem szellem'. 👻
|
||||
|
||||
## A logisztikus regresszióról
|
||||
|
||||
A logisztikus regresszió néhány fontos szempontból különbözik a korábban tanult lineáris regressziótól.
|
||||
|
||||
[](https://youtu.be/KpeCT6nEpBY "ML kezdőknek - A logisztikus regresszió megértése gépi tanulási osztályozáshoz")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videós áttekintésért a logisztikus regresszióról.
|
||||
|
||||
### Bináris osztályozás
|
||||
|
||||
A logisztikus regresszió nem kínálja ugyanazokat a funkciókat, mint a lineáris regresszió. Az előbbi bináris kategóriáról ("fehér vagy nem fehér") ad előrejelzést, míg az utóbbi folyamatos értékeket képes előre jelezni, például a tök származási helye és betakarítási ideje alapján, _mennyivel fog emelkedni az ára_.
|
||||
|
||||

|
||||
> Infografika: [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
||||
|
||||
### Egyéb osztályozások
|
||||
|
||||
A logisztikus regressziónak vannak más típusai is, például multinomiális és ordinális:
|
||||
|
||||
- **Multinomiális**, amely több kategóriát foglal magában - "Narancs, Fehér és Csíkos".
|
||||
- **Ordinális**, amely rendezett kategóriákat foglal magában, hasznos, ha logikusan szeretnénk rendezni az eredményeket, például a tököket, amelyek egy véges számú méret szerint vannak rendezve (mini, kicsi, közepes, nagy, XL, XXL).
|
||||
|
||||

|
||||
|
||||
### A változóknak NEM kell korrelálniuk
|
||||
|
||||
Emlékszel, hogy a lineáris regresszió jobban működött, ha a változók korreláltak? A logisztikus regresszió ennek az ellenkezője - a változóknak nem kell egymáshoz igazodniuk. Ez jól működik az olyan adatokkal, amelyeknek viszonylag gyenge korrelációi vannak.
|
||||
|
||||
### Sok tiszta adatra van szükség
|
||||
|
||||
A logisztikus regresszió pontosabb eredményeket ad, ha több adatot használunk; a mi kis adatállományunk nem optimális erre a feladatra, ezért ezt tartsd szem előtt.
|
||||
|
||||
[](https://youtu.be/B2X4H9vcXTs "ML kezdőknek - Adatok elemzése és előkészítése logisztikus regresszióhoz")
|
||||
|
||||
✅ Gondold át, milyen típusú adatok alkalmasak jól a logisztikus regresszióhoz
|
||||
|
||||
## Gyakorlat - adatok tisztítása
|
||||
|
||||
Először tisztítsd meg az adatokat egy kicsit, távolítsd el a null értékeket, és válassz ki csak néhány oszlopot:
|
||||
|
||||
1. Add hozzá a következő kódot:
|
||||
|
||||
```python
|
||||
|
||||
columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color']
|
||||
pumpkins = full_pumpkins.loc[:, columns_to_select]
|
||||
|
||||
pumpkins.dropna(inplace=True)
|
||||
```
|
||||
|
||||
Mindig megtekintheted az új adatkeretedet:
|
||||
|
||||
```python
|
||||
pumpkins.info
|
||||
```
|
||||
|
||||
### Vizualizáció - kategóriális diagram
|
||||
|
||||
Mostanra betöltötted a [kezdő notebookot](../../../../2-Regression/4-Logistic/notebook.ipynb) a tökadatokkal, és megtisztítottad úgy, hogy megmaradjon egy adatállomány néhány változóval, beleértve a `Color`-t. Vizualizáljuk az adatkeretet a notebookban egy másik könyvtár segítségével: [Seaborn](https://seaborn.pydata.org/index.html), amely a korábban használt Matplotlibre épül.
|
||||
|
||||
A Seaborn néhány remek módot kínál az adatok vizualizálására. Például összehasonlíthatod az adatok eloszlását a `Variety` és `Color` kategóriák szerint egy kategóriális diagramon.
|
||||
|
||||
1. Hozz létre egy ilyen diagramot a `catplot` függvény használatával, a tökadatainkat (`pumpkins`) használva, és színkódolást megadva az egyes tökkategóriákhoz (narancs vagy fehér):
|
||||
|
||||
```python
|
||||
import seaborn as sns
|
||||
|
||||
palette = {
|
||||
'ORANGE': 'orange',
|
||||
'WHITE': 'wheat',
|
||||
}
|
||||
|
||||
sns.catplot(
|
||||
data=pumpkins, y="Variety", hue="Color", kind="count",
|
||||
palette=palette,
|
||||
)
|
||||
```
|
||||
|
||||

|
||||
|
||||
Az adatok megfigyelésével láthatod, hogyan kapcsolódik a `Color` adat a `Variety`-hez.
|
||||
|
||||
✅ Ezen kategóriális diagram alapján milyen érdekes vizsgálatokat tudsz elképzelni?
|
||||
|
||||
### Adatok előfeldolgozása: jellemzők és címkék kódolása
|
||||
|
||||
A tökadataink minden oszlopában szöveges értékek találhatók. A kategóriális adatokkal való munka intuitív az emberek számára, de nem a gépek számára. A gépi tanulási algoritmusok jól működnek számokkal. Ezért a kódolás nagyon fontos lépés az adatok előfeldolgozási fázisában, mivel lehetővé teszi, hogy a kategóriális adatokat numerikus adatokká alakítsuk, anélkül, hogy bármilyen információt elveszítenénk. A jó kódolás jó modell építéséhez vezet.
|
||||
|
||||
A jellemzők kódolásához két fő típusú kódoló létezik:
|
||||
|
||||
1. Ordinális kódoló: jól illeszkedik az ordinális változókhoz, amelyek kategóriális változók, ahol az adatok logikai sorrendet követnek, mint például az `Item Size` oszlop az adatállományunkban. Olyan leképezést hoz létre, amelyben minden kategóriát egy szám képvisel, amely az oszlopban lévő kategória sorrendje.
|
||||
|
||||
```python
|
||||
from sklearn.preprocessing import OrdinalEncoder
|
||||
|
||||
item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']]
|
||||
ordinal_features = ['Item Size']
|
||||
ordinal_encoder = OrdinalEncoder(categories=item_size_categories)
|
||||
```
|
||||
|
||||
2. Kategóriális kódoló: jól illeszkedik a nominális változókhoz, amelyek kategóriális változók, ahol az adatok nem követnek logikai sorrendet, mint például az adatállományunkban az `Item Size`-től eltérő összes jellemző. Ez egy one-hot kódolás, ami azt jelenti, hogy minden kategóriát egy bináris oszlop képvisel: a kódolt változó értéke 1, ha a tök az adott `Variety`-hez tartozik, és 0, ha nem.
|
||||
|
||||
```python
|
||||
from sklearn.preprocessing import OneHotEncoder
|
||||
|
||||
categorical_features = ['City Name', 'Package', 'Variety', 'Origin']
|
||||
categorical_encoder = OneHotEncoder(sparse_output=False)
|
||||
```
|
||||
|
||||
Ezután a `ColumnTransformer`-t használjuk, hogy több kódolót egyetlen lépésben kombináljunk, és alkalmazzuk őket a megfelelő oszlopokra.
|
||||
|
||||
```python
|
||||
from sklearn.compose import ColumnTransformer
|
||||
|
||||
ct = ColumnTransformer(transformers=[
|
||||
('ord', ordinal_encoder, ordinal_features),
|
||||
('cat', categorical_encoder, categorical_features)
|
||||
])
|
||||
|
||||
ct.set_output(transform='pandas')
|
||||
encoded_features = ct.fit_transform(pumpkins)
|
||||
```
|
||||
|
||||
Másrészt a címke kódolásához a scikit-learn `LabelEncoder` osztályát használjuk, amely egy segédosztály, amely segít normalizálni a címkéket úgy, hogy csak 0 és n_classes-1 közötti értékeket tartalmazzanak (itt 0 és 1).
|
||||
|
||||
```python
|
||||
from sklearn.preprocessing import LabelEncoder
|
||||
|
||||
label_encoder = LabelEncoder()
|
||||
encoded_label = label_encoder.fit_transform(pumpkins['Color'])
|
||||
```
|
||||
|
||||
Miután kódoltuk a jellemzőket és a címkét, egy új adatkeretbe (`encoded_pumpkins`) egyesíthetjük őket.
|
||||
|
||||
```python
|
||||
encoded_pumpkins = encoded_features.assign(Color=encoded_label)
|
||||
```
|
||||
|
||||
✅ Milyen előnyei vannak az ordinális kódoló használatának az `Item Size` oszlop esetében?
|
||||
|
||||
### Változók közötti kapcsolatok elemzése
|
||||
|
||||
Most, hogy előfeldolgoztuk az adatokat, elemezhetjük a jellemzők és a címke közötti kapcsolatokat, hogy megértsük, mennyire lesz képes a modell előre jelezni a címkét a jellemzők alapján. Az ilyen típusú elemzés legjobb módja az adatok ábrázolása. Ismét a Seaborn `catplot` függvényét fogjuk használni, hogy vizualizáljuk az `Item Size`, `Variety` és `Color` közötti kapcsolatokat egy kategóriális diagramon. Az adatok jobb ábrázolása érdekében az `Item Size` kódolt oszlopát és a nem kódolt `Variety` oszlopot fogjuk használni.
|
||||
|
||||
```python
|
||||
palette = {
|
||||
'ORANGE': 'orange',
|
||||
'WHITE': 'wheat',
|
||||
}
|
||||
pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size']
|
||||
|
||||
g = sns.catplot(
|
||||
data=pumpkins,
|
||||
x="Item Size", y="Color", row='Variety',
|
||||
kind="box", orient="h",
|
||||
sharex=False, margin_titles=True,
|
||||
height=1.8, aspect=4, palette=palette,
|
||||
)
|
||||
g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6))
|
||||
g.set_titles(row_template="{row_name}")
|
||||
```
|
||||
|
||||

|
||||
|
||||
### Swarm diagram használata
|
||||
|
||||
Mivel a `Color` egy bináris kategória (Fehér vagy Nem), 'egy [speciális megközelítést](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) igényel a vizualizációhoz'. Vannak más módok is, hogy vizualizáljuk ennek a kategóriának a kapcsolatát más változókkal.
|
||||
|
||||
A változókat egymás mellett ábrázolhatod Seaborn diagramokkal.
|
||||
|
||||
1. Próbálj ki egy 'swarm' diagramot az értékek eloszlásának megjelenítésére:
|
||||
|
||||
```python
|
||||
palette = {
|
||||
0: 'orange',
|
||||
1: 'wheat'
|
||||
}
|
||||
sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette)
|
||||
```
|
||||
|
||||

|
||||
|
||||
**Figyelem**: a fenti kód figyelmeztetést generálhat, mivel a Seaborn nem tudja megfelelően ábrázolni ilyen mennyiségű adatpontot egy swarm diagramon. Egy lehetséges megoldás a marker méretének csökkentése a 'size' paraméter használatával. Azonban légy tudatában annak, hogy ez befolyásolja a diagram olvashatóságát.
|
||||
|
||||
> **🧮 Mutasd a matematikát**
|
||||
>
|
||||
> A logisztikus regresszió a 'maximum likelihood' koncepcióján alapul, [szigmoid függvények](https://wikipedia.org/wiki/Sigmoid_function) használatával. Egy 'szigmoid függvény' egy grafikonon 'S' alakú görbének tűnik. Egy értéket vesz, és 0 és 1 közé térképezi. A görbéjét 'logisztikus görbének' is nevezik. A képlete így néz ki:
|
||||
>
|
||||
> 
|
||||
>
|
||||
> ahol a szigmoid középpontja az x 0 pontján található, L a görbe maximális értéke, és k a görbe meredeksége. Ha a függvény eredménye nagyobb, mint 0.5, az adott címkét a bináris választás '1' osztályába sorolják. Ha nem, akkor '0'-ként osztályozzák.
|
||||
|
||||
## Építsd fel a modelledet
|
||||
|
||||
Egy modell építése ezeknek a bináris osztályozásoknak a megtalálására meglepően egyszerű a Scikit-learn segítségével.
|
||||
|
||||
[](https://youtu.be/MmZS2otPrQ8 "ML kezdőknek - Logisztikus regresszió az adatok osztályozásához")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videós áttekintésért a lineáris regressziós modell építéséről
|
||||
|
||||
1. Válaszd ki azokat a változókat, amelyeket az osztályozási modellben használni szeretnél, és oszd fel a tanulási és tesztkészleteket a `train_test_split()` hívásával:
|
||||
|
||||
```python
|
||||
from sklearn.model_selection import train_test_split
|
||||
|
||||
X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])]
|
||||
y = encoded_pumpkins['Color']
|
||||
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
|
||||
|
||||
```
|
||||
|
||||
2. Most már betaníthatod a modelledet a `fit()` hívásával a tanulási adatokkal, és kiírhatod az eredményét:
|
||||
|
||||
```python
|
||||
from sklearn.metrics import f1_score, classification_report
|
||||
from sklearn.linear_model import LogisticRegression
|
||||
|
||||
model = LogisticRegression()
|
||||
model.fit(X_train, y_train)
|
||||
predictions = model.predict(X_test)
|
||||
|
||||
print(classification_report(y_test, predictions))
|
||||
print('Predicted labels: ', predictions)
|
||||
print('F1-score: ', f1_score(y_test, predictions))
|
||||
```
|
||||
|
||||
Nézd meg a modelled eredménytábláját. Nem rossz, tekintve, hogy csak körülbelül 1000 sor adatod van:
|
||||
|
||||
```output
|
||||
precision recall f1-score support
|
||||
|
||||
0 0.94 0.98 0.96 166
|
||||
1 0.85 0.67 0.75 33
|
||||
|
||||
accuracy 0.92 199
|
||||
macro avg 0.89 0.82 0.85 199
|
||||
weighted avg 0.92 0.92 0.92 199
|
||||
|
||||
Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0
|
||||
0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0
|
||||
0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
|
||||
0 0 0 1 0 0 0 0 0 0 0 0 1 1]
|
||||
F1-score: 0.7457627118644068
|
||||
```
|
||||
|
||||
## Jobb megértés egy zavaró mátrix segítségével
|
||||
|
||||
Bár az eredménytáblát [kifejezésekkel](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) is kiírhatod az előző elemek nyomtatásával, könnyebben megértheted a modelledet egy [zavaró mátrix](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) használatával, amely segít megérteni, hogyan teljesít a modell.
|
||||
|
||||
> 🎓 A '[zavaró mátrix](https://wikipedia.org/wiki/Confusion_matrix)' (vagy 'hibamátrix') egy táblázat, amely kifejezi a modelled valódi vs. hamis pozitív és negatív értékeit, így mérve az előrejelzések pontosságát.
|
||||
|
||||
1. A zavaró mátrix használatához hívd meg a `confusion_matrix()` függvényt:
|
||||
|
||||
```python
|
||||
from sklearn.metrics import confusion_matrix
|
||||
confusion_matrix(y_test, predictions)
|
||||
```
|
||||
|
||||
Nézd meg a modelled zavaró mátrixát:
|
||||
|
||||
```output
|
||||
array([[162, 4],
|
||||
[ 11, 22]])
|
||||
```
|
||||
|
||||
A Scikit-learnben a zavaró mátrix sorai (0. tengely) a valós címkék, míg az oszlopai (1. tengely) az előrejelzett címkék.
|
||||
|
||||
| | 0 | 1 |
|
||||
| :---: | :---: | :---: |
|
||||
| 0 | TN | FP |
|
||||
| 1 | FN | TP |
|
||||
|
||||
Mi történik itt? Tegyük fel, hogy a modelledet arra kérik, hogy osztályozza a tököket két bináris kategória között: 'fehér' és 'nem fehér'.
|
||||
|
||||
- Ha a modelled nem fehérként jósolja meg a tököt, és az valójában a 'nem fehér' kategóriába tartozik, akkor ezt valódi negatívnak nevezzük, amelyet a bal felső szám mut
|
||||
Hogyan kapcsolódik az összezavarodási mátrix a precizitáshoz és a visszahíváshoz? Ne feledd, a fentebb kinyomtatott osztályozási jelentés megmutatta a precizitást (0.85) és a visszahívást (0.67).
|
||||
|
||||
Precizitás = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461
|
||||
|
||||
Visszahívás = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666
|
||||
|
||||
✅ K: Az összezavarodási mátrix alapján hogyan teljesített a modell? V: Nem rossz; van egy jó számú valódi negatív, de néhány hamis negatív is.
|
||||
|
||||
Nézzük meg újra azokat a fogalmakat, amelyeket korábban láttunk, az összezavarodási mátrix TP/TN és FP/FN leképezésének segítségével:
|
||||
|
||||
🎓 Precizitás: TP/(TP + FP) Azoknak a releváns példányoknak az aránya, amelyek a visszakeresett példányok között vannak (pl. mely címkék lettek jól címkézve).
|
||||
|
||||
🎓 Visszahívás: TP/(TP + FN) Azoknak a releváns példányoknak az aránya, amelyek visszakeresésre kerültek, akár jól címkézve, akár nem.
|
||||
|
||||
🎓 f1-pontszám: (2 * precizitás * visszahívás)/(precizitás + visszahívás) A precizitás és visszahívás súlyozott átlaga, ahol a legjobb érték 1, a legrosszabb pedig 0.
|
||||
|
||||
🎓 Támogatás: Az egyes visszakeresett címkék előfordulásainak száma.
|
||||
|
||||
🎓 Pontosság: (TP + TN)/(TP + TN + FP + FN) Azoknak a címkéknek a százaléka, amelyeket egy mintában pontosan előre jeleztek.
|
||||
|
||||
🎓 Makro Átlag: Az egyes címkék súlyozatlan átlagos metrikáinak kiszámítása, figyelmen kívül hagyva a címkék egyensúlyhiányát.
|
||||
|
||||
🎓 Súlyozott Átlag: Az egyes címkék átlagos metrikáinak kiszámítása, figyelembe véve a címkék egyensúlyhiányát, azokat a támogatásukkal (az egyes címkék valódi példányainak száma) súlyozva.
|
||||
|
||||
✅ Gondolod, hogy melyik metrikát kell figyelned, ha csökkenteni szeretnéd a hamis negatívok számát?
|
||||
|
||||
## Vizualizáljuk a modell ROC görbéjét
|
||||
|
||||
[](https://youtu.be/GApO575jTA0 "ML kezdőknek - A logisztikus regresszió teljesítményének elemzése ROC görbékkel")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videós áttekintésért a ROC görbékről
|
||||
|
||||
Készítsünk még egy vizualizációt, hogy lássuk az úgynevezett 'ROC' görbét:
|
||||
|
||||
```python
|
||||
from sklearn.metrics import roc_curve, roc_auc_score
|
||||
import matplotlib
|
||||
import matplotlib.pyplot as plt
|
||||
%matplotlib inline
|
||||
|
||||
y_scores = model.predict_proba(X_test)
|
||||
fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1])
|
||||
|
||||
fig = plt.figure(figsize=(6, 6))
|
||||
plt.plot([0, 1], [0, 1], 'k--')
|
||||
plt.plot(fpr, tpr)
|
||||
plt.xlabel('False Positive Rate')
|
||||
plt.ylabel('True Positive Rate')
|
||||
plt.title('ROC Curve')
|
||||
plt.show()
|
||||
```
|
||||
|
||||
Használjuk a Matplotlibet a modell [Receiver Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) vagy ROC görbéjének ábrázolására. A ROC görbéket gyakran használják arra, hogy megtekintsék egy osztályozó kimenetét a valódi és hamis pozitívok szempontjából. "A ROC görbék jellemzően a valódi pozitív arányt ábrázolják az Y tengelyen, és a hamis pozitív arányt az X tengelyen." Ezért a görbe meredeksége és a középvonal és a görbe közötti tér számít: olyan görbét szeretnél, amely gyorsan felfelé és a vonal fölé halad. Ebben az esetben vannak kezdeti hamis pozitívok, majd a vonal megfelelően felfelé és fölé halad:
|
||||
|
||||

|
||||
|
||||
Végül használjuk a Scikit-learn [`roc_auc_score` API-ját](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) az úgynevezett 'Görbe Alatti Terület' (AUC) tényleges kiszámításához:
|
||||
|
||||
```python
|
||||
auc = roc_auc_score(y_test,y_scores[:,1])
|
||||
print(auc)
|
||||
```
|
||||
Az eredmény `0.9749908725812341`. Mivel az AUC 0 és 1 között mozog, magas pontszámot szeretnél, mivel egy modell, amely 100%-ban helyes előrejelzéseket ad, AUC értéke 1 lesz; ebben az esetben a modell _elég jó_.
|
||||
|
||||
A jövőbeli osztályozási leckékben megtanulod, hogyan iterálj a modell pontszámainak javítása érdekében. De most gratulálok! Befejezted ezeket a regressziós leckéket!
|
||||
|
||||
---
|
||||
## 🚀Kihívás
|
||||
|
||||
Még sok mindent lehet kibontani a logisztikus regresszióval kapcsolatban! De a legjobb módja a tanulásnak az, ha kísérletezel. Keress egy adatállományt, amely alkalmas erre az elemzésre, és építs egy modellt vele. Mit tanulsz? Tipp: próbáld ki a [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) oldalt érdekes adatállományokért.
|
||||
|
||||
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Olvasd el [ennek a Stanford-i tanulmánynak](https://web.stanford.edu/~jurafsky/slp3/5.pdf) az első néhány oldalát a logisztikus regresszió gyakorlati alkalmazásairól. Gondolj olyan feladatokra, amelyek jobban illenek az egyik vagy másik típusú regressziós feladathoz, amelyeket eddig tanulmányoztunk. Mi működne a legjobban?
|
||||
|
||||
## Feladat
|
||||
|
||||
[Próbáld újra ezt a regressziót](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "8af40209a41494068c1f42b14c0b450d",
|
||||
"translation_date": "2025-09-05T15:19:40+00:00",
|
||||
"source_file": "2-Regression/4-Logistic/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Néhány regresszió újrapróbálása
|
||||
|
||||
## Útmutató
|
||||
|
||||
A leckében a tök adatainak egy részhalmazát használtad. Most térj vissza az eredeti adatokhoz, és próbáld meg az összeset, megtisztítva és standardizálva, felhasználni egy Logisztikus Regresszió modell felépítéséhez.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiváló | Megfelelő | Fejlesztésre szoruló |
|
||||
| --------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------------- |
|
||||
| | Egy jegyzetfüzet van bemutatva jól magyarázott és jól teljesítő modellel | Egy jegyzetfüzet van bemutatva minimálisan teljesítő modellel | Egy jegyzetfüzet van bemutatva gyengén teljesítő modellel vagy nincs |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T15:20:02+00:00",
|
||||
"source_file": "2-Regression/4-Logistic/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális, emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,54 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "508582278dbb8edd2a8a80ac96ef416c",
|
||||
"translation_date": "2025-09-05T15:07:54+00:00",
|
||||
"source_file": "2-Regression/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Regressziós modellek gépi tanuláshoz
|
||||
## Regionális téma: Regressziós modellek tökárakhoz Észak-Amerikában 🎃
|
||||
|
||||
Észak-Amerikában a tököket gyakran ijesztő arcokká faragják Halloween alkalmából. Fedezzük fel ezeket a lenyűgöző zöldségeket!
|
||||
|
||||

|
||||
> Fotó: <a href="https://unsplash.com/@teutschmann?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Beth Teutschmann</a> az <a href="https://unsplash.com/s/photos/jack-o-lanterns?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a> oldalán
|
||||
|
||||
## Amit megtanulsz
|
||||
|
||||
[](https://youtu.be/5QnJtDad4iQ "Bevezető videó a regresszióhoz - Kattints a megtekintéshez!")
|
||||
> 🎥 Kattints a fenti képre egy rövid bevezető videóért ehhez a leckéhez
|
||||
|
||||
Az ebben a részben található leckék a regresszió típusait tárgyalják a gépi tanulás kontextusában. A regressziós modellek segíthetnek meghatározni a _kapcsolatot_ a változók között. Ez a modell képes előre jelezni olyan értékeket, mint például hosszúság, hőmérséklet vagy életkor, így feltárva a változók közötti összefüggéseket az adatok elemzése során.
|
||||
|
||||
Ebben a leckesorozatban megismerheted a lineáris és logisztikus regresszió közötti különbségeket, valamint azt, hogy mikor érdemes az egyiket a másik helyett használni.
|
||||
|
||||
[](https://youtu.be/XA3OaoW86R8 "ML kezdőknek - Bevezetés a regressziós modellekbe gépi tanuláshoz")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy rövid videóért, amely bemutatja a regressziós modelleket.
|
||||
|
||||
Ebben a leckesorozatban felkészülsz a gépi tanulási feladatok megkezdésére, beleértve a Visual Studio Code konfigurálását notebookok kezelésére, amely a data scientist-ek által használt közös környezet. Megismered a Scikit-learn könyvtárat, amely a gépi tanuláshoz készült, és elkészíted az első modelljeidet, különös tekintettel a regressziós modellekre ebben a fejezetben.
|
||||
|
||||
> Hasznos, kevés kódolást igénylő eszközök állnak rendelkezésre, amelyek segítenek a regressziós modellekkel való munka elsajátításában. Próbáld ki [Azure ML-t ehhez a feladathoz](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)
|
||||
|
||||
### Leckék
|
||||
|
||||
1. [Eszközök használata](1-Tools/README.md)
|
||||
2. [Adatok kezelése](2-Data/README.md)
|
||||
3. [Lineáris és polinomiális regresszió](3-Linear/README.md)
|
||||
4. [Logisztikus regresszió](4-Logistic/README.md)
|
||||
|
||||
---
|
||||
### Köszönetnyilvánítás
|
||||
|
||||
"ML regresszióval" szívvel ♥️ írta [Jen Looper](https://twitter.com/jenlooper)
|
||||
|
||||
♥️ A kvíz közreműködői: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) és [Ornella Altunyan](https://twitter.com/ornelladotcom)
|
||||
|
||||
A tök adatállományt [ez a Kaggle projekt](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) javasolta, és az adatok a [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) oldalról származnak, amelyet az Egyesült Államok Mezőgazdasági Minisztériuma terjeszt. Néhány pontot hozzáadtunk a szín alapján, hogy normalizáljuk az eloszlást. Ezek az adatok közkincsnek számítanak.
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,359 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "e0b75f73e4a90d45181dc5581fe2ef5c",
|
||||
"translation_date": "2025-09-05T16:12:58+00:00",
|
||||
"source_file": "3-Web-App/1-Web-App/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Építsünk egy webalkalmazást gépi tanulási modell használatához
|
||||
|
||||
Ebben a leckében egy gépi tanulási modellt fogsz betanítani egy igazán különleges adathalmazon: _UFO-észlelések az elmúlt évszázadból_, amelyet a NUFORC adatbázisából származtatunk.
|
||||
|
||||
A következőket fogod megtanulni:
|
||||
|
||||
- Hogyan lehet egy betanított modellt "pickle"-elni
|
||||
- Hogyan lehet ezt a modellt egy Flask alkalmazásban használni
|
||||
|
||||
Továbbra is notebookokat fogunk használni az adatok tisztítására és a modell betanítására, de egy lépéssel tovább mehetsz, ha felfedezed, hogyan lehet egy modellt "a vadonban" használni, azaz egy webalkalmazásban.
|
||||
|
||||
Ehhez egy Flask alapú webalkalmazást kell építened.
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Alkalmazás építése
|
||||
|
||||
Számos módja van annak, hogy webalkalmazásokat építsünk gépi tanulási modellek használatához. A webes architektúra befolyásolhatja, hogyan kell a modellt betanítani. Képzeld el, hogy egy olyan vállalatnál dolgozol, ahol az adatkutatási csoport betanított egy modellt, amelyet neked kellene egy alkalmazásban használnod.
|
||||
|
||||
### Szempontok
|
||||
|
||||
Számos kérdést kell feltenned:
|
||||
|
||||
- **Webalkalmazásról vagy mobilalkalmazásról van szó?** Ha mobilalkalmazást építesz, vagy az IoT kontextusában kell használnod a modellt, használhatod a [TensorFlow Lite](https://www.tensorflow.org/lite/) megoldást, és a modellt Android vagy iOS alkalmazásban használhatod.
|
||||
- **Hol fog a modell elhelyezkedni?** A felhőben vagy helyileg?
|
||||
- **Offline támogatás.** Az alkalmazásnak offline is működnie kell?
|
||||
- **Milyen technológiával lett a modell betanítva?** A választott technológia befolyásolhatja a szükséges eszközöket.
|
||||
- **TensorFlow használata.** Ha például TensorFlow-val tanítasz modellt, az ökoszisztéma lehetőséget biztosít arra, hogy a modellt webalkalmazásban használhatóvá alakítsd a [TensorFlow.js](https://www.tensorflow.org/js/) segítségével.
|
||||
- **PyTorch használata.** Ha például [PyTorch](https://pytorch.org/) könyvtárral építesz modellt, lehetőséged van azt [ONNX](https://onnx.ai/) (Open Neural Network Exchange) formátumba exportálni, amely JavaScript webalkalmazásokban használható az [Onnx Runtime](https://www.onnxruntime.ai/) segítségével. Ezt az opciót egy későbbi leckében fogjuk megvizsgálni egy Scikit-learn-nel betanított modell esetében.
|
||||
- **Lobe.ai vagy Azure Custom Vision használata.** Ha egy ML SaaS (Software as a Service) rendszert, például a [Lobe.ai](https://lobe.ai/) vagy az [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) szolgáltatást használod modell betanítására, az ilyen típusú szoftverek lehetőséget biztosítanak a modell különböző platformokra történő exportálására, beleértve egy egyedi API létrehozását, amelyet a felhőben lehet lekérdezni az online alkalmazásod által.
|
||||
|
||||
Lehetőséged van arra is, hogy egy teljes Flask webalkalmazást építs, amely képes lenne a modellt közvetlenül a böngészőben betanítani. Ez szintén megvalósítható a TensorFlow.js segítségével JavaScript környezetben.
|
||||
|
||||
A mi esetünkben, mivel Python-alapú notebookokkal dolgozunk, nézzük meg, milyen lépéseket kell megtenned ahhoz, hogy egy betanított modellt exportálj egy Python-alapú webalkalmazás által olvasható formátumba.
|
||||
|
||||
## Eszközök
|
||||
|
||||
Ehhez a feladathoz két eszközre lesz szükséged: Flask és Pickle, amelyek mind Pythonon futnak.
|
||||
|
||||
✅ Mi az a [Flask](https://palletsprojects.com/p/flask/)? A készítők "mikrokeretrendszerként" definiálják, a Flask biztosítja a webes keretrendszerek alapvető funkcióit Pythonban, valamint egy sablonmotor segítségével weboldalak építésére. Nézd meg [ezt a tanulási modult](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott), hogy gyakorold a Flask használatát.
|
||||
|
||||
✅ Mi az a [Pickle](https://docs.python.org/3/library/pickle.html)? A Pickle 🥒 egy Python modul, amely egy Python objektumstruktúrát sorosít és visszafejt. Amikor egy modellt "pickle"-elsz, akkor annak struktúráját sorosítod vagy lapítod el, hogy a weben használható legyen. Vigyázz: a pickle önmagában nem biztonságos, ezért légy óvatos, ha egy fájl "un-pickle"-elésére kérnek. Egy pickle fájl kiterjesztése `.pkl`.
|
||||
|
||||
## Gyakorlat - tisztítsd meg az adataidat
|
||||
|
||||
Ebben a leckében 80 000 UFO-észlelés adatait fogod használni, amelyeket a [NUFORC](https://nuforc.org) (National UFO Reporting Center) gyűjtött össze. Ezek az adatok érdekes leírásokat tartalmaznak az UFO-észlelésekről, például:
|
||||
|
||||
- **Hosszú példa leírás.** "Egy férfi egy fénysugárból lép elő, amely egy füves mezőre világít éjszaka, majd a Texas Instruments parkolójába fut."
|
||||
- **Rövid példa leírás.** "A fények üldöztek minket."
|
||||
|
||||
A [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) táblázat oszlopokat tartalmaz az észlelés helyéről (`city`, `state`, `country`), az objektum `alakjáról`, valamint annak `szélességi` és `hosszúsági` koordinátáiról.
|
||||
|
||||
A leckéhez tartozó üres [notebookban](../../../../3-Web-App/1-Web-App/notebook.ipynb):
|
||||
|
||||
1. importáld a `pandas`, `matplotlib` és `numpy` könyvtárakat, ahogy az előző leckékben tetted, és importáld az ufos táblázatot. Megnézheted az adathalmaz egy mintáját:
|
||||
|
||||
```python
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
|
||||
ufos = pd.read_csv('./data/ufos.csv')
|
||||
ufos.head()
|
||||
```
|
||||
|
||||
1. Alakítsd az ufos adatokat egy kisebb adatkeretté friss címekkel. Ellenőrizd az egyedi értékeket a `Country` mezőben.
|
||||
|
||||
```python
|
||||
ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']})
|
||||
|
||||
ufos.Country.unique()
|
||||
```
|
||||
|
||||
1. Most csökkentheted a feldolgozandó adatok mennyiségét azáltal, hogy eldobod a hiányzó értékeket, és csak az 1-60 másodperc közötti észleléseket importálod:
|
||||
|
||||
```python
|
||||
ufos.dropna(inplace=True)
|
||||
|
||||
ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)]
|
||||
|
||||
ufos.info()
|
||||
```
|
||||
|
||||
1. Importáld a Scikit-learn `LabelEncoder` könyvtárát, hogy a szöveges országértékeket számokká alakítsd:
|
||||
|
||||
✅ A LabelEncoder ábécé sorrendben kódolja az adatokat
|
||||
|
||||
```python
|
||||
from sklearn.preprocessing import LabelEncoder
|
||||
|
||||
ufos['Country'] = LabelEncoder().fit_transform(ufos['Country'])
|
||||
|
||||
ufos.head()
|
||||
```
|
||||
|
||||
Az adataidnak így kell kinézniük:
|
||||
|
||||
```output
|
||||
Seconds Country Latitude Longitude
|
||||
2 20.0 3 53.200000 -2.916667
|
||||
3 20.0 4 28.978333 -96.645833
|
||||
14 30.0 4 35.823889 -80.253611
|
||||
23 60.0 4 45.582778 -122.352222
|
||||
24 3.0 3 51.783333 -0.783333
|
||||
```
|
||||
|
||||
## Gyakorlat - építsd fel a modelledet
|
||||
|
||||
Most felkészülhetsz a modell betanítására az adatok tanulási és tesztelési csoportra osztásával.
|
||||
|
||||
1. Válaszd ki azt a három jellemzőt, amelyeken a modellt betanítod, mint X vektor, és az y vektor a `Country` lesz. A cél az, hogy a `Seconds`, `Latitude` és `Longitude` értékekből egy országazonosítót kapj vissza.
|
||||
|
||||
```python
|
||||
from sklearn.model_selection import train_test_split
|
||||
|
||||
Selected_features = ['Seconds','Latitude','Longitude']
|
||||
|
||||
X = ufos[Selected_features]
|
||||
y = ufos['Country']
|
||||
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
|
||||
```
|
||||
|
||||
1. Tanítsd be a modelledet logisztikus regresszióval:
|
||||
|
||||
```python
|
||||
from sklearn.metrics import accuracy_score, classification_report
|
||||
from sklearn.linear_model import LogisticRegression
|
||||
model = LogisticRegression()
|
||||
model.fit(X_train, y_train)
|
||||
predictions = model.predict(X_test)
|
||||
|
||||
print(classification_report(y_test, predictions))
|
||||
print('Predicted labels: ', predictions)
|
||||
print('Accuracy: ', accuracy_score(y_test, predictions))
|
||||
```
|
||||
|
||||
Az eredmény pontossága nem rossz **(kb. 95%)**, ami nem meglepő, mivel a `Country` és a `Latitude/Longitude` összefügg.
|
||||
|
||||
A létrehozott modell nem túl forradalmi, mivel a `Latitude` és `Longitude` alapján könnyen kikövetkeztethető az `Country`, de jó gyakorlat arra, hogy nyers adatokból indulva tisztítsd, exportáld, majd egy webalkalmazásban használd a modellt.
|
||||
|
||||
## Gyakorlat - "pickle"-eld a modelledet
|
||||
|
||||
Most itt az ideje, hogy _pickle_-eld a modelledet! Ezt néhány sor kóddal megteheted. Miután _pickle_-elted, töltsd be a pickle fájlt, és teszteld egy mintaadat tömbbel, amely tartalmazza a másodpercek, szélességi és hosszúsági értékeket.
|
||||
|
||||
```python
|
||||
import pickle
|
||||
model_filename = 'ufo-model.pkl'
|
||||
pickle.dump(model, open(model_filename,'wb'))
|
||||
|
||||
model = pickle.load(open('ufo-model.pkl','rb'))
|
||||
print(model.predict([[50,44,-12]]))
|
||||
```
|
||||
|
||||
A modell az **'3'** értéket adja vissza, amely az Egyesült Királyság országkódja. Hihetetlen! 👽
|
||||
|
||||
## Gyakorlat - építs egy Flask alkalmazást
|
||||
|
||||
Most építhetsz egy Flask alkalmazást, amely meghívja a modelledet, és hasonló eredményeket ad vissza, de vizuálisan vonzóbb módon.
|
||||
|
||||
1. Kezdd azzal, hogy létrehozol egy **web-app** nevű mappát a _notebook.ipynb_ fájl mellé, ahol az _ufo-model.pkl_ fájl található.
|
||||
|
||||
1. Ebben a mappában hozz létre három további mappát: **static**, benne egy **css** mappával, és **templates**. Most a következő fájlokkal és könyvtárakkal kell rendelkezned:
|
||||
|
||||
```output
|
||||
web-app/
|
||||
static/
|
||||
css/
|
||||
templates/
|
||||
notebook.ipynb
|
||||
ufo-model.pkl
|
||||
```
|
||||
|
||||
✅ Nézd meg a megoldás mappát a kész alkalmazás nézetéhez
|
||||
|
||||
1. Az első fájl, amit létre kell hoznod a _web-app_ mappában, a **requirements.txt** fájl. Ez a fájl, hasonlóan a _package.json_-hoz egy JavaScript alkalmazásban, felsorolja az alkalmazás által igényelt függőségeket. A **requirements.txt** fájlba írd be a következő sorokat:
|
||||
|
||||
```text
|
||||
scikit-learn
|
||||
pandas
|
||||
numpy
|
||||
flask
|
||||
```
|
||||
|
||||
1. Most futtasd ezt a fájlt a _web-app_ mappába navigálva:
|
||||
|
||||
```bash
|
||||
cd web-app
|
||||
```
|
||||
|
||||
1. A terminálban írd be a `pip install` parancsot, hogy telepítsd a _requirements.txt_-ben felsorolt könyvtárakat:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
1. Most készen állsz arra, hogy három további fájlt hozz létre az alkalmazás befejezéséhez:
|
||||
|
||||
1. Hozd létre az **app.py** fájlt a gyökérben.
|
||||
2. Hozd létre az **index.html** fájlt a _templates_ könyvtárban.
|
||||
3. Hozd létre a **styles.css** fájlt a _static/css_ könyvtárban.
|
||||
|
||||
1. Töltsd ki a _styles.css_ fájlt néhány stílussal:
|
||||
|
||||
```css
|
||||
body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-family: 'Helvetica';
|
||||
background: black;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
letter-spacing: 1.4px;
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
input {
|
||||
min-width: 150px;
|
||||
}
|
||||
|
||||
.grid {
|
||||
width: 300px;
|
||||
border: 1px solid #2d2d2d;
|
||||
display: grid;
|
||||
justify-content: center;
|
||||
margin: 20px auto;
|
||||
}
|
||||
|
||||
.box {
|
||||
color: #fff;
|
||||
background: #2d2d2d;
|
||||
padding: 12px;
|
||||
display: inline-block;
|
||||
}
|
||||
```
|
||||
|
||||
1. Ezután töltsd ki az _index.html_ fájlt:
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>🛸 UFO Appearance Prediction! 👽</title>
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="grid">
|
||||
|
||||
<div class="box">
|
||||
|
||||
<p>According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?</p>
|
||||
|
||||
<form action="{{ url_for('predict')}}" method="post">
|
||||
<input type="number" name="seconds" placeholder="Seconds" required="required" min="0" max="60" />
|
||||
<input type="text" name="latitude" placeholder="Latitude" required="required" />
|
||||
<input type="text" name="longitude" placeholder="Longitude" required="required" />
|
||||
<button type="submit" class="btn">Predict country where the UFO is seen</button>
|
||||
</form>
|
||||
|
||||
<p>{{ prediction_text }}</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
Nézd meg a sablonozást ebben a fájlban. Figyeld meg a változók körüli 'mustache' szintaxist, amelyeket az alkalmazás biztosít, például az előrejelzési szöveget: `{{}}`. Van egy űrlap is, amely a `/predict` útvonalra küld egy előrejelzést.
|
||||
|
||||
Végül készen állsz arra, hogy megírd azt a Python fájlt, amely a modell fogyasztását és az előrejelzések megjelenítését vezérli:
|
||||
|
||||
1. Az `app.py` fájlba írd be:
|
||||
|
||||
```python
|
||||
import numpy as np
|
||||
from flask import Flask, request, render_template
|
||||
import pickle
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
model = pickle.load(open("./ufo-model.pkl", "rb"))
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def home():
|
||||
return render_template("index.html")
|
||||
|
||||
|
||||
@app.route("/predict", methods=["POST"])
|
||||
def predict():
|
||||
|
||||
int_features = [int(x) for x in request.form.values()]
|
||||
final_features = [np.array(int_features)]
|
||||
prediction = model.predict(final_features)
|
||||
|
||||
output = prediction[0]
|
||||
|
||||
countries = ["Australia", "Canada", "Germany", "UK", "US"]
|
||||
|
||||
return render_template(
|
||||
"index.html", prediction_text="Likely country: {}".format(countries[output])
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(debug=True)
|
||||
```
|
||||
|
||||
> 💡 Tipp: Ha a Flask alkalmazás futtatása közben hozzáadod a [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) opciót, az alkalmazásban végrehajtott változtatások azonnal tükröződnek, anélkül hogy újra kellene indítanod a szervert. Vigyázz! Ne engedélyezd ezt az üzemmódot egy éles alkalmazásban.
|
||||
|
||||
Ha futtatod a `python app.py` vagy `python3 app.py` parancsot, a webkiszolgáló helyileg elindul, és kitölthetsz egy rövid űrlapot, hogy választ kapj az UFO-észlelésekkel kapcsolatos égető kérdésedre!
|
||||
|
||||
Mielőtt ezt megtennéd, nézd meg az `app.py` részeit:
|
||||
|
||||
1. Először a függőségek betöltődnek, és az alkalmazás elindul.
|
||||
1. Ezután a modell importálódik.
|
||||
1. Ezután az index.html renderelődik a kezdő útvonalon.
|
||||
|
||||
A `/predict` útvonalon több dolog történik, amikor az űrlapot elküldik:
|
||||
|
||||
1. Az űrlap változói összegyűjtésre kerülnek, és numpy tömbbé konvertálódnak. Ezeket elküldik a modellnek, amely visszaad egy előrejelzést.
|
||||
2. Az országok, amelyeket meg akarunk jeleníteni, olvasható szöveggé alakulnak a megjósolt országkódból, és ez az érték visszaküldésre kerül az index.html-nek, hogy a sablonban megjelenjen.
|
||||
|
||||
Egy modellt ilyen módon használni Flask és pickle segítségével viszonylag egyszerű. A legnehezebb dolog megérteni, hogy milyen formátumú adatokat kell a modellnek küldeni az előrejelzéshez. Ez teljes mértékben attól függ, hogyan lett a modell betanítva. Ennél a modellnél három adatpontot kell megadni az előrejelzéshez.
|
||||
|
||||
Egy professzionális környezetben láthatod, hogy mennyire fontos a jó kommunikáció azok között, akik a modellt betanítják, és azok között, akik azt egy web- vagy mobilalkalmazásban használják. A mi esetünkben ez csak egy személy, te vagy!
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Kihívás
|
||||
|
||||
Ahelyett, hogy notebookban dolgoznál, és onnan importálnád a modellt a Flask alkalmazásba, próbáld meg a modellt közvetlenül a Flask alkalmazásban betanítani! Próbáld meg átalakítani a notebookban lévő Python kódot úgy, hogy az alkalmazásban, például egy `train` nevű útvonalon belül történjen a modell betanítása. Mik az előnyei és hátrányai ennek a módszernek?
|
||||
|
||||
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Számos módja van annak, hogy webalkalmazást építsünk gépi tanulási modellek használatához. Készíts egy listát azokról a módokról, ahogyan JavaScript vagy Python segítségével webalkalmazást építhetsz gépi tanulás alkalmazására. Gondolj az architektúrára: a modell az alkalmazásban maradjon, vagy a felhőben legyen? Ha az utóbbi, hogyan érnéd el? Rajzolj egy architekturális modellt egy alkalmazott ML webes megoldáshoz.
|
||||
|
||||
## Feladat
|
||||
|
||||
[Próbálj ki egy másik modellt](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a8e8ae10be335cbc745b75ee552317ff",
|
||||
"translation_date": "2025-09-05T16:14:50+00:00",
|
||||
"source_file": "3-Web-App/1-Web-App/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Próbálj ki egy másik modellt
|
||||
|
||||
## Útmutató
|
||||
|
||||
Most, hogy elkészítettél egy webalkalmazást egy betanított regressziós modellel, használd az egyik modellt a korábbi regressziós leckéből, hogy újra elkészítsd ezt a webalkalmazást. Megtarthatod a stílust, vagy tervezheted másképp, hogy jobban illeszkedjen a tök adatokhoz. Ügyelj arra, hogy az inputokat módosítsd, hogy megfeleljenek a modelled tanítási módszerének.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| -------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -------------------------------------- |
|
||||
| | A webalkalmazás megfelelően működik és fel van töltve a felhőbe | A webalkalmazás hibákat tartalmaz vagy váratlan eredményeket produkál | A webalkalmazás nem működik megfelelően |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális, emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,35 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "9836ff53cfef716ddfd70e06c5f43436",
|
||||
"translation_date": "2025-09-05T16:12:01+00:00",
|
||||
"source_file": "3-Web-App/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Készíts egy webalkalmazást az ML modelled használatához
|
||||
|
||||
A tananyag ezen részében egy alkalmazott gépi tanulási témával ismerkedhetsz meg: hogyan lehet a Scikit-learn modelledet fájlként elmenteni, amelyet egy webalkalmazásban használhatsz előrejelzések készítésére. Miután a modellt elmentetted, megtanulod, hogyan használd egy Flask-ben épített webalkalmazásban. Először létrehozol egy modellt egy olyan adathalmaz alapján, amely UFO-észlelésekről szól! Ezután építesz egy webalkalmazást, amely lehetővé teszi, hogy megadj egy másodpercértéket, valamint egy szélességi és hosszúsági koordinátát, hogy előre jelezd, melyik ország jelentett UFO-észlelést.
|
||||
|
||||

|
||||
|
||||
Fotó: <a href="https://unsplash.com/@mdherren?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Michael Herren</a> az <a href="https://unsplash.com/s/photos/ufo?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a> oldalán
|
||||
|
||||
## Leckék
|
||||
|
||||
1. [Webalkalmazás készítése](1-Web-App/README.md)
|
||||
|
||||
## Köszönetnyilvánítás
|
||||
|
||||
A "Webalkalmazás készítése" leckét ♥️-vel írta [Jen Looper](https://twitter.com/jenlooper).
|
||||
|
||||
♥️ A kvízeket Rohan Raj írta.
|
||||
|
||||
Az adathalmaz a [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings) oldalról származik.
|
||||
|
||||
A webalkalmazás architektúráját részben [ez a cikk](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) és [ez a repo](https://github.com/abhinavsagar/machine-learning-deployment) javasolta, amelyet Abhinav Sagar készített.
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,313 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "aaf391d922bd6de5efba871d514c6d47",
|
||||
"translation_date": "2025-09-05T16:25:51+00:00",
|
||||
"source_file": "4-Classification/1-Introduction/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Bevezetés az osztályozásba
|
||||
|
||||
Ebben a négy leckében a klasszikus gépi tanulás egyik alapvető területét, az _osztályozást_ fogod megismerni. Különböző osztályozási algoritmusokat fogunk alkalmazni egy adatállományon, amely Ázsia és India csodálatos konyháiról szól. Reméljük, éhes vagy!
|
||||
|
||||

|
||||
|
||||
> Ünnepeld a pán-ázsiai konyhákat ezekben a leckékben! Kép: [Jen Looper](https://twitter.com/jenlooper)
|
||||
|
||||
Az osztályozás a [felügyelt tanulás](https://wikipedia.org/wiki/Supervised_learning) egyik formája, amely sok hasonlóságot mutat a regressziós technikákkal. Ha a gépi tanulás lényege az, hogy adatállományok segítségével értékeket vagy neveket jósoljunk meg, akkor az osztályozás általában két csoportba sorolható: _bináris osztályozás_ és _többosztályos osztályozás_.
|
||||
|
||||
[](https://youtu.be/eg8DJYwdMyg "Bevezetés az osztályozásba")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy videóért: MIT John Guttag bemutatja az osztályozást
|
||||
|
||||
Emlékezz:
|
||||
|
||||
- **Lineáris regresszió** segített megjósolni a változók közötti kapcsolatokat, és pontos előrejelzéseket készíteni arról, hogy egy új adatpont hol helyezkedne el a vonalhoz viszonyítva. Például meg tudtad jósolni, _milyen árú lesz egy tök szeptemberben vagy decemberben_.
|
||||
- **Logisztikus regresszió** segített felfedezni "bináris kategóriákat": ezen az árponton _ez a tök narancssárga vagy nem narancssárga_?
|
||||
|
||||
Az osztályozás különböző algoritmusokat használ annak meghatározására, hogy egy adatpont milyen címkét vagy osztályt kapjon. Dolgozzunk ezzel a konyhai adatállománnyal, hogy megállapítsuk, egy összetevőcsoport alapján melyik konyha eredetéhez tartozik.
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
> ### [Ez a lecke elérhető R-ben is!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html)
|
||||
|
||||
### Bevezetés
|
||||
|
||||
Az osztályozás a gépi tanulás kutatójának és adatkutatójának egyik alapvető tevékenysége. Az egyszerű bináris értékek osztályozásától ("ez az e-mail spam vagy nem?") a komplex képosztályozásig és szegmentálásig számítógépes látás segítségével, mindig hasznos az adatokat osztályokba rendezni és kérdéseket feltenni róluk.
|
||||
|
||||
Tudományosabb megfogalmazásban az osztályozási módszered egy prediktív modellt hoz létre, amely lehetővé teszi, hogy az input változók és az output változók közötti kapcsolatot feltérképezd.
|
||||
|
||||

|
||||
|
||||
> Bináris vs. többosztályos problémák, amelyeket az osztályozási algoritmusok kezelnek. Infografika: [Jen Looper](https://twitter.com/jenlooper)
|
||||
|
||||
Mielőtt elkezdenénk az adatok tisztítását, vizualizálását és előkészítését a gépi tanulási feladatokhoz, ismerjük meg, hogyan lehet a gépi tanulást különböző módokon alkalmazni az adatok osztályozására.
|
||||
|
||||
A [statisztikából](https://wikipedia.org/wiki/Statistical_classification) származó klasszikus gépi tanulási osztályozás olyan jellemzőket használ, mint például `dohányos`, `súly` és `életkor`, hogy meghatározza _X betegség kialakulásának valószínűségét_. A korábban végzett regressziós gyakorlatokhoz hasonló felügyelt tanulási technikaként az adataid címkézettek, és a gépi tanulási algoritmusok ezeket a címkéket használják az adatok osztályainak (vagy 'jellemzőinek') osztályozására és előrejelzésére, majd egy csoporthoz vagy eredményhez rendelésére.
|
||||
|
||||
✅ Képzelj el egy konyhákról szóló adatállományt. Milyen kérdéseket tudna megválaszolni egy többosztályos modell? Milyen kérdéseket tudna megválaszolni egy bináris modell? Mi lenne, ha meg akarnád határozni, hogy egy adott konyha valószínűleg használ-e görögszénát? Mi lenne, ha azt akarnád kideríteni, hogy egy élelmiszerkosárban található csillagánizs, articsóka, karfiol és torma alapján készíthetsz-e egy tipikus indiai ételt?
|
||||
|
||||
[](https://youtu.be/GuTeDbaNoEU "Őrült rejtélyes kosarak")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy videóért. A 'Chopped' című műsor egész koncepciója a 'rejtélyes kosár', ahol a séfeknek egy véletlenszerű összetevőkből kell ételt készíteniük. Biztosan segített volna egy gépi tanulási modell!
|
||||
|
||||
## Helló 'osztályozó'
|
||||
|
||||
Az a kérdés, amit a konyhai adatállománytól szeretnénk megkérdezni, valójában egy **többosztályos kérdés**, mivel több lehetséges nemzeti konyhával dolgozunk. Egy adag összetevő alapján, melyik osztályba illik az adat?
|
||||
|
||||
A Scikit-learn több különböző algoritmust kínál az adatok osztályozására, attól függően, hogy milyen problémát szeretnél megoldani. A következő két leckében megismerhetsz néhányat ezek közül az algoritmusok közül.
|
||||
|
||||
## Gyakorlat - tisztítsd és egyensúlyozd ki az adataidat
|
||||
|
||||
Az első feladat, mielőtt elkezdenénk ezt a projektet, az adatok tisztítása és **kiegyensúlyozása**, hogy jobb eredményeket érjünk el. Kezdd a _notebook.ipynb_ üres fájllal a mappa gyökerében.
|
||||
|
||||
Az első telepítendő csomag az [imblearn](https://imbalanced-learn.org/stable/). Ez egy Scikit-learn csomag, amely lehetővé teszi az adatok jobb kiegyensúlyozását (erről a feladatról hamarosan többet fogsz tanulni).
|
||||
|
||||
1. Az `imblearn` telepítéséhez futtasd a `pip install` parancsot, így:
|
||||
|
||||
```python
|
||||
pip install imblearn
|
||||
```
|
||||
|
||||
1. Importáld a szükséges csomagokat az adatok importálásához és vizualizálásához, valamint importáld a `SMOTE`-ot az `imblearn`-ből.
|
||||
|
||||
```python
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib as mpl
|
||||
import numpy as np
|
||||
from imblearn.over_sampling import SMOTE
|
||||
```
|
||||
|
||||
Most készen állsz az adatok importálására.
|
||||
|
||||
1. A következő feladat az adatok importálása:
|
||||
|
||||
```python
|
||||
df = pd.read_csv('../data/cuisines.csv')
|
||||
```
|
||||
|
||||
A `read_csv()` segítségével beolvashatod a _cusines.csv_ fájl tartalmát, és elhelyezheted a `df` változóban.
|
||||
|
||||
1. Ellenőrizd az adatok alakját:
|
||||
|
||||
```python
|
||||
df.head()
|
||||
```
|
||||
|
||||
Az első öt sor így néz ki:
|
||||
|
||||
```output
|
||||
| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini |
|
||||
| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- |
|
||||
| 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
|
||||
```
|
||||
|
||||
1. Szerezz információt az adatokról az `info()` hívásával:
|
||||
|
||||
```python
|
||||
df.info()
|
||||
```
|
||||
|
||||
Az eredményed hasonló lesz:
|
||||
|
||||
```output
|
||||
<class 'pandas.core.frame.DataFrame'>
|
||||
RangeIndex: 2448 entries, 0 to 2447
|
||||
Columns: 385 entries, Unnamed: 0 to zucchini
|
||||
dtypes: int64(384), object(1)
|
||||
memory usage: 7.2+ MB
|
||||
```
|
||||
|
||||
## Gyakorlat - konyhák megismerése
|
||||
|
||||
Most kezd igazán érdekessé válni a munka. Fedezzük fel az adatok eloszlását konyhánként.
|
||||
|
||||
1. Ábrázold az adatokat oszlopokként a `barh()` hívásával:
|
||||
|
||||
```python
|
||||
df.cuisine.value_counts().plot.barh()
|
||||
```
|
||||
|
||||

|
||||
|
||||
Véges számú konyha van, de az adatok eloszlása egyenetlen. Ezt kijavíthatod! Mielőtt ezt megtennéd, fedezz fel egy kicsit többet.
|
||||
|
||||
1. Derítsd ki, mennyi adat áll rendelkezésre konyhánként, és írasd ki:
|
||||
|
||||
```python
|
||||
thai_df = df[(df.cuisine == "thai")]
|
||||
japanese_df = df[(df.cuisine == "japanese")]
|
||||
chinese_df = df[(df.cuisine == "chinese")]
|
||||
indian_df = df[(df.cuisine == "indian")]
|
||||
korean_df = df[(df.cuisine == "korean")]
|
||||
|
||||
print(f'thai df: {thai_df.shape}')
|
||||
print(f'japanese df: {japanese_df.shape}')
|
||||
print(f'chinese df: {chinese_df.shape}')
|
||||
print(f'indian df: {indian_df.shape}')
|
||||
print(f'korean df: {korean_df.shape}')
|
||||
```
|
||||
|
||||
Az eredmény így néz ki:
|
||||
|
||||
```output
|
||||
thai df: (289, 385)
|
||||
japanese df: (320, 385)
|
||||
chinese df: (442, 385)
|
||||
indian df: (598, 385)
|
||||
korean df: (799, 385)
|
||||
```
|
||||
|
||||
## Összetevők felfedezése
|
||||
|
||||
Most mélyebben belemerülhetsz az adatokba, és megtudhatod, melyek a tipikus összetevők konyhánként. Tisztítsd ki az ismétlődő adatokat, amelyek zavart okoznak a konyhák között, hogy jobban megértsd ezt a problémát.
|
||||
|
||||
1. Hozz létre egy `create_ingredient()` nevű függvényt Pythonban, amely egy összetevő adatkeretet hoz létre. Ez a függvény egy haszontalan oszlop elhagyásával kezd, majd az összetevőket azok számossága szerint rendezi:
|
||||
|
||||
```python
|
||||
def create_ingredient_df(df):
|
||||
ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value')
|
||||
ingredient_df = ingredient_df[(ingredient_df.T != 0).any()]
|
||||
ingredient_df = ingredient_df.sort_values(by='value', ascending=False,
|
||||
inplace=False)
|
||||
return ingredient_df
|
||||
```
|
||||
|
||||
Most már használhatod ezt a függvényt, hogy képet kapj a tíz legnépszerűbb összetevőről konyhánként.
|
||||
|
||||
1. Hívd meg a `create_ingredient()` függvényt, és ábrázold az adatokat a `barh()` hívásával:
|
||||
|
||||
```python
|
||||
thai_ingredient_df = create_ingredient_df(thai_df)
|
||||
thai_ingredient_df.head(10).plot.barh()
|
||||
```
|
||||
|
||||

|
||||
|
||||
1. Ugyanezt tedd meg a japán adatokkal:
|
||||
|
||||
```python
|
||||
japanese_ingredient_df = create_ingredient_df(japanese_df)
|
||||
japanese_ingredient_df.head(10).plot.barh()
|
||||
```
|
||||
|
||||

|
||||
|
||||
1. Most a kínai összetevők:
|
||||
|
||||
```python
|
||||
chinese_ingredient_df = create_ingredient_df(chinese_df)
|
||||
chinese_ingredient_df.head(10).plot.barh()
|
||||
```
|
||||
|
||||

|
||||
|
||||
1. Ábrázold az indiai összetevőket:
|
||||
|
||||
```python
|
||||
indian_ingredient_df = create_ingredient_df(indian_df)
|
||||
indian_ingredient_df.head(10).plot.barh()
|
||||
```
|
||||
|
||||

|
||||
|
||||
1. Végül ábrázold a koreai összetevőket:
|
||||
|
||||
```python
|
||||
korean_ingredient_df = create_ingredient_df(korean_df)
|
||||
korean_ingredient_df.head(10).plot.barh()
|
||||
```
|
||||
|
||||

|
||||
|
||||
1. Most hagyd el a leggyakoribb összetevőket, amelyek zavart okoznak a különböző konyhák között, a `drop()` hívásával:
|
||||
|
||||
Mindenki szereti a rizst, fokhagymát és gyömbért!
|
||||
|
||||
```python
|
||||
feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1)
|
||||
labels_df = df.cuisine #.unique()
|
||||
feature_df.head()
|
||||
```
|
||||
|
||||
## Az adatállomány kiegyensúlyozása
|
||||
|
||||
Most, hogy megtisztítottad az adatokat, használd a [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" - technikát az adatok kiegyensúlyozására.
|
||||
|
||||
1. Hívd meg a `fit_resample()` függvényt, amely interpolációval új mintákat generál.
|
||||
|
||||
```python
|
||||
oversample = SMOTE()
|
||||
transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)
|
||||
```
|
||||
|
||||
Az adatok kiegyensúlyozásával jobb eredményeket érhetsz el az osztályozás során. Gondolj egy bináris osztályozásra. Ha az adataid többsége egy osztályba tartozik, a gépi tanulási modell gyakrabban fogja azt az osztályt előre jelezni, egyszerűen azért, mert több adat áll rendelkezésre róla. Az adatok kiegyensúlyozása segít eltávolítani ezt az egyensúlyhiányt.
|
||||
|
||||
1. Most ellenőrizheted az összetevők címkéinek számát:
|
||||
|
||||
```python
|
||||
print(f'new label count: {transformed_label_df.value_counts()}')
|
||||
print(f'old label count: {df.cuisine.value_counts()}')
|
||||
```
|
||||
|
||||
Az eredményed így néz ki:
|
||||
|
||||
```output
|
||||
new label count: korean 799
|
||||
chinese 799
|
||||
indian 799
|
||||
japanese 799
|
||||
thai 799
|
||||
Name: cuisine, dtype: int64
|
||||
old label count: korean 799
|
||||
indian 598
|
||||
chinese 442
|
||||
japanese 320
|
||||
thai 289
|
||||
Name: cuisine, dtype: int64
|
||||
```
|
||||
|
||||
Az adatok szépek, tiszták, kiegyensúlyozottak és nagyon ínycsiklandóak!
|
||||
|
||||
1. Az utolsó lépés az, hogy a kiegyensúlyozott adatokat, beleértve a címkéket és jellemzőket, egy új adatkeretbe mentsd, amelyet fájlba exportálhatsz:
|
||||
|
||||
```python
|
||||
transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer')
|
||||
```
|
||||
|
||||
1. Még egyszer megnézheted az adatokat a `transformed_df.head()` és `transformed_df.info()` hívásával. Ments egy másolatot ezekről az adatokból, hogy a jövőbeli leckékben használhasd:
|
||||
|
||||
```python
|
||||
transformed_df.head()
|
||||
transformed_df.info()
|
||||
transformed_df.to_csv("../data/cleaned_cuisines.csv")
|
||||
```
|
||||
|
||||
Ez a friss CSV most megtalálható az adatállomány mappájának gyökerében.
|
||||
|
||||
---
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
Ez a tananyag számos érdekes adatállományt tartalmaz. Nézd át a `data` mappákat, és nézd meg, hogy van-e olyan adatállomány, amely bináris vagy többosztályos osztályozásra alkalmas? Milyen kérdéseket tennél fel ennek az adatállománynak?
|
||||
|
||||
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Fedezd fel a SMOTE API-t. Milyen felhasználási esetekre a legalkalmasabb? Milyen problémákat old meg?
|
||||
|
||||
## Feladat
|
||||
|
||||
[Fedezd fel az osztályozási módszereket](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "b2a01912beb24cfb0007f83594dba801",
|
||||
"translation_date": "2025-09-05T16:27:39+00:00",
|
||||
"source_file": "4-Classification/1-Introduction/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Fedezd fel a klasszifikációs módszereket
|
||||
|
||||
## Útmutató
|
||||
|
||||
A [Scikit-learn dokumentációjában](https://scikit-learn.org/stable/supervised_learning.html) számos adatklasszifikációs módszert találhatsz. Végezzen egy kis kincsvadászatot ezekben a dokumentumokban: a célod az, hogy klasszifikációs módszereket keress, és párosítsd őket egy adatállománnyal ebből a tananyagból, egy kérdéssel, amit feltehetsz róla, valamint egy klasszifikációs technikával. Készíts egy táblázatot vagy táblát egy .doc fájlban, és magyarázd el, hogyan működne az adatállomány a klasszifikációs algoritmussal.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| | egy dokumentum bemutatásra kerül, amely 5 algoritmust ismertet egy klasszifikációs technikával együtt. Az ismertetés jól magyarázott és részletes. | egy dokumentum bemutatásra kerül, amely 3 algoritmust ismertet egy klasszifikációs technikával együtt. Az ismertetés jól magyarázott és részletes. | egy dokumentum bemutatásra kerül, amely kevesebb mint három algoritmust ismertet egy klasszifikációs technikával együtt, és az ismertetés sem jól magyarázott, sem részletes. |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T16:28:05+00:00",
|
||||
"source_file": "4-Classification/1-Introduction/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,23 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "de6025f96841498b0577e9d1aee18d1f",
|
||||
"translation_date": "2025-09-05T16:20:05+00:00",
|
||||
"source_file": "4-Classification/2-Classifiers-1/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Tanulmányozd a megoldókat
|
||||
## Útmutató
|
||||
|
||||
Ebben a leckében megismerkedtél a különböző megoldókkal, amelyek algoritmusokat párosítanak egy gépi tanulási folyamattal, hogy pontos modellt hozzanak létre. Nézd át a leckében felsorolt megoldókat, és válassz ki kettőt. Saját szavaiddal hasonlítsd össze és állítsd szembe ezt a két megoldót. Milyen típusú problémákat oldanak meg? Hogyan működnek különböző adatstruktúrákkal? Miért választanád az egyiket a másik helyett?
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiváló | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- |
|
||||
| | Egy .doc fájl van bemutatva, amely két bekezdést tartalmaz, mindegyik egy-egy megoldóról, gondosan összehasonlítva őket. | Egy .doc fájl van bemutatva, amely csak egy bekezdést tartalmaz | A feladat hiányos |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális, emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T16:20:28+00:00",
|
||||
"source_file": "4-Classification/2-Classifiers-1/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,249 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "49047911108adc49d605cddfb455749c",
|
||||
"translation_date": "2025-09-05T16:23:30+00:00",
|
||||
"source_file": "4-Classification/3-Classifiers-2/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Konyhai osztályozók 2
|
||||
|
||||
Ebben a második osztályozási leckében további módszereket fedezhetsz fel a numerikus adatok osztályozására. Megismerheted azt is, hogy milyen következményekkel jár, ha egyik osztályozót választod a másik helyett.
|
||||
|
||||
## [Előzetes kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
### Előfeltétel
|
||||
|
||||
Feltételezzük, hogy elvégezted az előző leckéket, és van egy megtisztított adatállományod a `data` mappában, amely _cleaned_cuisines.csv_ néven található a 4-leckés mappa gyökérkönyvtárában.
|
||||
|
||||
### Előkészület
|
||||
|
||||
Betöltöttük a _notebook.ipynb_ fájlodat a megtisztított adatállománnyal, és X és y adatkeretekre osztottuk, készen állva a modellépítési folyamatra.
|
||||
|
||||
## Egy osztályozási térkép
|
||||
|
||||
Korábban megismerkedtél a különböző lehetőségekkel, amelyekkel adatokat osztályozhatsz a Microsoft csalólapja segítségével. A Scikit-learn egy hasonló, de részletesebb csalólapot kínál, amely tovább segíthet az osztályozók (más néven becslők) szűkítésében:
|
||||
|
||||

|
||||
> Tipp: [nézd meg ezt a térképet online](https://scikit-learn.org/stable/tutorial/machine_learning_map/), és kattints az útvonalakon, hogy elolvashasd a dokumentációt.
|
||||
|
||||
### A terv
|
||||
|
||||
Ez a térkép nagyon hasznos, ha tisztában vagy az adataiddal, mivel „végigjárhatod” az útvonalait, hogy döntést hozz:
|
||||
|
||||
- Több mint 50 mintánk van
|
||||
- Kategóriát szeretnénk előre jelezni
|
||||
- Címkézett adataink vannak
|
||||
- Kevesebb mint 100 ezer mintánk van
|
||||
- ✨ Választhatunk egy Linear SVC-t
|
||||
- Ha ez nem működik, mivel numerikus adataink vannak
|
||||
- Kipróbálhatunk egy ✨ KNeighbors Classifiert
|
||||
- Ha ez sem működik, próbáljuk ki a ✨ SVC-t és ✨ Ensemble Classifiert
|
||||
|
||||
Ez egy nagyon hasznos útvonal, amit követhetünk.
|
||||
|
||||
## Gyakorlat - az adatok felosztása
|
||||
|
||||
Ezt az útvonalat követve kezdjük azzal, hogy importálunk néhány szükséges könyvtárat.
|
||||
|
||||
1. Importáld a szükséges könyvtárakat:
|
||||
|
||||
```python
|
||||
from sklearn.neighbors import KNeighborsClassifier
|
||||
from sklearn.linear_model import LogisticRegression
|
||||
from sklearn.svm import SVC
|
||||
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
|
||||
from sklearn.model_selection import train_test_split, cross_val_score
|
||||
from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve
|
||||
import numpy as np
|
||||
```
|
||||
|
||||
1. Oszd fel a tanuló és tesztadatokat:
|
||||
|
||||
```python
|
||||
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
|
||||
```
|
||||
|
||||
## Linear SVC osztályozó
|
||||
|
||||
A Support-Vector clustering (SVC) a Support-Vector gépek ML technikáinak családjába tartozik (további információk alább). Ebben a módszerben egy 'kernel'-t választhatsz, amely meghatározza, hogyan csoportosítja a címkéket. A 'C' paraméter a 'regularizációt' jelenti, amely szabályozza a paraméterek hatását. A kernel lehet [többféle](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); itt 'linear'-re állítjuk, hogy lineáris SVC-t használjunk. Az alapértelmezett valószínűség 'false'; itt 'true'-ra állítjuk, hogy valószínűségi becsléseket kapjunk. A random state '0'-ra van állítva, hogy az adatokat keverjük a valószínűségek eléréséhez.
|
||||
|
||||
### Gyakorlat - alkalmazz lineáris SVC-t
|
||||
|
||||
Kezdj egy osztályozók tömbjének létrehozásával. Ehhez fokozatosan hozzáadunk elemeket, ahogy tesztelünk.
|
||||
|
||||
1. Kezdj egy Linear SVC-vel:
|
||||
|
||||
```python
|
||||
C = 10
|
||||
# Create different classifiers.
|
||||
classifiers = {
|
||||
'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
|
||||
}
|
||||
```
|
||||
|
||||
2. Tanítsd be a modelledet a Linear SVC-vel, és nyomtass ki egy jelentést:
|
||||
|
||||
```python
|
||||
n_classifiers = len(classifiers)
|
||||
|
||||
for index, (name, classifier) in enumerate(classifiers.items()):
|
||||
classifier.fit(X_train, np.ravel(y_train))
|
||||
|
||||
y_pred = classifier.predict(X_test)
|
||||
accuracy = accuracy_score(y_test, y_pred)
|
||||
print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100))
|
||||
print(classification_report(y_test,y_pred))
|
||||
```
|
||||
|
||||
Az eredmény elég jó:
|
||||
|
||||
```output
|
||||
Accuracy (train) for Linear SVC: 78.6%
|
||||
precision recall f1-score support
|
||||
|
||||
chinese 0.71 0.67 0.69 242
|
||||
indian 0.88 0.86 0.87 234
|
||||
japanese 0.79 0.74 0.76 254
|
||||
korean 0.85 0.81 0.83 242
|
||||
thai 0.71 0.86 0.78 227
|
||||
|
||||
accuracy 0.79 1199
|
||||
macro avg 0.79 0.79 0.79 1199
|
||||
weighted avg 0.79 0.79 0.79 1199
|
||||
```
|
||||
|
||||
## K-Neighbors osztályozó
|
||||
|
||||
A K-Neighbors az ML módszerek "szomszédok" családjába tartozik, amelyeket felügyelt és nem felügyelt tanulásra is lehet használni. Ebben a módszerben előre meghatározott számú pontot hozunk létre, és az adatok ezek köré gyűlnek, hogy általánosított címkéket lehessen előre jelezni az adatokhoz.
|
||||
|
||||
### Gyakorlat - alkalmazd a K-Neighbors osztályozót
|
||||
|
||||
Az előző osztályozó jó volt, és jól működött az adatokkal, de talán jobb pontosságot érhetünk el. Próbálj ki egy K-Neighbors osztályozót.
|
||||
|
||||
1. Adj hozzá egy sort az osztályozók tömbjéhez (tegyél vesszőt a Linear SVC elem után):
|
||||
|
||||
```python
|
||||
'KNN classifier': KNeighborsClassifier(C),
|
||||
```
|
||||
|
||||
Az eredmény kicsit rosszabb:
|
||||
|
||||
```output
|
||||
Accuracy (train) for KNN classifier: 73.8%
|
||||
precision recall f1-score support
|
||||
|
||||
chinese 0.64 0.67 0.66 242
|
||||
indian 0.86 0.78 0.82 234
|
||||
japanese 0.66 0.83 0.74 254
|
||||
korean 0.94 0.58 0.72 242
|
||||
thai 0.71 0.82 0.76 227
|
||||
|
||||
accuracy 0.74 1199
|
||||
macro avg 0.76 0.74 0.74 1199
|
||||
weighted avg 0.76 0.74 0.74 1199
|
||||
```
|
||||
|
||||
✅ Tudj meg többet a [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) módszerről.
|
||||
|
||||
## Support Vector osztályozó
|
||||
|
||||
A Support-Vector osztályozók az ML módszerek [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) családjába tartoznak, amelyeket osztályozási és regressziós feladatokra használnak. Az SVM-ek "a tanuló példákat pontokká térképezik az űrben", hogy maximalizálják a távolságot két kategória között. A későbbi adatok ebbe az űrbe kerülnek, hogy előre jelezzék a kategóriájukat.
|
||||
|
||||
### Gyakorlat - alkalmazz Support Vector osztályozót
|
||||
|
||||
Próbáljunk meg egy kicsit jobb pontosságot elérni egy Support Vector osztályozóval.
|
||||
|
||||
1. Tegyél vesszőt a K-Neighbors elem után, majd add hozzá ezt a sort:
|
||||
|
||||
```python
|
||||
'SVC': SVC(),
|
||||
```
|
||||
|
||||
Az eredmény elég jó!
|
||||
|
||||
```output
|
||||
Accuracy (train) for SVC: 83.2%
|
||||
precision recall f1-score support
|
||||
|
||||
chinese 0.79 0.74 0.76 242
|
||||
indian 0.88 0.90 0.89 234
|
||||
japanese 0.87 0.81 0.84 254
|
||||
korean 0.91 0.82 0.86 242
|
||||
thai 0.74 0.90 0.81 227
|
||||
|
||||
accuracy 0.83 1199
|
||||
macro avg 0.84 0.83 0.83 1199
|
||||
weighted avg 0.84 0.83 0.83 1199
|
||||
```
|
||||
|
||||
✅ Tudj meg többet a [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) módszerről.
|
||||
|
||||
## Ensemble osztályozók
|
||||
|
||||
Kövessük az útvonalat egészen a végéig, még akkor is, ha az előző teszt elég jó volt. Próbáljunk ki néhány 'Ensemble osztályozót', különösen a Random Forest és AdaBoost módszereket:
|
||||
|
||||
```python
|
||||
'RFST': RandomForestClassifier(n_estimators=100),
|
||||
'ADA': AdaBoostClassifier(n_estimators=100)
|
||||
```
|
||||
|
||||
Az eredmény nagyon jó, különösen a Random Forest esetében:
|
||||
|
||||
```output
|
||||
Accuracy (train) for RFST: 84.5%
|
||||
precision recall f1-score support
|
||||
|
||||
chinese 0.80 0.77 0.78 242
|
||||
indian 0.89 0.92 0.90 234
|
||||
japanese 0.86 0.84 0.85 254
|
||||
korean 0.88 0.83 0.85 242
|
||||
thai 0.80 0.87 0.83 227
|
||||
|
||||
accuracy 0.84 1199
|
||||
macro avg 0.85 0.85 0.84 1199
|
||||
weighted avg 0.85 0.84 0.84 1199
|
||||
|
||||
Accuracy (train) for ADA: 72.4%
|
||||
precision recall f1-score support
|
||||
|
||||
chinese 0.64 0.49 0.56 242
|
||||
indian 0.91 0.83 0.87 234
|
||||
japanese 0.68 0.69 0.69 254
|
||||
korean 0.73 0.79 0.76 242
|
||||
thai 0.67 0.83 0.74 227
|
||||
|
||||
accuracy 0.72 1199
|
||||
macro avg 0.73 0.73 0.72 1199
|
||||
weighted avg 0.73 0.72 0.72 1199
|
||||
```
|
||||
|
||||
✅ Tudj meg többet az [Ensemble osztályozókról](https://scikit-learn.org/stable/modules/ensemble.html).
|
||||
|
||||
Ez a gépi tanulási módszer "több alapbecslő előrejelzéseit kombinálja", hogy javítsa a modell minőségét. Példánkban Random Trees és AdaBoost módszereket használtunk.
|
||||
|
||||
- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), egy átlagolási módszer, amely 'döntési fák' 'erdőjét' építi fel véletlenszerűséggel, hogy elkerülje a túltanulást. Az n_estimators paraméter a fák számát határozza meg.
|
||||
|
||||
- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) egy osztályozót illeszt az adatállományhoz, majd ennek másolatait illeszti ugyanarra az adatállományra. Azokra az elemekre összpontosít, amelyeket helytelenül osztályoztak, és a következő osztályozó illesztését úgy állítja be, hogy javítsa azokat.
|
||||
|
||||
---
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
Ezeknek a technikáknak számos paramétere van, amelyeket módosíthatsz. Kutass utána mindegyik alapértelmezett paramétereinek, és gondold át, hogy ezek módosítása mit jelentene a modell minőségére nézve.
|
||||
|
||||
## [Utólagos kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Ezekben a leckékben sok a szakzsargon, ezért szánj egy percet arra, hogy átnézd [ezt a listát](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) a hasznos terminológiáról!
|
||||
|
||||
## Feladat
|
||||
|
||||
[Paraméterek játéka](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "58dfdaf79fb73f7d34b22bdbacf57329",
|
||||
"translation_date": "2025-09-05T16:24:43+00:00",
|
||||
"source_file": "4-Classification/3-Classifiers-2/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Paraméterek kezelése
|
||||
|
||||
## Útmutató
|
||||
|
||||
Számos paraméter van, amely alapértelmezés szerint be van állítva, amikor ezekkel az osztályozókkal dolgozunk. Az Intellisense a VS Code-ban segíthet ezek feltárásában. Válassz ki egyet az ebben a leckében bemutatott gépi tanulási osztályozási technikák közül, és tanítsd újra a modelleket különböző paraméterértékek módosításával. Készíts egy jegyzetfüzetet, amely elmagyarázza, hogy bizonyos változtatások miért javítják a modell minőségét, míg mások miért rontják azt. Légy részletes a válaszodban.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | -------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ----------------------------- |
|
||||
| | Egy jegyzetfüzet bemutatásra kerül, amelyben az osztályozó teljesen fel van építve, a paraméterek módosítva vannak, és a változások szövegdobozokban elmagyarázva | Egy jegyzetfüzet részben bemutatott vagy gyengén magyarázott | Egy jegyzetfüzet hibás vagy hiányos |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T16:25:06+00:00",
|
||||
"source_file": "4-Classification/3-Classifiers-2/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,329 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "61bdec27ed2da8b098cd9065405d9bb0",
|
||||
"translation_date": "2025-09-05T16:21:03+00:00",
|
||||
"source_file": "4-Classification/4-Applied/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Építs egy konyhai ajánló webalkalmazást
|
||||
|
||||
Ebben a leckében egy osztályozási modellt fogsz építeni, felhasználva az előző leckékben tanult technikákat, valamint a sorozat során használt ízletes konyhai adatbázist. Ezen kívül egy kis webalkalmazást is készítesz, amely egy mentett modellt használ, az Onnx webes futtatókörnyezetét kihasználva.
|
||||
|
||||
A gépi tanulás egyik legpraktikusabb alkalmazása az ajánlórendszerek építése, és ma te is megteheted az első lépést ebbe az irányba!
|
||||
|
||||
[](https://youtu.be/17wdM9AHMfg "Alkalmazott ML")
|
||||
|
||||
> 🎥 Kattints a fenti képre a videóért: Jen Looper egy webalkalmazást épít osztályozott konyhai adatokkal
|
||||
|
||||
## [Előzetes kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
Ebben a leckében megtanulod:
|
||||
|
||||
- Hogyan építs modellt és mentsd el Onnx formátumban
|
||||
- Hogyan használd a Netron-t a modell vizsgálatához
|
||||
- Hogyan használd a modelledet egy webalkalmazásban következtetéshez
|
||||
|
||||
## Építsd meg a modelledet
|
||||
|
||||
Az alkalmazott gépi tanulási rendszerek építése fontos része annak, hogy ezeket a technológiákat üzleti rendszereidben hasznosítsd. A modelleket webalkalmazásokban is használhatod (így offline környezetben is, ha szükséges), az Onnx segítségével.
|
||||
|
||||
Egy [korábbi leckében](../../3-Web-App/1-Web-App/README.md) egy regressziós modellt építettél UFO észlelésekről, "pickle"-be mentetted, és egy Flask alkalmazásban használtad. Bár ez az architektúra nagyon hasznos, egy teljes Python alapú alkalmazás, és az igényeid között szerepelhet egy JavaScript alkalmazás használata.
|
||||
|
||||
Ebben a leckében egy alapvető JavaScript-alapú rendszert építhetsz következtetéshez. Először azonban egy modellt kell betanítanod, és átalakítanod Onnx formátumra.
|
||||
|
||||
## Gyakorlat - osztályozási modell betanítása
|
||||
|
||||
Először is, taníts be egy osztályozási modellt a korábban használt tisztított konyhai adatbázis segítségével.
|
||||
|
||||
1. Kezdd azzal, hogy importálod a szükséges könyvtárakat:
|
||||
|
||||
```python
|
||||
!pip install skl2onnx
|
||||
import pandas as pd
|
||||
```
|
||||
|
||||
Szükséged lesz a '[skl2onnx](https://onnx.ai/sklearn-onnx/)' könyvtárra, hogy a Scikit-learn modelledet Onnx formátumra konvertáld.
|
||||
|
||||
1. Ezután dolgozz az adataiddal ugyanúgy, ahogy az előző leckékben, olvasd be a CSV fájlt a `read_csv()` segítségével:
|
||||
|
||||
```python
|
||||
data = pd.read_csv('../data/cleaned_cuisines.csv')
|
||||
data.head()
|
||||
```
|
||||
|
||||
1. Távolítsd el az első két felesleges oszlopot, és mentsd el a fennmaradó adatokat 'X' néven:
|
||||
|
||||
```python
|
||||
X = data.iloc[:,2:]
|
||||
X.head()
|
||||
```
|
||||
|
||||
1. Mentsd el a címkéket 'y' néven:
|
||||
|
||||
```python
|
||||
y = data[['cuisine']]
|
||||
y.head()
|
||||
|
||||
```
|
||||
|
||||
### Kezdd el a betanítási folyamatot
|
||||
|
||||
Az 'SVC' könyvtárat fogjuk használni, amely jó pontosságot biztosít.
|
||||
|
||||
1. Importáld a megfelelő könyvtárakat a Scikit-learn-ből:
|
||||
|
||||
```python
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.svm import SVC
|
||||
from sklearn.model_selection import cross_val_score
|
||||
from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report
|
||||
```
|
||||
|
||||
1. Válaszd szét a betanítási és tesztkészleteket:
|
||||
|
||||
```python
|
||||
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)
|
||||
```
|
||||
|
||||
1. Építs egy SVC osztályozási modellt, ahogy az előző leckében:
|
||||
|
||||
```python
|
||||
model = SVC(kernel='linear', C=10, probability=True,random_state=0)
|
||||
model.fit(X_train,y_train.values.ravel())
|
||||
```
|
||||
|
||||
1. Most teszteld a modelledet a `predict()` hívásával:
|
||||
|
||||
```python
|
||||
y_pred = model.predict(X_test)
|
||||
```
|
||||
|
||||
1. Nyomtass ki egy osztályozási jelentést, hogy ellenőrizd a modell minőségét:
|
||||
|
||||
```python
|
||||
print(classification_report(y_test,y_pred))
|
||||
```
|
||||
|
||||
Ahogy korábban láttuk, a pontosság jó:
|
||||
|
||||
```output
|
||||
precision recall f1-score support
|
||||
|
||||
chinese 0.72 0.69 0.70 257
|
||||
indian 0.91 0.87 0.89 243
|
||||
japanese 0.79 0.77 0.78 239
|
||||
korean 0.83 0.79 0.81 236
|
||||
thai 0.72 0.84 0.78 224
|
||||
|
||||
accuracy 0.79 1199
|
||||
macro avg 0.79 0.79 0.79 1199
|
||||
weighted avg 0.79 0.79 0.79 1199
|
||||
```
|
||||
|
||||
### Konvertáld a modelledet Onnx formátumra
|
||||
|
||||
Győződj meg róla, hogy a konverziót a megfelelő Tensor számmal végzed. Ez az adatbázis 380 összetevőt tartalmaz, így ezt a számot meg kell adnod a `FloatTensorType`-ban:
|
||||
|
||||
1. Konvertáld 380-as tensor számmal.
|
||||
|
||||
```python
|
||||
from skl2onnx import convert_sklearn
|
||||
from skl2onnx.common.data_types import FloatTensorType
|
||||
|
||||
initial_type = [('float_input', FloatTensorType([None, 380]))]
|
||||
options = {id(model): {'nocl': True, 'zipmap': False}}
|
||||
```
|
||||
|
||||
1. Hozd létre az onx fájlt, és mentsd el **model.onnx** néven:
|
||||
|
||||
```python
|
||||
onx = convert_sklearn(model, initial_types=initial_type, options=options)
|
||||
with open("./model.onnx", "wb") as f:
|
||||
f.write(onx.SerializeToString())
|
||||
```
|
||||
|
||||
> Fontos, hogy [opciókat](https://onnx.ai/sklearn-onnx/parameterized.html) adhatsz meg a konverziós szkriptben. Ebben az esetben a 'nocl' értéket True-ra, a 'zipmap' értéket False-ra állítottuk. Mivel ez egy osztályozási modell, lehetőséged van eltávolítani a ZipMap-et, amely egy listát készít szótárakból (nem szükséges). A `nocl` arra utal, hogy az osztályinformációk szerepelnek-e a modellben. Csökkentsd a modell méretét a `nocl` True-ra állításával.
|
||||
|
||||
A teljes notebook futtatása most létrehozza az Onnx modellt, és elmenti ebbe a mappába.
|
||||
|
||||
## Tekintsd meg a modelledet
|
||||
|
||||
Az Onnx modellek nem láthatók jól a Visual Studio Code-ban, de van egy nagyon jó ingyenes szoftver, amelyet sok kutató használ a modellek vizualizálására, hogy megbizonyosodjon arról, hogy megfelelően épültek. Töltsd le a [Netron](https://github.com/lutzroeder/Netron) programot, és nyisd meg a model.onnx fájlt. Láthatod az egyszerű modelledet vizualizálva, a 380 bemenettel és az osztályozóval:
|
||||
|
||||

|
||||
|
||||
A Netron egy hasznos eszköz a modellek megtekintéséhez.
|
||||
|
||||
Most készen állsz arra, hogy ezt az ügyes modellt egy webalkalmazásban használd. Építsünk egy alkalmazást, amely hasznos lehet, amikor a hűtőszekrényedbe nézel, és megpróbálod kitalálni, hogy a maradék összetevők kombinációjával milyen konyhát készíthetsz, ahogy azt a modelled meghatározza.
|
||||
|
||||
## Építs egy ajánló webalkalmazást
|
||||
|
||||
A modelledet közvetlenül egy webalkalmazásban használhatod. Ez az architektúra lehetővé teszi, hogy helyben és akár offline is futtasd. Kezdd azzal, hogy létrehozol egy `index.html` fájlt abban a mappában, ahol a `model.onnx` fájl található.
|
||||
|
||||
1. Ebben a fájlban _index.html_, add hozzá a következő jelölést:
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<header>
|
||||
<title>Cuisine Matcher</title>
|
||||
</header>
|
||||
<body>
|
||||
...
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
1. Most, a `body` címkék között adj hozzá egy kis jelölést, amely néhány összetevőt tükröző jelölőnégyzeteket mutat:
|
||||
|
||||
```html
|
||||
<h1>Check your refrigerator. What can you create?</h1>
|
||||
<div id="wrapper">
|
||||
<div class="boxCont">
|
||||
<input type="checkbox" value="4" class="checkbox">
|
||||
<label>apple</label>
|
||||
</div>
|
||||
|
||||
<div class="boxCont">
|
||||
<input type="checkbox" value="247" class="checkbox">
|
||||
<label>pear</label>
|
||||
</div>
|
||||
|
||||
<div class="boxCont">
|
||||
<input type="checkbox" value="77" class="checkbox">
|
||||
<label>cherry</label>
|
||||
</div>
|
||||
|
||||
<div class="boxCont">
|
||||
<input type="checkbox" value="126" class="checkbox">
|
||||
<label>fenugreek</label>
|
||||
</div>
|
||||
|
||||
<div class="boxCont">
|
||||
<input type="checkbox" value="302" class="checkbox">
|
||||
<label>sake</label>
|
||||
</div>
|
||||
|
||||
<div class="boxCont">
|
||||
<input type="checkbox" value="327" class="checkbox">
|
||||
<label>soy sauce</label>
|
||||
</div>
|
||||
|
||||
<div class="boxCont">
|
||||
<input type="checkbox" value="112" class="checkbox">
|
||||
<label>cumin</label>
|
||||
</div>
|
||||
</div>
|
||||
<div style="padding-top:10px">
|
||||
<button onClick="startInference()">What kind of cuisine can you make?</button>
|
||||
</div>
|
||||
```
|
||||
|
||||
Figyeld meg, hogy minden jelölőnégyzethez érték van rendelve. Ez tükrözi az összetevő helyét az adatbázis szerint. Az alma például ebben az ábécé szerinti listában az ötödik oszlopot foglalja el, így az értéke '4', mivel 0-tól kezdünk számolni. Az összetevők indexét a [összetevők táblázatában](../../../../4-Classification/data/ingredient_indexes.csv) találhatod meg.
|
||||
|
||||
Folytatva a munkát az index.html fájlban, adj hozzá egy szkript blokkot, ahol a modell hívása történik a végső záró `</div>` után.
|
||||
|
||||
1. Először importáld az [Onnx Runtime](https://www.onnxruntime.ai/) könyvtárat:
|
||||
|
||||
```html
|
||||
<script src="https://cdn.jsdelivr.net/npm/onnxruntime-web@1.9.0/dist/ort.min.js"></script>
|
||||
```
|
||||
|
||||
> Az Onnx Runtime lehetővé teszi, hogy az Onnx modelleket különböző hardverplatformokon futtasd, optimalizálásokkal és egy API-val.
|
||||
|
||||
1. Miután a Runtime helyén van, hívd meg:
|
||||
|
||||
```html
|
||||
<script>
|
||||
const ingredients = Array(380).fill(0);
|
||||
|
||||
const checks = [...document.querySelectorAll('.checkbox')];
|
||||
|
||||
checks.forEach(check => {
|
||||
check.addEventListener('change', function() {
|
||||
// toggle the state of the ingredient
|
||||
// based on the checkbox's value (1 or 0)
|
||||
ingredients[check.value] = check.checked ? 1 : 0;
|
||||
});
|
||||
});
|
||||
|
||||
function testCheckboxes() {
|
||||
// validate if at least one checkbox is checked
|
||||
return checks.some(check => check.checked);
|
||||
}
|
||||
|
||||
async function startInference() {
|
||||
|
||||
let atLeastOneChecked = testCheckboxes()
|
||||
|
||||
if (!atLeastOneChecked) {
|
||||
alert('Please select at least one ingredient.');
|
||||
return;
|
||||
}
|
||||
try {
|
||||
// create a new session and load the model.
|
||||
|
||||
const session = await ort.InferenceSession.create('./model.onnx');
|
||||
|
||||
const input = new ort.Tensor(new Float32Array(ingredients), [1, 380]);
|
||||
const feeds = { float_input: input };
|
||||
|
||||
// feed inputs and run
|
||||
const results = await session.run(feeds);
|
||||
|
||||
// read from results
|
||||
alert('You can enjoy ' + results.label.data[0] + ' cuisine today!')
|
||||
|
||||
} catch (e) {
|
||||
console.log(`failed to inference ONNX model`);
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
```
|
||||
|
||||
Ebben a kódban több dolog történik:
|
||||
|
||||
1. Létrehoztál egy 380 lehetséges értéket (1 vagy 0) tartalmazó tömböt, amelyet beállítasz és elküldesz a modellnek következtetéshez, attól függően, hogy egy összetevő jelölőnégyzet be van-e jelölve.
|
||||
2. Létrehoztál egy jelölőnégyzetek tömbjét és egy módot annak meghatározására, hogy be vannak-e jelölve egy `init` függvényben, amelyet az alkalmazás indításakor hívsz meg. Amikor egy jelölőnégyzet be van jelölve, az `ingredients` tömb módosul, hogy tükrözze a kiválasztott összetevőt.
|
||||
3. Létrehoztál egy `testCheckboxes` függvényt, amely ellenőrzi, hogy van-e bejelölt jelölőnégyzet.
|
||||
4. A `startInference` függvényt használod, amikor a gombot megnyomják, és ha van bejelölt jelölőnégyzet, elindítod a következtetést.
|
||||
5. A következtetési rutin tartalmazza:
|
||||
1. A modell aszinkron betöltésének beállítását
|
||||
2. Egy Tensor struktúra létrehozását, amelyet elküldesz a modellnek
|
||||
3. 'Feeds' létrehozását, amely tükrözi a `float_input` bemenetet, amelyet a modelled betanításakor hoztál létre (a Netron segítségével ellenőrizheted ezt a nevet)
|
||||
4. Ezeknek a 'feeds'-eknek a modellhez való elküldését és a válasz megvárását
|
||||
|
||||
## Teszteld az alkalmazásodat
|
||||
|
||||
Nyiss egy terminálablakot a Visual Studio Code-ban abban a mappában, ahol az index.html fájl található. Győződj meg róla, hogy a [http-server](https://www.npmjs.com/package/http-server) globálisan telepítve van, és írd be a `http-server` parancsot. Egy localhost megnyílik, és megtekintheted a webalkalmazásodat. Ellenőrizd, hogy milyen konyhát ajánl a különböző összetevők alapján:
|
||||
|
||||

|
||||
|
||||
Gratulálok, létrehoztál egy 'ajánló' webalkalmazást néhány mezővel. Szánj időt arra, hogy továbbfejleszd ezt a rendszert!
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
A webalkalmazásod nagyon minimális, így folytasd a fejlesztését az összetevők és azok indexei alapján a [összetevők indexei](../../../../4-Classification/data/ingredient_indexes.csv) adatból. Milyen ízkombinációk működnek egy adott nemzeti étel elkészítéséhez?
|
||||
|
||||
## [Utólagos kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Bár ez a lecke csak érintette az ételösszetevők ajánlórendszerének létrehozásának hasznosságát, ez a gépi tanulási alkalmazások területe nagyon gazdag példákban. Olvass többet arról, hogyan épülnek ezek a rendszerek:
|
||||
|
||||
- https://www.sciencedirect.com/topics/computer-science/recommendation-engine
|
||||
- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/
|
||||
- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/
|
||||
|
||||
## Feladat
|
||||
|
||||
[Építs egy új ajánlót](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "799ed651e2af0a7cad17c6268db11578",
|
||||
"translation_date": "2025-09-05T16:22:49+00:00",
|
||||
"source_file": "4-Classification/4-Applied/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Ajánló készítése
|
||||
|
||||
## Útmutató
|
||||
|
||||
Az ebben a leckében végzett gyakorlatok alapján most már tudod, hogyan kell JavaScript-alapú webalkalmazást készíteni Onnx Runtime és egy konvertált Onnx modell segítségével. Kísérletezz egy új ajánló létrehozásával, amely az itt tanult adatokra vagy máshonnan származó adatokra épül (kérlek, tüntesd fel a forrást). Készíthetsz például egy háziállat-ajánlót különböző személyiségjegyek alapján, vagy egy zenei műfaj-ajánlót egy személy hangulata alapján. Légy kreatív!
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szoruló |
|
||||
| --------- | --------------------------------------------------------------------- | ------------------------------------- | --------------------------------- |
|
||||
| | Egy webalkalmazás és jegyzetfüzet kerül bemutatásra, mindkettő jól dokumentált és működőképes | Az egyik hiányzik vagy hibás | Mindkettő hiányzik vagy hibás |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,41 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "74e809ffd1e613a1058bbc3e9600859e",
|
||||
"translation_date": "2025-09-05T16:16:23+00:00",
|
||||
"source_file": "4-Classification/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Kezdjük a klasszifikációval
|
||||
|
||||
## Regionális téma: Finom ázsiai és indiai konyhák 🍜
|
||||
|
||||
Ázsiában és Indiában az étkezési hagyományok rendkívül sokszínűek és nagyon ízletesek! Nézzük meg a regionális konyhákról szóló adatokat, hogy jobban megértsük az összetevőiket.
|
||||
|
||||

|
||||
> Fotó: <a href="https://unsplash.com/@changlisheng?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Lisheng Chang</a> az <a href="https://unsplash.com/s/photos/asian-food?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a> oldalán
|
||||
|
||||
## Amit megtanulsz
|
||||
|
||||
Ebben a részben az előzőekben tanult regresszióra építve megismerkedsz más osztályozókkal, amelyeket az adatok jobb megértéséhez használhatsz.
|
||||
|
||||
> Hasznos, kevés kódolást igénylő eszközök is rendelkezésre állnak, amelyek segítenek az osztályozási modellekkel való munka elsajátításában. Próbáld ki az [Azure ML-t ehhez a feladathoz](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)
|
||||
|
||||
## Leckék
|
||||
|
||||
1. [Bevezetés az osztályozásba](1-Introduction/README.md)
|
||||
2. [További osztályozók](2-Classifiers-1/README.md)
|
||||
3. [Még több osztályozó](3-Classifiers-2/README.md)
|
||||
4. [Alkalmazott ML: webalkalmazás készítése](4-Applied/README.md)
|
||||
|
||||
## Köszönetnyilvánítás
|
||||
|
||||
A "Kezdjük a klasszifikációval" anyagot ♥️-val írták: [Cassie Breviu](https://www.twitter.com/cassiebreviu) és [Jen Looper](https://www.twitter.com/jenlooper)
|
||||
|
||||
A finom konyhákról szóló adatkészlet a [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines) oldaláról származik.
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,345 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "730225ea274c9174fe688b21d421539d",
|
||||
"translation_date": "2025-09-05T15:41:05+00:00",
|
||||
"source_file": "5-Clustering/1-Visualize/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Bevezetés a klaszterezéshez
|
||||
|
||||
A klaszterezés a [felügyelet nélküli tanulás](https://wikipedia.org/wiki/Unsupervised_learning) egyik típusa, amely feltételezi, hogy az adathalmaz címkézetlen, vagy hogy a bemenetek nincsenek előre meghatározott kimenetekhez társítva. Különböző algoritmusokat használ a címkézetlen adatok rendezésére, és csoportosításokat hoz létre az adatokban észlelt minták alapján.
|
||||
|
||||
[](https://youtu.be/ty2advRiWJM "No One Like You by PSquare")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy videóért. Miközben a klaszterezéssel kapcsolatos gépi tanulást tanulmányozod, élvezd néhány nigériai Dance Hall számot - ez egy nagyon népszerű dal 2014-ből a PSquare-től.
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
### Bevezetés
|
||||
|
||||
A [klaszterezés](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) nagyon hasznos az adatok feltárásában. Nézzük meg, hogy segíthet-e trendek és minták felfedezésében a nigériai közönség zenehallgatási szokásai kapcsán.
|
||||
|
||||
✅ Gondolkodj el egy percig a klaszterezés felhasználási lehetőségein. A való életben klaszterezés történik, amikor van egy halom mosnivaló, és szét kell válogatnod a családtagok ruháit 🧦👕👖🩲. Az adatkutatásban klaszterezés történik, amikor megpróbáljuk elemezni a felhasználó preferenciáit, vagy meghatározni egy címkézetlen adathalmaz jellemzőit. A klaszterezés bizonyos értelemben segít rendet teremteni a káoszban, mint például egy zoknis fiókban.
|
||||
|
||||
[](https://youtu.be/esmzYhuFnds "Introduction to Clustering")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy videóért: MIT John Guttag bemutatja a klaszterezést
|
||||
|
||||
Egy szakmai környezetben a klaszterezést például piaci szegmentáció meghatározására lehet használni, például annak megállapítására, hogy mely korcsoportok vásárolnak milyen termékeket. Egy másik felhasználási terület lehet az anomáliák észlelése, például csalások felderítése egy hitelkártya-tranzakciókat tartalmazó adathalmazból. Vagy használhatod a klaszterezést daganatok azonosítására egy orvosi szkenekből álló adathalmazban.
|
||||
|
||||
✅ Gondolkodj el egy percig azon, hogy találkoztál-e már klaszterezéssel a való életben, például banki, e-kereskedelmi vagy üzleti környezetben.
|
||||
|
||||
> 🎓 Érdekes módon a klaszterelemzés az antropológia és pszichológia területén kezdődött az 1930-as években. El tudod képzelni, hogyan használhatták akkoriban?
|
||||
|
||||
Alternatívaként használhatod keresési eredmények csoportosítására is - például vásárlási linkek, képek vagy vélemények alapján. A klaszterezés hasznos, ha van egy nagy adathalmaz, amelyet csökkenteni szeretnél, és amelyen részletesebb elemzést szeretnél végezni, így a technika segíthet az adatok megértésében, mielőtt más modelleket építenél.
|
||||
|
||||
✅ Miután az adataid klaszterekbe szerveződtek, hozzárendelhetsz egy klaszterazonosítót, és ez a technika hasznos lehet az adathalmaz adatvédelmének megőrzésében; az adatpontokra a klaszterazonosítóval hivatkozhatsz, ahelyett, hogy azonosítható adatokat használnál. Tudsz más okokat is mondani, hogy miért hivatkoznál egy klaszterazonosítóra a klaszter más elemei helyett?
|
||||
|
||||
Mélyítsd el a klaszterezési technikák megértését ebben a [Learn modulban](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott)
|
||||
|
||||
## Klaszterezés kezdőknek
|
||||
|
||||
[A Scikit-learn számos módszert kínál](https://scikit-learn.org/stable/modules/clustering.html) a klaszterezés elvégzésére. Az, hogy melyiket választod, az esettől függ. A dokumentáció szerint minden módszernek megvannak a maga előnyei. Íme egy egyszerűsített táblázat a Scikit-learn által támogatott módszerekről és azok megfelelő felhasználási eseteiről:
|
||||
|
||||
| Módszer neve | Felhasználási eset |
|
||||
| :--------------------------- | :--------------------------------------------------------------------- |
|
||||
| K-Means | általános célú, induktív |
|
||||
| Affinity propagation | sok, egyenetlen klaszterek, induktív |
|
||||
| Mean-shift | sok, egyenetlen klaszterek, induktív |
|
||||
| Spectral clustering | kevés, egyenletes klaszterek, transzduktív |
|
||||
| Ward hierarchical clustering | sok, korlátozott klaszterek, transzduktív |
|
||||
| Agglomerative clustering | sok, korlátozott, nem euklideszi távolságok, transzduktív |
|
||||
| DBSCAN | nem sík geometria, egyenetlen klaszterek, transzduktív |
|
||||
| OPTICS | nem sík geometria, egyenetlen klaszterek változó sűrűséggel, transzduktív |
|
||||
| Gaussian mixtures | sík geometria, induktív |
|
||||
| BIRCH | nagy adathalmaz kiugró értékekkel, induktív |
|
||||
|
||||
> 🎓 Az, hogy hogyan hozunk létre klasztereket, nagyban függ attól, hogyan gyűjtjük össze az adatpontokat csoportokba. Nézzük meg néhány szakkifejezést:
|
||||
>
|
||||
> 🎓 ['Transzduktív' vs. 'induktív'](https://wikipedia.org/wiki/Transduction_(machine_learning))
|
||||
>
|
||||
> A transzduktív következtetés megfigyelt tanulási esetekből származik, amelyek konkrét tesztesetekhez kapcsolódnak. Az induktív következtetés tanulási esetekből származik, amelyek általános szabályokat alkotnak, amelyeket csak ezután alkalmaznak a tesztesetekre.
|
||||
>
|
||||
> Példa: Képzeld el, hogy van egy adathalmazod, amely csak részben van címkézve. Néhány elem 'lemezek', néhány 'cd-k', és néhány üres. A feladatod az üres elemek címkézése. Ha induktív megközelítést választasz, egy modellt tanítasz 'lemezek' és 'cd-k' keresésére, és ezeket a címkéket alkalmazod a címkézetlen adatokra. Ez a megközelítés nehézségekbe ütközhet olyan dolgok osztályozásában, amelyek valójában 'kazetták'. A transzduktív megközelítés viszont hatékonyabban kezeli ezt az ismeretlen adatot, mivel hasonló elemeket csoportosít, majd címkét alkalmaz egy csoportra. Ebben az esetben a klaszterek lehetnek 'kerek zenei dolgok' és 'szögletes zenei dolgok'.
|
||||
>
|
||||
> 🎓 ['Nem sík' vs. 'sík' geometria](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)
|
||||
>
|
||||
> Matematikai terminológiából származik, a nem sík vs. sík geometria az adatpontok közötti távolságok mérésére utal, akár 'sík' ([euklideszi](https://wikipedia.org/wiki/Euclidean_geometry)), akár 'nem sík' (nem euklideszi) geometriai módszerekkel.
|
||||
>
|
||||
>'Sík' ebben az összefüggésben az euklideszi geometriára utal (amelynek részeit 'síkmértan' néven tanítják), míg a nem sík a nem euklideszi geometriára utal. Mi köze van a geometriának a gépi tanuláshoz? Nos, mivel mindkét terület matematikai alapokon nyugszik, szükség van egy közös módszerre az adatpontok közötti távolságok mérésére a klaszterekben, és ezt 'sík' vagy 'nem sík' módon lehet megtenni, az adatok természetétől függően. Az [euklideszi távolságokat](https://wikipedia.org/wiki/Euclidean_distance) két pont közötti vonalszakasz hosszával mérik. A [nem euklideszi távolságokat](https://wikipedia.org/wiki/Non-Euclidean_geometry) görbe mentén mérik. Ha az adataid, vizualizálva, nem síkban léteznek, akkor speciális algoritmusra lehet szükséged a kezelésükhöz.
|
||||
>
|
||||

|
||||
> Infografika: [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
||||
>
|
||||
> 🎓 ['Távolságok'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)
|
||||
>
|
||||
> A klasztereket a távolságmátrixuk határozza meg, például az adatpontok közötti távolságok. Ez a távolság többféleképpen mérhető. Az euklideszi klasztereket az adatpontok értékeinek átlaga határozza meg, és tartalmaznak egy 'centroidot' vagy középpontot. A távolságokat így a centroidtól való távolság alapján mérik. A nem euklideszi távolságok 'clustroidok'-ra utalnak, az adatpontra, amely a legközelebb van más pontokhoz. A clustroidokat különböző módon lehet meghatározni.
|
||||
>
|
||||
> 🎓 ['Korlátozott'](https://wikipedia.org/wiki/Constrained_clustering)
|
||||
>
|
||||
> A [korlátozott klaszterezés](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) 'félig felügyelt' tanulást vezet be ebbe a felügyelet nélküli módszerbe. Az adatpontok közötti kapcsolatokat 'nem kapcsolható' vagy 'kapcsolható' címkékkel jelölik, így bizonyos szabályokat kényszerítenek az adathalmazra.
|
||||
>
|
||||
>Példa: Ha egy algoritmus szabadon működik egy címkézetlen vagy félig címkézett adathalmazon, az általa létrehozott klaszterek gyenge minőségűek lehetnek. A fenti példában a klaszterek lehetnek 'kerek zenei dolgok', 'szögletes zenei dolgok', 'háromszög alakú dolgok' és 'sütik'. Ha néhány korlátozást vagy szabályt adunk meg ("az elemnek műanyagból kell készülnie", "az elemnek zenét kell tudnia produkálni"), ez segíthet az algoritmusnak jobb döntéseket hozni.
|
||||
>
|
||||
> 🎓 'Sűrűség'
|
||||
>
|
||||
> Az 'zajos' adatokat 'sűrűnek' tekintik. Az egyes klaszterekben lévő pontok közötti távolságok vizsgálatakor kiderülhet, hogy ezek a távolságok többé-kevésbé sűrűek, vagy 'zsúfoltak', és így az ilyen adatokat megfelelő klaszterezési módszerrel kell elemezni. [Ez a cikk](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) bemutatja a különbséget a K-Means klaszterezés és a HDBSCAN algoritmusok használata között egy zajos adathalmaz egyenetlen klasztersűrűségének feltárására.
|
||||
|
||||
## Klaszterezési algoritmusok
|
||||
|
||||
Több mint 100 klaszterezési algoritmus létezik, és használatuk az adott adatok természetétől függ. Nézzük meg néhány főbb típust:
|
||||
|
||||
- **Hierarchikus klaszterezés**. Ha egy objektumot a közeli objektumhoz való közelsége alapján osztályoznak, nem pedig egy távolabbihoz, akkor a klaszterek az objektumok egymáshoz való távolsága alapján alakulnak ki. A Scikit-learn agglomeratív klaszterezése hierarchikus.
|
||||
|
||||

|
||||
> Infografika: [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
||||
|
||||
- **Centroid klaszterezés**. Ez a népszerű algoritmus megköveteli a 'k' választását, vagyis a létrehozandó klaszterek számát, majd az algoritmus meghatározza a klaszter középpontját, és az adatokat e pont köré gyűjti. A [K-means klaszterezés](https://wikipedia.org/wiki/K-means_clustering) a centroid klaszterezés népszerű változata. A középpontot a legközelebbi átlag határozza meg, innen ered a neve. A klasztertől való négyzetes távolság minimalizálva van.
|
||||
|
||||

|
||||
> Infografika: [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
||||
|
||||
- **Eloszlás-alapú klaszterezés**. Statisztikai modellezésen alapul, az eloszlás-alapú klaszterezés középpontjában annak valószínűsége áll, hogy egy adatpont egy klaszterhez tartozik, és ennek megfelelően osztja be. A Gauss-keverék módszerek ehhez a típushoz tartoznak.
|
||||
|
||||
- **Sűrűség-alapú klaszterezés**. Az adatpontokat klaszterekhez rendelik azok sűrűsége, vagy egymás körüli csoportosulásuk alapján. Az adatpontokat, amelyek távol vannak a csoporttól, kiugró értékeknek vagy zajnak tekintik. A DBSCAN, Mean-shift és OPTICS ehhez a típushoz tartoznak.
|
||||
|
||||
- **Rács-alapú klaszterezés**. Többdimenziós adathalmazok esetén egy rácsot hoznak létre, és az adatokat a rács cellái között osztják el, így klasztereket hozva létre.
|
||||
|
||||
## Gyakorlat - klaszterezd az adataidat
|
||||
|
||||
A klaszterezés mint technika nagyban segíti a megfelelő vizualizáció, ezért kezdjük azzal, hogy vizualizáljuk a zenei adatainkat. Ez a gyakorlat segít eldönteni, hogy a klaszterezési módszerek közül melyiket használjuk a legjobban az adatok természetéhez.
|
||||
|
||||
1. Nyisd meg a [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) fájlt ebben a mappában.
|
||||
|
||||
1. Importáld a `Seaborn` csomagot a jó adatvizualizáció érdekében.
|
||||
|
||||
```python
|
||||
!pip install seaborn
|
||||
```
|
||||
|
||||
1. Töltsd be a daladatokat a [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv) fájlból. Töltsd be egy adatkeretbe néhány adatot a dalokról. Készülj fel az adatok feltárására a könyvtárak importálásával és az adatok kiírásával:
|
||||
|
||||
```python
|
||||
import matplotlib.pyplot as plt
|
||||
import pandas as pd
|
||||
|
||||
df = pd.read_csv("../data/nigerian-songs.csv")
|
||||
df.head()
|
||||
```
|
||||
|
||||
Ellenőrizd az adatok első néhány sorát:
|
||||
|
||||
| | név | album | előadó | előadó_top_műfaj | megjelenési_dátum | hossz | népszerűség | táncolhatóság | akusztikusság | energia | hangszeresség | élénkség | hangosság | beszédesség | tempó | idő_aláírás |
|
||||
| --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ----------------
|
||||
| 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 |
|
||||
| 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 |
|
||||
| 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 |
|
||||
|
||||
1. Szerezzünk némi információt az adatkeretről az `info()` hívásával:
|
||||
|
||||
```python
|
||||
df.info()
|
||||
```
|
||||
|
||||
Az eredmény így néz ki:
|
||||
|
||||
```output
|
||||
<class 'pandas.core.frame.DataFrame'>
|
||||
RangeIndex: 530 entries, 0 to 529
|
||||
Data columns (total 16 columns):
|
||||
# Column Non-Null Count Dtype
|
||||
--- ------ -------------- -----
|
||||
0 name 530 non-null object
|
||||
1 album 530 non-null object
|
||||
2 artist 530 non-null object
|
||||
3 artist_top_genre 530 non-null object
|
||||
4 release_date 530 non-null int64
|
||||
5 length 530 non-null int64
|
||||
6 popularity 530 non-null int64
|
||||
7 danceability 530 non-null float64
|
||||
8 acousticness 530 non-null float64
|
||||
9 energy 530 non-null float64
|
||||
10 instrumentalness 530 non-null float64
|
||||
11 liveness 530 non-null float64
|
||||
12 loudness 530 non-null float64
|
||||
13 speechiness 530 non-null float64
|
||||
14 tempo 530 non-null float64
|
||||
15 time_signature 530 non-null int64
|
||||
dtypes: float64(8), int64(4), object(4)
|
||||
memory usage: 66.4+ KB
|
||||
```
|
||||
|
||||
1. Ellenőrizzük a null értékeket az `isnull()` hívásával, és győződjünk meg róla, hogy az összeg 0:
|
||||
|
||||
```python
|
||||
df.isnull().sum()
|
||||
```
|
||||
|
||||
Minden rendben:
|
||||
|
||||
```output
|
||||
name 0
|
||||
album 0
|
||||
artist 0
|
||||
artist_top_genre 0
|
||||
release_date 0
|
||||
length 0
|
||||
popularity 0
|
||||
danceability 0
|
||||
acousticness 0
|
||||
energy 0
|
||||
instrumentalness 0
|
||||
liveness 0
|
||||
loudness 0
|
||||
speechiness 0
|
||||
tempo 0
|
||||
time_signature 0
|
||||
dtype: int64
|
||||
```
|
||||
|
||||
1. Írjuk le az adatokat:
|
||||
|
||||
```python
|
||||
df.describe()
|
||||
```
|
||||
|
||||
| | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature |
|
||||
| ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- |
|
||||
| count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 |
|
||||
| mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 |
|
||||
| std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 |
|
||||
| min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 |
|
||||
| 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 |
|
||||
| 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 |
|
||||
| 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 |
|
||||
| max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 |
|
||||
|
||||
> 🤔 Ha klaszterezéssel dolgozunk, ami egy felügyelet nélküli módszer, amely nem igényel címkézett adatokat, miért mutatjuk ezeket az adatokat címkékkel? Az adatfeltárási fázisban hasznosak lehetnek, de a klaszterezési algoritmusok működéséhez nem szükségesek. Akár el is távolíthatnánk az oszlopfejléceket, és az adatokra oszlopszám alapján hivatkozhatnánk.
|
||||
|
||||
Nézzük meg az adatok általános értékeit. Vegyük észre, hogy a népszerűség lehet '0', ami azt mutatja, hogy a daloknak nincs rangsorolása. Távolítsuk el ezeket hamarosan.
|
||||
|
||||
1. Használjunk oszlopdiagramot a legnépszerűbb műfajok megállapításához:
|
||||
|
||||
```python
|
||||
import seaborn as sns
|
||||
|
||||
top = df['artist_top_genre'].value_counts()
|
||||
plt.figure(figsize=(10,7))
|
||||
sns.barplot(x=top[:5].index,y=top[:5].values)
|
||||
plt.xticks(rotation=45)
|
||||
plt.title('Top genres',color = 'blue')
|
||||
```
|
||||
|
||||

|
||||
|
||||
✅ Ha szeretnél több legjobb értéket látni, változtasd meg a top `[:5]` értékét nagyobbra, vagy távolítsd el, hogy mindet lásd.
|
||||
|
||||
Figyelj, ha a legnépszerűbb műfaj 'Missing'-ként van leírva, az azt jelenti, hogy a Spotify nem osztályozta, ezért távolítsuk el.
|
||||
|
||||
1. Távolítsuk el a hiányzó adatokat szűréssel:
|
||||
|
||||
```python
|
||||
df = df[df['artist_top_genre'] != 'Missing']
|
||||
top = df['artist_top_genre'].value_counts()
|
||||
plt.figure(figsize=(10,7))
|
||||
sns.barplot(x=top.index,y=top.values)
|
||||
plt.xticks(rotation=45)
|
||||
plt.title('Top genres',color = 'blue')
|
||||
```
|
||||
|
||||
Most ellenőrizzük újra a műfajokat:
|
||||
|
||||

|
||||
|
||||
1. Messze a három legnépszerűbb műfaj uralja ezt az adatállományt. Koncentráljunk az `afro dancehall`, `afropop` és `nigerian pop` műfajokra, és szűrjük az adatállományt, hogy eltávolítsuk azokat, amelyek népszerűségi értéke 0 (ami azt jelenti, hogy nem osztályozták népszerűséggel az adatállományban, és zajnak tekinthetők a céljaink szempontjából):
|
||||
|
||||
```python
|
||||
df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]
|
||||
df = df[(df['popularity'] > 0)]
|
||||
top = df['artist_top_genre'].value_counts()
|
||||
plt.figure(figsize=(10,7))
|
||||
sns.barplot(x=top.index,y=top.values)
|
||||
plt.xticks(rotation=45)
|
||||
plt.title('Top genres',color = 'blue')
|
||||
```
|
||||
|
||||
1. Végezzünk egy gyors tesztet, hogy lássuk, van-e az adatok között különösen erős korreláció:
|
||||
|
||||
```python
|
||||
corrmat = df.corr(numeric_only=True)
|
||||
f, ax = plt.subplots(figsize=(12, 9))
|
||||
sns.heatmap(corrmat, vmax=.8, square=True)
|
||||
```
|
||||
|
||||

|
||||
|
||||
Az egyetlen erős korreláció az `energy` és a `loudness` között van, ami nem túl meglepő, mivel a hangos zene általában elég energikus. Egyébként a korrelációk viszonylag gyengék. Érdekes lesz látni, hogy mit tud kezdeni egy klaszterezési algoritmus ezekkel az adatokkal.
|
||||
|
||||
> 🎓 Ne feledd, hogy a korreláció nem jelent ok-okozati összefüggést! Van bizonyítékunk a korrelációra, de nincs bizonyítékunk az ok-okozati összefüggésre. Egy [szórakoztató weboldal](https://tylervigen.com/spurious-correlations) vizuális példákat mutat be, amelyek hangsúlyozzák ezt a pontot.
|
||||
|
||||
Van-e bármilyen konvergencia ebben az adatállományban a dalok érzékelt népszerűsége és táncolhatósága körül? Egy FacetGrid megmutatja, hogy koncentrikus körök alakulnak ki, műfajtól függetlenül. Lehet, hogy a nigériai ízlés egy bizonyos táncolhatósági szinten konvergál ezeknél a műfajoknál?
|
||||
|
||||
✅ Próbálj ki különböző adatpontokat (energy, loudness, speechiness) és több vagy más zenei műfajokat. Mit fedezhetsz fel? Nézd meg a `df.describe()` táblázatot, hogy lásd az adatpontok általános eloszlását.
|
||||
|
||||
### Gyakorlat - adateloszlás
|
||||
|
||||
Jelentősen különbözik-e ez a három műfaj a táncolhatóság érzékelésében a népszerűségük alapján?
|
||||
|
||||
1. Vizsgáljuk meg a három legnépszerűbb műfaj adateloszlását a népszerűség és táncolhatóság mentén egy adott x és y tengelyen.
|
||||
|
||||
```python
|
||||
sns.set_theme(style="ticks")
|
||||
|
||||
g = sns.jointplot(
|
||||
data=df,
|
||||
x="popularity", y="danceability", hue="artist_top_genre",
|
||||
kind="kde",
|
||||
)
|
||||
```
|
||||
|
||||
Felfedezhetsz koncentrikus köröket egy általános konvergenciapont körül, amelyek az eloszlási pontokat mutatják.
|
||||
|
||||
> 🎓 Ne feledd, hogy ez a példa egy KDE (Kernel Density Estimate) grafikont használ, amely az adatokat egy folyamatos valószínűségi sűrűség görbével ábrázolja. Ez lehetővé teszi az adatok értelmezését több eloszlás esetén.
|
||||
|
||||
Általánosságban elmondható, hogy a három műfaj lazán igazodik a népszerűségük és táncolhatóságuk tekintetében. Klaszterek meghatározása ebben a lazán igazodó adatokban kihívást jelent:
|
||||
|
||||

|
||||
|
||||
1. Készítsünk egy szórásdiagramot:
|
||||
|
||||
```python
|
||||
sns.FacetGrid(df, hue="artist_top_genre", height=5) \
|
||||
.map(plt.scatter, "popularity", "danceability") \
|
||||
.add_legend()
|
||||
```
|
||||
|
||||
Ugyanazon tengelyek szórásdiagramja hasonló konvergenciamintát mutat
|
||||
|
||||

|
||||
|
||||
Általánosságban elmondható, hogy a klaszterezéshez használhatsz szórásdiagramokat az adatok klasztereinek megjelenítésére, így ennek a vizualizációs típusnak a elsajátítása nagyon hasznos. A következő leckében ezt a szűrt adatot fogjuk használni, és k-means klaszterezéssel fedezünk fel csoportokat az adatokban, amelyek érdekes módon átfedhetnek.
|
||||
|
||||
---
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
A következő lecke előkészítéseként készíts egy diagramot a különböző klaszterezési algoritmusokról, amelyeket felfedezhetsz és használhatsz egy termelési környezetben. Milyen problémákat próbál megoldani a klaszterezés?
|
||||
|
||||
## [Utó-lecke kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Mielőtt klaszterezési algoritmusokat alkalmaznál, ahogy megtanultuk, jó ötlet megérteni az adatállomány természetét. Olvass többet erről a témáról [itt](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)
|
||||
|
||||
[Ez a hasznos cikk](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) bemutatja, hogyan viselkednek különböző klaszterezési algoritmusok különböző adatformák esetén.
|
||||
|
||||
## Feladat
|
||||
|
||||
[Kutatás más vizualizációkról a klaszterezéshez](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "589fa015a5e7d9e67bd629f7d47b53de",
|
||||
"translation_date": "2025-09-05T15:44:51+00:00",
|
||||
"source_file": "5-Clustering/1-Visualize/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Kutatás más vizualizációs módszerekről klaszterezéshez
|
||||
|
||||
## Útmutató
|
||||
|
||||
Ebben a leckében néhány vizualizációs technikával dolgoztál, hogy felkészülj az adatok klaszterezés előtti ábrázolására. Különösen a szórásdiagramok hasznosak az objektumcsoportok megtalálásához. Kutass különböző módszereket és könyvtárakat szórásdiagramok készítéséhez, és dokumentáld a munkádat egy jegyzetfüzetben. Használhatod az ebben a leckében szereplő adatokat, más leckék adatait, vagy saját magad által beszerzett adatokat (kérlek, tüntesd fel az adat forrását a jegyzetfüzetben). Ábrázolj néhány adatot szórásdiagramok segítségével, és magyarázd el, mit fedeztél fel.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------- | ----------------------------------- |
|
||||
| | Egy jegyzetfüzet öt jól dokumentált szórásdiagrammal | Egy jegyzetfüzet kevesebb mint öt szórásdiagrammal, kevésbé jól dokumentálva | Hiányos jegyzetfüzet kerül bemutatásra |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget az ebből a fordításból eredő félreértésekért vagy téves értelmezésekért.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T15:45:14+00:00",
|
||||
"source_file": "5-Clustering/1-Visualize/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,261 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "7cdd17338d9bbd7e2171c2cd462eb081",
|
||||
"translation_date": "2025-09-05T15:45:56+00:00",
|
||||
"source_file": "5-Clustering/2-K-Means/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# K-Means klaszterezés
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
Ebben a leckében megtanulod, hogyan hozz létre klasztereket a Scikit-learn és az előzőekben importált nigériai zenei adatállomány segítségével. Áttekintjük a K-Means alapjait a klaszterezéshez. Ne feledd, ahogy az előző leckében tanultad, számos módja van a klaszterekkel való munkának, és az alkalmazott módszer az adataidtól függ. Kipróbáljuk a K-Means-t, mivel ez a leggyakoribb klaszterezési technika. Kezdjük!
|
||||
|
||||
Fogalmak, amelyeket megismerhetsz:
|
||||
|
||||
- Silhouette pontszám
|
||||
- Könyökmódszer
|
||||
- Inertia
|
||||
- Variancia
|
||||
|
||||
## Bevezetés
|
||||
|
||||
A [K-Means klaszterezés](https://wikipedia.org/wiki/K-means_clustering) a jelfeldolgozás területéről származó módszer. Arra használják, hogy az adatokat 'k' klaszterekbe osszák és csoportosítsák megfigyelések sorozata alapján. Minden megfigyelés arra törekszik, hogy az adott adatpontot a legközelebbi 'átlaghoz', vagyis egy klaszter középpontjához csoportosítsa.
|
||||
|
||||
A klaszterek [Voronoi diagramokként](https://wikipedia.org/wiki/Voronoi_diagram) is megjeleníthetők, amelyek tartalmaznak egy pontot (vagy 'magot') és annak megfelelő régióját.
|
||||
|
||||

|
||||
|
||||
> Infografika: [Jen Looper](https://twitter.com/jenlooper)
|
||||
|
||||
A K-Means klaszterezési folyamat [három lépésben zajlik](https://scikit-learn.org/stable/modules/clustering.html#k-means):
|
||||
|
||||
1. Az algoritmus kiválasztja az adatállományból k számú középpontot mintavételezéssel. Ezután ismétlődően:
|
||||
1. Minden mintát hozzárendel a legközelebbi centroidhoz.
|
||||
2. Új centroidokat hoz létre az előző centroidokhoz rendelt minták átlagértéke alapján.
|
||||
3. Ezután kiszámítja az új és régi centroidok közötti különbséget, és addig ismétli, amíg a centroidok stabilizálódnak.
|
||||
|
||||
A K-Means használatának egyik hátránya, hogy meg kell határoznod 'k'-t, azaz a centroidok számát. Szerencsére a 'könyökmódszer' segít egy jó kiindulási érték becslésében 'k'-hoz. Mindjárt kipróbáljuk.
|
||||
|
||||
## Előfeltétel
|
||||
|
||||
Ebben a lecke [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) fájljában fogsz dolgozni, amely tartalmazza az előző leckében végzett adatimportálást és előzetes tisztítást.
|
||||
|
||||
## Gyakorlat - előkészítés
|
||||
|
||||
Kezdd azzal, hogy újra megnézed a dalok adatait.
|
||||
|
||||
1. Hozz létre egy boxplotot, és hívd meg a `boxplot()` függvényt minden oszlopra:
|
||||
|
||||
```python
|
||||
plt.figure(figsize=(20,20), dpi=200)
|
||||
|
||||
plt.subplot(4,3,1)
|
||||
sns.boxplot(x = 'popularity', data = df)
|
||||
|
||||
plt.subplot(4,3,2)
|
||||
sns.boxplot(x = 'acousticness', data = df)
|
||||
|
||||
plt.subplot(4,3,3)
|
||||
sns.boxplot(x = 'energy', data = df)
|
||||
|
||||
plt.subplot(4,3,4)
|
||||
sns.boxplot(x = 'instrumentalness', data = df)
|
||||
|
||||
plt.subplot(4,3,5)
|
||||
sns.boxplot(x = 'liveness', data = df)
|
||||
|
||||
plt.subplot(4,3,6)
|
||||
sns.boxplot(x = 'loudness', data = df)
|
||||
|
||||
plt.subplot(4,3,7)
|
||||
sns.boxplot(x = 'speechiness', data = df)
|
||||
|
||||
plt.subplot(4,3,8)
|
||||
sns.boxplot(x = 'tempo', data = df)
|
||||
|
||||
plt.subplot(4,3,9)
|
||||
sns.boxplot(x = 'time_signature', data = df)
|
||||
|
||||
plt.subplot(4,3,10)
|
||||
sns.boxplot(x = 'danceability', data = df)
|
||||
|
||||
plt.subplot(4,3,11)
|
||||
sns.boxplot(x = 'length', data = df)
|
||||
|
||||
plt.subplot(4,3,12)
|
||||
sns.boxplot(x = 'release_date', data = df)
|
||||
```
|
||||
|
||||
Ez az adat kissé zajos: az egyes oszlopok boxplotjait megfigyelve láthatod a kiugró értékeket.
|
||||
|
||||

|
||||
|
||||
Az adatállományt átnézve eltávolíthatnád ezeket a kiugró értékeket, de ez az adatokat eléggé minimalizálná.
|
||||
|
||||
1. Egyelőre válaszd ki, mely oszlopokat fogod használni a klaszterezési gyakorlatban. Válassz olyanokat, amelyek hasonló tartományokkal rendelkeznek, és kódold az `artist_top_genre` oszlopot numerikus adatként:
|
||||
|
||||
```python
|
||||
from sklearn.preprocessing import LabelEncoder
|
||||
le = LabelEncoder()
|
||||
|
||||
X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')]
|
||||
|
||||
y = df['artist_top_genre']
|
||||
|
||||
X['artist_top_genre'] = le.fit_transform(X['artist_top_genre'])
|
||||
|
||||
y = le.transform(y)
|
||||
```
|
||||
|
||||
1. Most meg kell határoznod, hány klasztert célozz meg. Tudod, hogy az adatállományból 3 zenei műfajt választottunk ki, így próbáljuk meg a 3-at:
|
||||
|
||||
```python
|
||||
from sklearn.cluster import KMeans
|
||||
|
||||
nclusters = 3
|
||||
seed = 0
|
||||
|
||||
km = KMeans(n_clusters=nclusters, random_state=seed)
|
||||
km.fit(X)
|
||||
|
||||
# Predict the cluster for each data point
|
||||
|
||||
y_cluster_kmeans = km.predict(X)
|
||||
y_cluster_kmeans
|
||||
```
|
||||
|
||||
Egy tömböt látsz, amely az adatkeret minden sorára előrejelzett klasztereket (0, 1 vagy 2) tartalmaz.
|
||||
|
||||
1. Használd ezt a tömböt egy 'silhouette pontszám' kiszámításához:
|
||||
|
||||
```python
|
||||
from sklearn import metrics
|
||||
score = metrics.silhouette_score(X, y_cluster_kmeans)
|
||||
score
|
||||
```
|
||||
|
||||
## Silhouette pontszám
|
||||
|
||||
Keress egy silhouette pontszámot, amely közelebb van az 1-hez. Ez a pontszám -1 és 1 között változik, és ha a pontszám 1, akkor a klaszter sűrű és jól elkülönül a többi klasztertől. A 0-hoz közeli érték átfedő klasztereket jelöl, ahol a minták nagyon közel vannak a szomszédos klaszterek döntési határához. [(Forrás)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam)
|
||||
|
||||
A pontszámunk **.53**, tehát középen van. Ez azt jelzi, hogy az adataink nem különösebben alkalmasak erre a klaszterezési típusra, de folytassuk.
|
||||
|
||||
### Gyakorlat - modell építése
|
||||
|
||||
1. Importáld a `KMeans`-t, és kezdj bele a klaszterezési folyamatba.
|
||||
|
||||
```python
|
||||
from sklearn.cluster import KMeans
|
||||
wcss = []
|
||||
|
||||
for i in range(1, 11):
|
||||
kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42)
|
||||
kmeans.fit(X)
|
||||
wcss.append(kmeans.inertia_)
|
||||
|
||||
```
|
||||
|
||||
Néhány részlet magyarázatra szorul.
|
||||
|
||||
> 🎓 range: Ezek a klaszterezési folyamat iterációi.
|
||||
|
||||
> 🎓 random_state: "Meghatározza a véletlenszám-generálást a centroid inicializálásához." [Forrás](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans)
|
||||
|
||||
> 🎓 WCSS: "a klaszteren belüli négyzetes összeg" méri az összes pont átlagos négyzetes távolságát a klaszter centroidjától. [Forrás](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce).
|
||||
|
||||
> 🎓 Inertia: A K-Means algoritmusok arra törekednek, hogy olyan centroidokat válasszanak, amelyek minimalizálják az 'inertia'-t, "a klaszterek belső koherenciájának mértékét." [Forrás](https://scikit-learn.org/stable/modules/clustering.html). Az értéket minden iteráció során hozzáadjuk a wcss változóhoz.
|
||||
|
||||
> 🎓 k-means++: A [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) használatával alkalmazhatod a 'k-means++' optimalizálást, amely "általában egymástól távoli centroidokat inicializál, valószínűleg jobb eredményeket eredményezve, mint a véletlenszerű inicializálás."
|
||||
|
||||
### Könyökmódszer
|
||||
|
||||
Korábban feltételezted, hogy mivel 3 zenei műfajt céloztál meg, 3 klasztert kell választanod. De valóban így van?
|
||||
|
||||
1. Használd a 'könyökmódszert', hogy megbizonyosodj róla.
|
||||
|
||||
```python
|
||||
plt.figure(figsize=(10,5))
|
||||
sns.lineplot(x=range(1, 11), y=wcss, marker='o', color='red')
|
||||
plt.title('Elbow')
|
||||
plt.xlabel('Number of clusters')
|
||||
plt.ylabel('WCSS')
|
||||
plt.show()
|
||||
```
|
||||
|
||||
Használd a korábbi lépésben létrehozott `wcss` változót, hogy készíts egy diagramot, amely megmutatja, hol van a 'kanyar' a könyökben, ami a klaszterek optimális számát jelzi. Talán tényleg **3**!
|
||||
|
||||

|
||||
|
||||
## Gyakorlat - klaszterek megjelenítése
|
||||
|
||||
1. Próbáld újra a folyamatot, ezúttal három klasztert beállítva, és jelenítsd meg a klasztereket szórásdiagramként:
|
||||
|
||||
```python
|
||||
from sklearn.cluster import KMeans
|
||||
kmeans = KMeans(n_clusters = 3)
|
||||
kmeans.fit(X)
|
||||
labels = kmeans.predict(X)
|
||||
plt.scatter(df['popularity'],df['danceability'],c = labels)
|
||||
plt.xlabel('popularity')
|
||||
plt.ylabel('danceability')
|
||||
plt.show()
|
||||
```
|
||||
|
||||
1. Ellenőrizd a modell pontosságát:
|
||||
|
||||
```python
|
||||
labels = kmeans.labels_
|
||||
|
||||
correct_labels = sum(y == labels)
|
||||
|
||||
print("Result: %d out of %d samples were correctly labeled." % (correct_labels, y.size))
|
||||
|
||||
print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size)))
|
||||
```
|
||||
|
||||
Ennek a modellnek a pontossága nem túl jó, és a klaszterek alakja ad egy tippet, hogy miért.
|
||||
|
||||

|
||||
|
||||
Ezek az adatok túl kiegyensúlyozatlanok, túl kevéssé korreláltak, és az oszlopértékek között túl nagy a variancia ahhoz, hogy jól klaszterezhetők legyenek. Valójában az általunk meghatározott három műfajkategória valószínűleg erősen befolyásolja vagy torzítja a kialakuló klasztereket. Ez egy tanulási folyamat volt!
|
||||
|
||||
A Scikit-learn dokumentációjában láthatod, hogy egy ilyen modell, ahol a klaszterek nem nagyon jól elkülönültek, 'variancia' problémával küzd:
|
||||
|
||||

|
||||
> Infografika: Scikit-learn
|
||||
|
||||
## Variancia
|
||||
|
||||
A variancia úgy definiálható, mint "az átlagtól való négyzetes eltérések átlaga" [(Forrás)](https://www.mathsisfun.com/data/standard-deviation.html). Ebben a klaszterezési problémában arra utal, hogy az adatállomány számai hajlamosak túlzottan eltérni az átlagtól.
|
||||
|
||||
✅ Ez egy remek pillanat arra, hogy átgondold, milyen módokon javíthatnád ezt a problémát. Finomítsd az adatokat? Használj más oszlopokat? Próbálj ki egy másik algoritmust? Tipp: Próbáld meg [normalizálni az adatokat](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) és tesztelj más oszlopokat.
|
||||
|
||||
> Próbáld ki ezt a '[variancia kalkulátort](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)', hogy jobban megértsd a fogalmat.
|
||||
|
||||
---
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
Tölts el egy kis időt ezzel a notebookkal, és finomítsd a paramétereket. Javíthatod-e a modell pontosságát az adatok további tisztításával (például a kiugró értékek eltávolításával)? Használhatsz súlyokat, hogy bizonyos adatmintáknak nagyobb súlyt adj. Mit tehetsz még a jobb klaszterek létrehozása érdekében?
|
||||
|
||||
Tipp: Próbáld meg skálázni az adatokat. A notebookban van kommentált kód, amely hozzáadja a standard skálázást, hogy az adatállomány oszlopai jobban hasonlítsanak egymásra tartomány szempontjából. Meg fogod látni, hogy bár a silhouette pontszám csökken, a könyök grafikon 'kanyarja' kisimul. Ez azért van, mert az adatok skálázatlanul hagyása lehetővé teszi, hogy a kisebb varianciájú adatok nagyobb súlyt kapjanak. Olvass többet erről a problémáról [itt](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226).
|
||||
|
||||
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Nézd meg egy K-Means szimulátort [például ezt](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Ezzel az eszközzel vizualizálhatod a mintapontokat és meghatározhatod a centroidokat. Szerkesztheted az adatok véletlenszerűségét, a klaszterek számát és a centroidok számát. Segít ez abban, hogy jobban megértsd, hogyan csoportosíthatók az adatok?
|
||||
|
||||
Nézd meg [ezt a K-Means segédanyagot](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) a Stanfordtól.
|
||||
|
||||
## Feladat
|
||||
|
||||
[Próbálj ki különböző klaszterezési módszereket](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "b8e17eff34ad1680eba2a5d3cf9ffc41",
|
||||
"translation_date": "2025-09-05T15:47:38+00:00",
|
||||
"source_file": "5-Clustering/2-K-Means/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Próbálj ki különböző klaszterezési módszereket
|
||||
|
||||
## Útmutató
|
||||
|
||||
Ebben a leckében a K-Means klaszterezésről tanultál. Néha a K-Means nem megfelelő az adataidhoz. Készíts egy notebookot, amelyben az itt tanult adatokkal vagy más forrásból származó adatokkal dolgozol (ne felejtsd el megadni a forrást), és mutass be egy másik klaszterezési módszert, amely nem K-Means. Mit tanultál ebből?
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | -------------------------------------------------------------- | ------------------------------------------------------------------- | ---------------------------- |
|
||||
| | Egy notebook kerül bemutatásra jól dokumentált klaszterezési modellel | Egy notebook kerül bemutatásra, de hiányos dokumentációval és/vagy nem teljes | Hiányos munka kerül benyújtásra |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az [Co-op Translator](https://github.com/Azure/co-op-translator) AI fordítási szolgáltatás segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T15:48:00+00:00",
|
||||
"source_file": "5-Clustering/2-K-Means/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,42 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "b28a3a4911584062772c537b653ebbc7",
|
||||
"translation_date": "2025-09-05T15:39:21+00:00",
|
||||
"source_file": "5-Clustering/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Gépi tanulási klaszterezési modellek
|
||||
|
||||
A klaszterezés egy gépi tanulási feladat, amelynek célja, hogy megtalálja az egymáshoz hasonló objektumokat, és ezeket csoportokba, úgynevezett klaszterekbe rendezze. Ami megkülönbözteti a klaszterezést a gépi tanulás más megközelítéseitől, az az, hogy a folyamat automatikusan történik; valójában mondhatjuk, hogy ez az ellenkezője a felügyelt tanulásnak.
|
||||
|
||||
## Regionális téma: klaszterezési modellek a nigériai közönség zenei ízléséhez 🎧
|
||||
|
||||
Nigéria sokszínű közönsége sokféle zenei ízléssel rendelkezik. A Spotify-ról gyűjtött adatok felhasználásával (az [ebben a cikkben](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421) inspirálódva) nézzük meg néhány Nigériában népszerű zenét. Ez az adatállomány tartalmaz információkat különböző dalok "táncolhatósági" pontszámáról, "akusztikusságáról", hangosságáról, "beszédességéről", népszerűségéről és energiájáról. Érdekes lesz mintázatokat felfedezni ezekben az adatokban!
|
||||
|
||||

|
||||
|
||||
> Fotó: <a href="https://unsplash.com/@marcelalaskoski?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Marcela Laskoski</a> az <a href="https://unsplash.com/s/photos/nigerian-music?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a> oldalán
|
||||
|
||||
Ebben a leckesorozatban új módszereket fedezhetsz fel az adatok elemzésére klaszterezési technikák segítségével. A klaszterezés különösen hasznos, ha az adatállományod nem tartalmaz címkéket. Ha vannak címkék, akkor az előző leckékben tanult osztályozási technikák hasznosabbak lehetnek. De ha címkézetlen adatokat szeretnél csoportosítani, a klaszterezés nagyszerű módja a mintázatok felfedezésének.
|
||||
|
||||
> Hasznos alacsony kódú eszközök állnak rendelkezésre, amelyek segítenek a klaszterezési modellekkel való munkában. Próbáld ki az [Azure ML-t erre a feladatra](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)
|
||||
|
||||
## Leckék
|
||||
|
||||
1. [Bevezetés a klaszterezésbe](1-Visualize/README.md)
|
||||
2. [K-Means klaszterezés](2-K-Means/README.md)
|
||||
|
||||
## Köszönetnyilvánítás
|
||||
|
||||
Ezeket a leckéket 🎶-vel írta [Jen Looper](https://www.twitter.com/jenlooper), hasznos véleményekkel [Rishit Dagli](https://rishit_dagli) és [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) részéről.
|
||||
|
||||
A [Nigériai dalok](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) adatállományt a Kaggle-ről származtatták, a Spotify-ról gyűjtve.
|
||||
|
||||
Hasznos K-Means példák, amelyek segítettek a lecke elkészítésében: ez az [iris elemzés](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), ez a [bevezető notebook](https://www.kaggle.com/prashant111/k-means-clustering-with-python), és ez a [hipotetikus NGO példa](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering).
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,179 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "1c2ec40cf55c98a028a359c27ef7e45a",
|
||||
"translation_date": "2025-09-05T16:59:57+00:00",
|
||||
"source_file": "6-NLP/1-Introduction-to-NLP/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Bevezetés a természetes nyelvfeldolgozásba
|
||||
|
||||
Ez a lecke a *természetes nyelvfeldolgozás* rövid történetét és fontos fogalmait tárgyalja, amely a *számítógépes nyelvészet* egyik részterülete.
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Bevezetés
|
||||
|
||||
Az NLP, ahogy általában nevezik, az egyik legismertebb terület, ahol a gépi tanulást alkalmazták és használták a gyártási szoftverekben.
|
||||
|
||||
✅ Tudsz olyan szoftverre gondolni, amit naponta használsz, és valószínűleg van benne valamilyen NLP? Mi a helyzet a szövegszerkesztő programokkal vagy a rendszeresen használt mobilalkalmazásokkal?
|
||||
|
||||
A következőkről fogsz tanulni:
|
||||
|
||||
- **A nyelvek fogalma**. Hogyan fejlődtek a nyelvek, és mik voltak a főbb kutatási területek.
|
||||
- **Definíciók és fogalmak**. Megismered a szöveg számítógépes feldolgozásának definícióit és fogalmait, beleértve a szintaktikai elemzést, a nyelvtant, valamint a főnevek és igék azonosítását. Ebben a leckében lesznek kódolási feladatok, és számos fontos fogalmat mutatunk be, amelyeket a következő leckékben kódolni is megtanulsz.
|
||||
|
||||
## Számítógépes nyelvészet
|
||||
|
||||
A számítógépes nyelvészet egy évtizedek óta tartó kutatási és fejlesztési terület, amely azt vizsgálja, hogyan tudnak a számítógépek nyelvekkel dolgozni, megérteni, fordítani és kommunikálni. A természetes nyelvfeldolgozás (NLP) egy kapcsolódó terület, amely arra összpontosít, hogy a számítógépek hogyan tudják feldolgozni a "természetes", azaz emberi nyelveket.
|
||||
|
||||
### Példa - telefonos diktálás
|
||||
|
||||
Ha valaha diktáltál a telefonodnak gépelés helyett, vagy kérdést tettél fel egy virtuális asszisztensnek, akkor a beszédedet szöveges formára alakították, majd feldolgozták vagy *szintaktikailag elemezték* az általad használt nyelvet. Az észlelt kulcsszavakat ezután olyan formátumba dolgozták fel, amelyet a telefon vagy az asszisztens megértett és végrehajtott.
|
||||
|
||||

|
||||
> A valódi nyelvi megértés nehéz! Kép: [Jen Looper](https://twitter.com/jenlooper)
|
||||
|
||||
### Hogyan lehetséges ez a technológia?
|
||||
|
||||
Ez azért lehetséges, mert valaki írt egy számítógépes programot, hogy ezt megvalósítsa. Néhány évtizeddel ezelőtt néhány sci-fi író azt jósolta, hogy az emberek főként beszélni fognak a számítógépeikhez, és a számítógépek mindig pontosan megértik majd, mit akarnak mondani. Sajnos kiderült, hogy ez a probléma nehezebb, mint sokan gondolták, és bár ma már sokkal jobban értjük, jelentős kihívásokkal kell szembenézni a mondatok jelentésének "tökéletes" természetes nyelvfeldolgozása során. Ez különösen nehéz, ha a mondatokban a humor vagy az érzelmek, például az irónia felismeréséről van szó.
|
||||
|
||||
Ezen a ponton talán eszedbe jutnak az iskolai órák, ahol a tanár a mondatok nyelvtani részeit tárgyalta. Egyes országokban a diákok külön tantárgyként tanulják a nyelvtant és a nyelvészetet, de sok helyen ezek a témák a nyelvtanulás részeként szerepelnek: akár az első nyelv tanulásakor az általános iskolában (olvasás és írás tanulása), akár egy második nyelv tanulásakor a középiskolában. Ne aggódj, ha nem vagy szakértő a főnevek és igék vagy a határozószók és melléknevek megkülönböztetésében!
|
||||
|
||||
Ha nehézséget okoz a *jelen egyszerű* és a *jelen folyamatos* közötti különbség, nem vagy egyedül. Ez sok ember számára kihívást jelent, még egy nyelv anyanyelvi beszélőinek is. A jó hír az, hogy a számítógépek nagyon jók a formális szabályok alkalmazásában, és meg fogod tanulni, hogyan írj kódot, amely egy mondatot olyan jól tud *szintaktikailag elemezni*, mint egy ember. A nagyobb kihívás, amelyet később megvizsgálsz, a mondat *jelentésének* és *érzelmi töltetének* megértése.
|
||||
|
||||
## Előfeltételek
|
||||
|
||||
Ehhez a leckéhez a fő előfeltétel az, hogy képes legyél elolvasni és megérteni a lecke nyelvét. Nincsenek matematikai problémák vagy megoldandó egyenletek. Bár az eredeti szerző angolul írta ezt a leckét, más nyelvekre is lefordították, így lehet, hogy fordítást olvasol. Vannak példák, ahol különböző nyelveket használnak (a különböző nyelvtani szabályok összehasonlítására). Ezek *nem* kerülnek fordításra, de a magyarázó szöveg igen, így a jelentésnek érthetőnek kell lennie.
|
||||
|
||||
A kódolási feladatokhoz Python-t fogsz használni, és a példák Python 3.8-at használnak.
|
||||
|
||||
Ebben a szakaszban szükséged lesz:
|
||||
|
||||
- **Python 3 megértése**. A Python 3 programozási nyelv megértése, ez a lecke bemeneti adatokat, ciklusokat, fájlolvasást és tömböket használ.
|
||||
- **Visual Studio Code + kiegészítő**. A Visual Studio Code-ot és annak Python kiegészítőjét fogjuk használni. Használhatsz más Python IDE-t is.
|
||||
- **TextBlob**. A [TextBlob](https://github.com/sloria/TextBlob) egy egyszerűsített szövegfeldolgozó könyvtár Pythonhoz. Kövesd a TextBlob weboldalán található utasításokat a telepítéshez (telepítsd a korpuszokat is, ahogy az alábbiakban látható):
|
||||
|
||||
```bash
|
||||
pip install -U textblob
|
||||
python -m textblob.download_corpora
|
||||
```
|
||||
|
||||
> 💡 Tipp: A Python közvetlenül futtatható a VS Code környezetekben. További információért nézd meg a [dokumentációt](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott).
|
||||
|
||||
## Beszélgetés gépekkel
|
||||
|
||||
Az emberi nyelv számítógépes megértésének története évtizedekre nyúlik vissza, és az egyik legkorábbi tudós, aki a természetes nyelvfeldolgozást vizsgálta, *Alan Turing* volt.
|
||||
|
||||
### A 'Turing-teszt'
|
||||
|
||||
Amikor Turing az 1950-es években a *mesterséges intelligenciát* kutatta, azt vizsgálta, hogy egy beszélgetési tesztet lehetne-e adni egy embernek és egy számítógépnek (gépelés útján), ahol a beszélgetésben részt vevő ember nem biztos abban, hogy egy másik emberrel vagy egy számítógéppel beszélget.
|
||||
|
||||
Ha egy bizonyos hosszúságú beszélgetés után az ember nem tudja megállapítani, hogy a válaszok számítógéptől származnak-e vagy sem, akkor mondható-e, hogy a számítógép *gondolkodik*?
|
||||
|
||||
### Az inspiráció - 'az utánzás játéka'
|
||||
|
||||
Az ötlet egy *Az utánzás játéka* nevű társasjátékból származott, ahol egy kérdező egyedül van egy szobában, és meg kell határoznia, hogy a másik szobában lévő két ember közül ki férfi és ki nő. A kérdező üzeneteket küldhet, és olyan kérdéseket kell kitalálnia, amelyek írásos válaszai felfedik a rejtélyes személy nemét. Természetesen a másik szobában lévő játékosok megpróbálják megtéveszteni vagy összezavarni a kérdezőt azáltal, hogy olyan módon válaszolnak, amely félrevezető vagy zavaró, miközben úgy tűnik, hogy őszintén válaszolnak.
|
||||
|
||||
### Eliza fejlesztése
|
||||
|
||||
Az 1960-as években egy MIT tudós, *Joseph Weizenbaum* kifejlesztette [*Eliza*](https://wikipedia.org/wiki/ELIZA) nevű számítógépes "terapeutát", amely kérdéseket tett fel az embernek, és úgy tűnt, hogy megérti a válaszait. Azonban, bár Eliza képes volt egy mondatot szintaktikailag elemezni, bizonyos nyelvtani szerkezeteket és kulcsszavakat azonosítani, hogy ésszerű választ adjon, nem mondható, hogy *megértette* a mondatot. Ha Eliza egy olyan mondatot kapott, amely a "**Én vagyok** <u>szomorú</u>" formát követte, akkor átrendezhette és helyettesíthette a mondat szavait, hogy a válasz "Mióta **vagy** <u>szomorú</u>" legyen.
|
||||
|
||||
Ez azt a benyomást keltette, hogy Eliza megértette az állítást, és egy következő kérdést tett fel, míg valójában csak megváltoztatta az igeidőt és hozzáadott néhány szót. Ha Eliza nem tudott azonosítani egy kulcsszót, amelyre válasza volt, akkor véletlenszerű választ adott, amely sok különböző állításra alkalmazható lehetett. Eliza könnyen becsapható volt, például ha egy felhasználó azt írta, "**Te vagy** egy <u>bicikli</u>", akkor azt válaszolhatta, "Mióta **vagyok** egy <u>bicikli</u>?", ahelyett, hogy egy ésszerűbb választ adott volna.
|
||||
|
||||
[](https://youtu.be/RMK9AphfLco "Beszélgetés Elizával")
|
||||
|
||||
> 🎥 Kattints a fenti képre az eredeti ELIZA programról szóló videóért
|
||||
|
||||
> Megjegyzés: Az eredeti leírást [Elizáról](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract), amelyet 1966-ban publikáltak, elolvashatod, ha van ACM fiókod. Alternatívaként olvass Elizáról a [wikipédián](https://wikipedia.org/wiki/ELIZA).
|
||||
|
||||
## Gyakorlat - egy alapvető beszélgető bot kódolása
|
||||
|
||||
Egy beszélgető bot, mint Eliza, egy olyan program, amely felhasználói bemenetet kér, és úgy tűnik, hogy intelligensen válaszol. Elizával ellentétben a botunknak nem lesz több szabálya, amelyek intelligens beszélgetés látszatát keltik. Ehelyett a botunknak csak egy képessége lesz: a beszélgetés folytatása véletlenszerű válaszokkal, amelyek szinte bármilyen triviális beszélgetésben működhetnek.
|
||||
|
||||
### A terv
|
||||
|
||||
A beszélgető bot építésének lépései:
|
||||
|
||||
1. Nyomtass utasításokat, amelyek tanácsot adnak a felhasználónak, hogyan lépjen kapcsolatba a bottal
|
||||
2. Indíts egy ciklust
|
||||
1. Fogadj felhasználói bemenetet
|
||||
2. Ha a felhasználó kilépést kér, lépj ki
|
||||
3. Dolgozd fel a felhasználói bemenetet, és határozd meg a választ (ebben az esetben a válasz egy véletlenszerű választás a lehetséges általános válaszok listájából)
|
||||
4. Nyomtasd ki a választ
|
||||
3. Térj vissza a 2. lépéshez
|
||||
|
||||
### A bot építése
|
||||
|
||||
Hozzuk létre a botot! Kezdjük néhány kifejezés definiálásával.
|
||||
|
||||
1. Hozd létre ezt a botot Pythonban a következő véletlenszerű válaszokkal:
|
||||
|
||||
```python
|
||||
random_responses = ["That is quite interesting, please tell me more.",
|
||||
"I see. Do go on.",
|
||||
"Why do you say that?",
|
||||
"Funny weather we've been having, isn't it?",
|
||||
"Let's change the subject.",
|
||||
"Did you catch the game last night?"]
|
||||
```
|
||||
|
||||
Íme néhány minta kimenet, amely segíthet (a felhasználói bemenet a `>`-tal kezdődő sorokon van):
|
||||
|
||||
```output
|
||||
Hello, I am Marvin, the simple robot.
|
||||
You can end this conversation at any time by typing 'bye'
|
||||
After typing each answer, press 'enter'
|
||||
How are you today?
|
||||
> I am good thanks
|
||||
That is quite interesting, please tell me more.
|
||||
> today I went for a walk
|
||||
Did you catch the game last night?
|
||||
> I did, but my team lost
|
||||
Funny weather we've been having, isn't it?
|
||||
> yes but I hope next week is better
|
||||
Let's change the subject.
|
||||
> ok, lets talk about music
|
||||
Why do you say that?
|
||||
> because I like music!
|
||||
Why do you say that?
|
||||
> bye
|
||||
It was nice talking to you, goodbye!
|
||||
```
|
||||
|
||||
Egy lehetséges megoldás a feladatra [itt található](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py)
|
||||
|
||||
✅ Állj meg és gondolkodj el
|
||||
|
||||
1. Szerinted a véletlenszerű válaszok "becsapnák" valakit, hogy azt gondolja, a bot valóban megértette őt?
|
||||
2. Milyen funkciókra lenne szüksége a botnak, hogy hatékonyabb legyen?
|
||||
3. Ha egy bot valóban "megértené" egy mondat jelentését, szüksége lenne arra, hogy "emlékezzen" a beszélgetés korábbi mondatai jelentésére is?
|
||||
|
||||
---
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
Válassz egyet a fenti "állj meg és gondolkodj el" elemek közül, és próbáld meg megvalósítani kódban, vagy írj egy megoldást papíron álpseudokóddal.
|
||||
|
||||
A következő leckében számos más megközelítést fogsz megismerni a természetes nyelv szintaktikai elemzésére és gépi tanulásra.
|
||||
|
||||
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Tekintsd meg az alábbi hivatkozásokat további olvasási lehetőségként.
|
||||
|
||||
### Hivatkozások
|
||||
|
||||
1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = <https://plato.stanford.edu/archives/spr2020/entries/computational-linguistics/>.
|
||||
2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010.
|
||||
|
||||
## Feladat
|
||||
|
||||
[Keress egy botot](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "1d7583e8046dacbb0c056d5ba0a71b16",
|
||||
"translation_date": "2025-09-05T17:01:57+00:00",
|
||||
"source_file": "6-NLP/1-Introduction-to-NLP/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Keresd meg a botot
|
||||
|
||||
## Útmutató
|
||||
|
||||
Botok mindenhol ott vannak. A feladatod: találj egyet, és fogadd örökbe! Megtalálhatod őket weboldalakon, banki alkalmazásokban, vagy telefonon, például amikor pénzügyi szolgáltatókat hívsz tanácsért vagy számlainformációért. Elemezd a botot, és nézd meg, össze tudod-e zavarni. Ha sikerül összezavarni, szerinted miért történt ez? Írj egy rövid beszámolót az élményeidről.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------ | --------------------- |
|
||||
| | Egy teljes oldalas beszámoló készült, amely bemutatja a feltételezett bot architektúráját és az élményeket | A beszámoló hiányos vagy nem alapos | Nem készült beszámoló |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális, emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,228 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "5f3cb462e3122e1afe7ab0050ccf2bd3",
|
||||
"translation_date": "2025-09-05T16:50:29+00:00",
|
||||
"source_file": "6-NLP/2-Tasks/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Gyakori természetes nyelvfeldolgozási feladatok és technikák
|
||||
|
||||
A legtöbb *természetes nyelvfeldolgozási* feladat esetében a feldolgozandó szöveget fel kell bontani, meg kell vizsgálni, és az eredményeket el kell tárolni vagy össze kell vetni szabályokkal és adatbázisokkal. Ezek a feladatok lehetővé teszik a programozó számára, hogy a szöveg _jelentését_, _szándékát_ vagy csak a kifejezések és szavak _gyakoriságát_ megértse.
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
Fedezzük fel a szövegfeldolgozásban használt gyakori technikákat. Ezek a technikák gépi tanulással kombinálva segítenek hatékonyan elemezni nagy mennyiségű szöveget. Mielőtt gépi tanulást alkalmaznánk ezekre a feladatokra, először értsük meg azokat a problémákat, amelyekkel egy NLP szakember szembesül.
|
||||
|
||||
## NLP-hez kapcsolódó feladatok
|
||||
|
||||
Számos módja van annak, hogy elemezzük a szöveget, amelyen dolgozunk. Vannak feladatok, amelyeket elvégezhetünk, és ezek révén megérthetjük a szöveget, valamint következtetéseket vonhatunk le. Ezeket a feladatokat általában egy meghatározott sorrendben hajtjuk végre.
|
||||
|
||||
### Tokenizáció
|
||||
|
||||
Valószínűleg az első dolog, amit a legtöbb NLP algoritmusnak el kell végeznie, az a szöveg tokenekre vagy szavakra bontása. Bár ez egyszerűnek tűnik, a különböző nyelvek írásjelei és mondathatárolói miatt bonyolult lehet. Különböző módszereket kell alkalmazni a határok meghatározásához.
|
||||
|
||||

|
||||
> Egy mondat tokenizálása a **Büszkeség és balítélet** című műből. Infografika: [Jen Looper](https://twitter.com/jenlooper)
|
||||
|
||||
### Beágyazások
|
||||
|
||||
[A szavak beágyazása](https://wikipedia.org/wiki/Word_embedding) egy módszer arra, hogy a szövegadatokat numerikus formába alakítsuk. A beágyazásokat úgy végezzük, hogy a hasonló jelentésű vagy együtt használt szavak csoportosuljanak.
|
||||
|
||||

|
||||
> "A legnagyobb tisztelettel vagyok az idegeid iránt, ők a régi barátaim." - Szavak beágyazása egy mondatban a **Büszkeség és balítélet** című műből. Infografika: [Jen Looper](https://twitter.com/jenlooper)
|
||||
|
||||
✅ Próbáld ki [ezt az érdekes eszközt](https://projector.tensorflow.org/) a szavak beágyazásának kísérletezéséhez. Egy szó kiválasztásával hasonló szavak csoportjait láthatod: például a 'játék' csoportosul a 'disney', 'lego', 'playstation' és 'konzol' szavakkal.
|
||||
|
||||
### Elemzés és szófaji címkézés
|
||||
|
||||
Minden tokenizált szót szófajként lehet címkézni - például főnév, ige vagy melléknév. A mondat `a gyors vörös róka átugrott a lusta barna kutya felett` szófaji címkézése lehet például róka = főnév, ugrott = ige.
|
||||
|
||||

|
||||
|
||||
> Egy mondat elemzése a **Büszkeség és balítélet** című műből. Infografika: [Jen Looper](https://twitter.com/jenlooper)
|
||||
|
||||
Az elemzés során felismerjük, hogy mely szavak kapcsolódnak egymáshoz egy mondatban - például `a gyors vörös róka ugrott` egy melléknév-főnév-ige sorozat, amely elkülönül a `lusta barna kutya` sorozattól.
|
||||
|
||||
### Szó- és kifejezésgyakoriságok
|
||||
|
||||
Egy nagy szövegtest elemzésekor hasznos lehet egy szótár létrehozása, amely tartalmazza az összes érdekes szót vagy kifejezést, valamint azok előfordulási gyakoriságát. A mondat `a gyors vörös róka átugrott a lusta barna kutya felett` szógyakorisága például 2 a 'a' esetében.
|
||||
|
||||
Nézzünk egy példaszöveget, ahol megszámoljuk a szavak gyakoriságát. Rudyard Kipling verse, A győztesek, tartalmazza a következő versszakot:
|
||||
|
||||
```output
|
||||
What the moral? Who rides may read.
|
||||
When the night is thick and the tracks are blind
|
||||
A friend at a pinch is a friend, indeed,
|
||||
But a fool to wait for the laggard behind.
|
||||
Down to Gehenna or up to the Throne,
|
||||
He travels the fastest who travels alone.
|
||||
```
|
||||
|
||||
Mivel a kifejezésgyakoriság lehet kis- és nagybetűérzékeny, a `egy barát` kifejezés gyakorisága 2, a `a` gyakorisága 6, és a `utazik` gyakorisága 2.
|
||||
|
||||
### N-gramok
|
||||
|
||||
Egy szöveg felosztható meghatározott hosszúságú szósorozatokra: egy szó (unigram), két szó (bigram), három szó (trigram) vagy bármilyen számú szó (n-gram).
|
||||
|
||||
Például `a gyors vörös róka átugrott a lusta barna kutya felett` egy 2-es n-gram értékkel a következő n-gramokat eredményezi:
|
||||
|
||||
1. a gyors
|
||||
2. gyors vörös
|
||||
3. vörös róka
|
||||
4. róka ugrott
|
||||
5. ugrott át
|
||||
6. át a
|
||||
7. a lusta
|
||||
8. lusta barna
|
||||
9. barna kutya
|
||||
|
||||
Könnyebb lehet ezt egy csúszó ablakként elképzelni a mondat felett. Íme egy 3 szavas n-gram példája, ahol az n-gram kiemelve látható:
|
||||
|
||||
1. <u>**a gyors vörös**</u> róka átugrott a lusta barna kutya felett
|
||||
2. a **<u>gyors vörös róka</u>** átugrott a lusta barna kutya felett
|
||||
3. a gyors **<u>vörös róka ugrott</u>** át a lusta barna kutya felett
|
||||
4. a gyors vörös **<u>róka ugrott át</u>** a lusta barna kutya felett
|
||||
5. a gyors vörös róka **<u>ugrott át a</u>** lusta barna kutya felett
|
||||
6. a gyors vörös róka ugrott **<u>át a lusta</u>** barna kutya felett
|
||||
7. a gyors vörös róka ugrott át <u>**a lusta barna**</u> kutya felett
|
||||
8. a gyors vörös róka ugrott át a **<u>lusta barna kutya</u>**
|
||||
|
||||

|
||||
|
||||
> N-gram érték 3: Infografika: [Jen Looper](https://twitter.com/jenlooper)
|
||||
|
||||
### Főnévi kifejezések kinyerése
|
||||
|
||||
A legtöbb mondatban van egy főnév, amely a mondat alanya vagy tárgya. Angol nyelvben gyakran azonosítható az 'a', 'an' vagy 'the' előtag alapján. A mondat alanyának vagy tárgyának azonosítása a 'főnévi kifejezés kinyerésével' gyakori feladat az NLP-ben, amikor a mondat jelentését próbáljuk megérteni.
|
||||
|
||||
✅ A mondatban "Nem tudom megmondani az órát, a helyet, a kinézetet vagy a szavakat, amelyek megalapozták. Túl régen volt. Már benne voltam, mielőtt tudtam volna, hogy elkezdtem." Fel tudod ismerni a főnévi kifejezéseket?
|
||||
|
||||
A mondatban `a gyors vörös róka átugrott a lusta barna kutya felett` 2 főnévi kifejezés van: **gyors vörös róka** és **lusta barna kutya**.
|
||||
|
||||
### Érzelemelemzés
|
||||
|
||||
Egy mondat vagy szöveg elemezhető az érzelmek szempontjából, hogy mennyire *pozitív* vagy *negatív*. Az érzelmeket *polaritás* és *objektivitás/szubjektivitás* alapján mérjük. A polaritás -1.0-tól 1.0-ig terjed (negatívtól pozitívig), az objektivitás pedig 0.0-tól 1.0-ig (legobjektívebbtől legszubjektívebbig).
|
||||
|
||||
✅ Később megtanulod, hogy különböző módokon lehet meghatározni az érzelmeket gépi tanulás segítségével, de az egyik módszer az, hogy egy emberi szakértő által pozitívnak vagy negatívnak kategorizált szavak és kifejezések listáját alkalmazzuk a szövegre, hogy kiszámítsuk a polaritási pontszámot. Látod, hogyan működhet ez bizonyos helyzetekben, és kevésbé jól másokban?
|
||||
|
||||
### Inflekció
|
||||
|
||||
Az inflekció lehetővé teszi, hogy egy szót átalakítsunk egyes vagy többes számú formájába.
|
||||
|
||||
### Lemmatizáció
|
||||
|
||||
A *lemma* egy szó gyökere vagy alapformája, például *repült*, *repülők*, *repülés* esetében a lemma az *repül* ige.
|
||||
|
||||
Hasznos adatbázisok is rendelkezésre állnak az NLP kutatók számára, különösen:
|
||||
|
||||
### WordNet
|
||||
|
||||
[WordNet](https://wordnet.princeton.edu/) egy adatbázis, amely szavakat, szinonimákat, ellentéteket és sok más részletet tartalmaz különböző nyelveken. Rendkívül hasznos fordítások, helyesírás-ellenőrzők vagy bármilyen nyelvi eszköz létrehozásakor.
|
||||
|
||||
## NLP könyvtárak
|
||||
|
||||
Szerencsére nem kell ezeket a technikákat magunknak felépíteni, mivel kiváló Python könyvtárak állnak rendelkezésre, amelyek sokkal hozzáférhetőbbé teszik azokat a fejlesztők számára, akik nem szakosodtak természetes nyelvfeldolgozásra vagy gépi tanulásra. A következő leckékben több példát is bemutatunk ezekre, de itt néhány hasznos példát találsz, amelyek segítenek a következő feladatban.
|
||||
|
||||
### Gyakorlat - `TextBlob` könyvtár használata
|
||||
|
||||
Használjunk egy TextBlob nevű könyvtárat, mivel hasznos API-kat tartalmaz az ilyen típusú feladatok megoldásához. A TextBlob "a [NLTK](https://nltk.org) és a [pattern](https://github.com/clips/pattern) óriási vállain áll, és jól működik mindkettővel." Jelentős mennyiségű gépi tanulás van beépítve az API-jába.
|
||||
|
||||
> Megjegyzés: Egy hasznos [Gyors kezdés](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) útmutató elérhető a TextBlob számára, amelyet tapasztalt Python fejlesztőknek ajánlunk.
|
||||
|
||||
Amikor *főnévi kifejezéseket* próbálunk azonosítani, a TextBlob több lehetőséget kínál az ilyen kifejezések kinyerésére.
|
||||
|
||||
1. Nézd meg a `ConllExtractor`-t.
|
||||
|
||||
```python
|
||||
from textblob import TextBlob
|
||||
from textblob.np_extractors import ConllExtractor
|
||||
# import and create a Conll extractor to use later
|
||||
extractor = ConllExtractor()
|
||||
|
||||
# later when you need a noun phrase extractor:
|
||||
user_input = input("> ")
|
||||
user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified
|
||||
np = user_input_blob.noun_phrases
|
||||
```
|
||||
|
||||
> Mi történik itt? A [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) egy "főnévi kifejezés kinyerő, amely a ConLL-2000 tanulási korpusz alapján képzett chunk parsingot használ." A ConLL-2000 a 2000-es Számítógépes Természetes Nyelv Tanulási Konferencia. Minden évben a konferencia egy workshopot tartott egy nehéz NLP probléma megoldására, és 2000-ben ez a főnévi chunking volt. Egy modellt képeztek a Wall Street Journal alapján, "a 15-18. szakaszokat használva tanulási adatként (211727 token) és a 20. szakaszt tesztadatként (47377 token)". Az alkalmazott eljárásokat [itt](https://www.clips.uantwerpen.be/conll2000/chunking/) és az [eredményeket](https://ifarm.nl/erikt/research/np-chunking.html) megtekintheted.
|
||||
|
||||
### Kihívás - javítsd a botodat NLP segítségével
|
||||
|
||||
Az előző leckében egy nagyon egyszerű kérdés-válasz botot készítettél. Most Marvin-t egy kicsit szimpatikusabbá teszed azáltal, hogy elemzed a bemenetet érzelmek szempontjából, és ennek megfelelő választ adsz. Emellett azonosítanod kell egy `főnévi kifejezést`, és kérdezned kell róla.
|
||||
|
||||
A jobb beszélgető bot létrehozásának lépései:
|
||||
|
||||
1. Nyomtass utasításokat, amelyek tanácsot adnak a felhasználónak, hogyan lépjen kapcsolatba a bottal.
|
||||
2. Indítsd el a ciklust:
|
||||
1. Fogadd el a felhasználói bemenetet.
|
||||
2. Ha a felhasználó kilépést kért, lépj ki.
|
||||
3. Dolgozd fel a felhasználói bemenetet, és határozd meg a megfelelő érzelmi választ.
|
||||
4. Ha főnévi kifejezést észlelsz az érzelemben, tedd többes számba, és kérj további bemenetet a témáról.
|
||||
5. Nyomtass választ.
|
||||
3. Térj vissza a 2. lépéshez.
|
||||
|
||||
Íme a kódrészlet az érzelem meghatározásához a TextBlob segítségével. Figyeld meg, hogy csak négy *érzelmi gradiens* van (ha szeretnéd, lehet több is):
|
||||
|
||||
```python
|
||||
if user_input_blob.polarity <= -0.5:
|
||||
response = "Oh dear, that sounds bad. "
|
||||
elif user_input_blob.polarity <= 0:
|
||||
response = "Hmm, that's not great. "
|
||||
elif user_input_blob.polarity <= 0.5:
|
||||
response = "Well, that sounds positive. "
|
||||
elif user_input_blob.polarity <= 1:
|
||||
response = "Wow, that sounds great. "
|
||||
```
|
||||
|
||||
Íme néhány minta kimenet, amely segíthet (a felhasználói bemenet a > jellel kezdődő sorokon található):
|
||||
|
||||
```output
|
||||
Hello, I am Marvin, the friendly robot.
|
||||
You can end this conversation at any time by typing 'bye'
|
||||
After typing each answer, press 'enter'
|
||||
How are you today?
|
||||
> I am ok
|
||||
Well, that sounds positive. Can you tell me more?
|
||||
> I went for a walk and saw a lovely cat
|
||||
Well, that sounds positive. Can you tell me more about lovely cats?
|
||||
> cats are the best. But I also have a cool dog
|
||||
Wow, that sounds great. Can you tell me more about cool dogs?
|
||||
> I have an old hounddog but he is sick
|
||||
Hmm, that's not great. Can you tell me more about old hounddogs?
|
||||
> bye
|
||||
It was nice talking to you, goodbye!
|
||||
```
|
||||
|
||||
Egy lehetséges megoldás a feladatra [itt található](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py)
|
||||
|
||||
✅ Tudásellenőrzés
|
||||
|
||||
1. Szerinted a szimpatikus válaszok 'becsapnák' valakit, hogy azt higgye, a bot valóban megérti őt?
|
||||
2. A főnévi kifejezés azonosítása hitelesebbé teszi a botot?
|
||||
3. Miért lehet hasznos egy mondatból főnévi kifejezést kinyerni?
|
||||
|
||||
---
|
||||
|
||||
Valósítsd meg a botot az előző tudásellenőrzés alapján, és teszteld egy barátodon. Sikerül becsapnia őket? Tudod hitelesebbé tenni a botodat?
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
Válassz egy feladatot az előző tudásellenőrzésből, és próbáld megvalósítani. Teszteld a botot egy barátodon. Sikerül becsapnia őket? Tudod hitelesebbé tenni a botodat?
|
||||
|
||||
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
A következő néhány leckében többet fogsz tanulni az érzelemelemzésről. Kutass erről az érdekes technikáról olyan cikkekben, mint például ezek a [KDNuggets](https://www.kdnuggets.com/tag/nlp) oldalon.
|
||||
|
||||
## Feladat
|
||||
|
||||
[Bot készítése, amely válaszol](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "2efc4c2aba5ed06c780c05539c492ae3",
|
||||
"translation_date": "2025-09-05T16:52:34+00:00",
|
||||
"source_file": "6-NLP/2-Tasks/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Készíts egy Botot, ami válaszol
|
||||
|
||||
## Útmutató
|
||||
|
||||
Az előző leckékben egy alapvető botot programoztál, amellyel beszélgetni lehet. Ez a bot véletlenszerű válaszokat ad, amíg azt nem mondod, hogy 'viszlát'. Tudnád kevésbé véletlenszerűvé tenni a válaszokat, és beállítani, hogy bizonyos dolgokra, mint például 'miért' vagy 'hogyan', konkrét válaszokat adjon? Gondolkodj el azon, hogyan tehetné a gépi tanulás ezt a munkát kevésbé manuálissá, miközben továbbfejleszted a botodat. Használhatod az NLTK vagy TextBlob könyvtárakat, hogy megkönnyítsd a feladatokat.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | -------------------------------------------- | ----------------------------------------------- | ----------------------- |
|
||||
| | Egy új bot.py fájl van bemutatva és dokumentálva | Egy új bot fájl van bemutatva, de hibákat tartalmaz | Nem került bemutatásra fájl |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "9d2a734deb904caff310d1a999c6bd7a",
|
||||
"translation_date": "2025-09-05T17:05:37+00:00",
|
||||
"source_file": "6-NLP/3-Translation-Sentiment/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Költői szabadság
|
||||
|
||||
## Útmutató
|
||||
|
||||
Ebben a [jegyzetfüzetben](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) több mint 500 Emily Dickinson vers található, amelyeket korábban az Azure szövegelemző szolgáltatásával elemeztek érzelmi szempontból. Használva ezt az adatállományt, elemezd a verseket az órán ismertetett technikák segítségével. Egy vers javasolt érzelmi hangulata megegyezik-e az Azure kifinomultabb szolgáltatásának döntésével? Miért igen vagy miért nem, véleményed szerint? Van-e valami, ami meglep?
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ------------------------------------------------------------------------ | ------------------------------------------------------- | ------------------------ |
|
||||
| | Egy jegyzetfüzet bemutatásra kerül, amelyben egy szerző mintáinak alapos elemzése található | A jegyzetfüzet hiányos vagy nem végez elemzést | Nem kerül bemutatásra jegyzetfüzet |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T17:06:13+00:00",
|
||||
"source_file": "6-NLP/3-Translation-Sentiment/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "81db6ff2cf6e62fbe2340b094bb9509e",
|
||||
"translation_date": "2025-09-05T17:05:59+00:00",
|
||||
"source_file": "6-NLP/3-Translation-Sentiment/solution/R/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
ez egy ideiglenes helyőrző
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,413 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "8d32dadeda93c6fb5c43619854882ab1",
|
||||
"translation_date": "2025-09-05T16:54:12+00:00",
|
||||
"source_file": "6-NLP/4-Hotel-Reviews-1/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Érzelemfelismerés szállodai véleményekkel - adatok feldolgozása
|
||||
|
||||
Ebben a részben az előző leckékben tanult technikákat fogod használni egy nagy adatállomány feltáró elemzéséhez. Miután jól megérted az egyes oszlopok hasznosságát, megtanulod:
|
||||
|
||||
- hogyan távolítsd el a felesleges oszlopokat
|
||||
- hogyan számíts új adatokat a meglévő oszlopok alapján
|
||||
- hogyan mentsd el az eredményül kapott adatállományt a végső kihívás során történő felhasználásra
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
### Bevezetés
|
||||
|
||||
Eddig megtanultad, hogy a szöveges adatok jelentősen eltérnek a numerikus adatoktól. Ha az adatokat ember írta vagy mondta, elemezhetők minták, gyakoriságok, érzelmek és jelentések szempontjából. Ez a lecke egy valós adatállományt és egy valós kihívást mutat be: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)**, amely [CC0: Public Domain licenccel](https://creativecommons.org/publicdomain/zero/1.0/) rendelkezik. Az adatokat a Booking.com nyilvános forrásaiból gyűjtötték össze. Az adatállomány készítője Jiashen Liu.
|
||||
|
||||
### Felkészülés
|
||||
|
||||
Amire szükséged lesz:
|
||||
|
||||
* Python 3-at futtató .ipynb notebookok használata
|
||||
* pandas
|
||||
* NLTK, [amit helyben telepítened kell](https://www.nltk.org/install.html)
|
||||
* Az adatállomány, amely elérhető a Kaggle-en: [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Kibontva körülbelül 230 MB. Töltsd le az NLP leckékhez tartozó gyökér `/data` mappába.
|
||||
|
||||
## Feltáró adatvizsgálat
|
||||
|
||||
Ez a kihívás azt feltételezi, hogy egy szállodai ajánló botot építesz érzelemfelismerés és vendégértékelések alapján. Az adatállomány, amelyet használni fogsz, 1493 különböző szálloda véleményeit tartalmazza 6 városban.
|
||||
|
||||
Python, szállodai vélemények adatállománya és az NLTK érzelemfelismerő eszköze segítségével megtudhatod:
|
||||
|
||||
* Melyek a leggyakrabban használt szavak és kifejezések a véleményekben?
|
||||
* A szállodát leíró hivatalos *címkék* összefüggésben vannak-e az értékelési pontszámokkal (pl. több negatív vélemény érkezik-e egy adott szállodára *Fiatal gyerekes család* címkével, mint *Egyedül utazó* címkével, ami esetleg azt jelezheti, hogy az egyedül utazóknak jobban megfelel)?
|
||||
* Az NLTK érzelemfelismerő pontszámai "egyeznek-e" a szállodai vélemények numerikus pontszámával?
|
||||
|
||||
#### Adatállomány
|
||||
|
||||
Vizsgáljuk meg az adatállományt, amelyet letöltöttél és helyben elmentettél. Nyisd meg a fájlt egy szerkesztőben, például VS Code-ban vagy akár Excelben.
|
||||
|
||||
Az adatállomány fejlécének oszlopai a következők:
|
||||
|
||||
*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng*
|
||||
|
||||
Itt csoportosítva vannak, hogy könnyebb legyen áttekinteni őket:
|
||||
##### Szállodai oszlopok
|
||||
|
||||
* `Hotel_Name`, `Hotel_Address`, `lat` (szélességi fok), `lng` (hosszúsági fok)
|
||||
* A *lat* és *lng* segítségével térképet készíthetsz Pythonban, amely megmutatja a szállodák helyét (esetleg színkódolva a negatív és pozitív vélemények alapján)
|
||||
* A Hotel_Address nem tűnik különösebben hasznosnak, valószínűleg országra cseréljük, hogy könnyebb legyen rendezni és keresni
|
||||
|
||||
**Szállodai meta-vélemény oszlopok**
|
||||
|
||||
* `Average_Score`
|
||||
* Az adatállomány készítője szerint ez az oszlop a *szálloda átlagos pontszáma, amelyet az elmúlt év legfrissebb véleményei alapján számítottak ki*. Ez szokatlan módja a pontszám kiszámításának, de mivel az adatokat így gyűjtötték, egyelőre elfogadhatjuk.
|
||||
|
||||
✅ Az adatállomány többi oszlopa alapján tudsz más módot kitalálni az átlagos pontszám kiszámítására?
|
||||
|
||||
* `Total_Number_of_Reviews`
|
||||
* A szálloda által kapott vélemények teljes száma - nem egyértelmű (kód írása nélkül), hogy ez az adatállományban szereplő véleményekre vonatkozik-e.
|
||||
* `Additional_Number_of_Scoring`
|
||||
* Ez azt jelenti, hogy pontszámot adtak, de a véleményező nem írt pozitív vagy negatív véleményt.
|
||||
|
||||
**Vélemény oszlopok**
|
||||
|
||||
- `Reviewer_Score`
|
||||
- Ez egy numerikus érték, amely legfeljebb 1 tizedesjegyet tartalmaz, és 2.5 és 10 közötti minimum és maximum értékek között mozog.
|
||||
- Nem magyarázzák meg, miért 2.5 a legalacsonyabb lehetséges pontszám.
|
||||
- `Negative_Review`
|
||||
- Ha a véleményező nem írt semmit, ez a mező "**No Negative**" értéket kap.
|
||||
- Figyelj arra, hogy a véleményező pozitív véleményt is írhat a negatív vélemény mezőbe (pl. "semmi rossz nincs ebben a szállodában").
|
||||
- `Review_Total_Negative_Word_Counts`
|
||||
- Magasabb negatív szószám alacsonyabb pontszámot jelez (az érzelmi töltet ellenőrzése nélkül).
|
||||
- `Positive_Review`
|
||||
- Ha a véleményező nem írt semmit, ez a mező "**No Positive**" értéket kap.
|
||||
- Figyelj arra, hogy a véleményező negatív véleményt is írhat a pozitív vélemény mezőbe (pl. "semmi jó nincs ebben a szállodában").
|
||||
- `Review_Total_Positive_Word_Counts`
|
||||
- Magasabb pozitív szószám magasabb pontszámot jelez (az érzelmi töltet ellenőrzése nélkül).
|
||||
- `Review_Date` és `days_since_review`
|
||||
- Frissességi vagy elavultsági mérőszámot lehet alkalmazni a véleményekre (régebbi vélemények nem biztos, hogy olyan pontosak, mint az újabbak, mert a szálloda vezetése megváltozott, felújításokat végeztek, vagy például medencét építettek).
|
||||
- `Tags`
|
||||
- Ezek rövid leírások, amelyeket a véleményező választhat, hogy leírja, milyen típusú vendég volt (pl. egyedül vagy családdal), milyen típusú szobában szállt meg, mennyi ideig tartózkodott, és hogyan nyújtotta be a véleményt.
|
||||
- Sajnos ezeknek a címkéknek a használata problémás, lásd az alábbi szakaszt, amely a hasznosságukat tárgyalja.
|
||||
|
||||
**Véleményező oszlopok**
|
||||
|
||||
- `Total_Number_of_Reviews_Reviewer_Has_Given`
|
||||
- Ez egy tényező lehet az ajánlási modellben, például ha meg tudod állapítani, hogy a több száz véleményt író véleményezők inkább negatívak, mint pozitívak. Azonban az adott vélemény véleményezője nem azonosítható egyedi kóddal, és ezért nem kapcsolható össze egy véleményhalmazzal. 30 véleményező van, akik 100 vagy több véleményt írtak, de nehéz látni, hogyan segítheti ez az ajánlási modellt.
|
||||
- `Reviewer_Nationality`
|
||||
- Egyesek azt gondolhatják, hogy bizonyos nemzetiségek hajlamosabbak pozitív vagy negatív véleményt adni nemzeti hajlamuk miatt. Légy óvatos, ha ilyen anekdotikus nézeteket építesz be a modelljeidbe. Ezek nemzeti (és néha faji) sztereotípiák, és minden véleményező egyén volt, aki a saját tapasztalatai alapján írt véleményt. Ez sok szűrőn keresztül történhetett, például korábbi szállodai tartózkodásaik, az utazott távolság, és személyes temperamentumuk alapján. Nehéz igazolni azt a feltételezést, hogy a véleménypontszám oka a nemzetiségük volt.
|
||||
|
||||
##### Példák
|
||||
|
||||
| Átlagos pontszám | Vélemények száma | Véleményező pontszám | Negatív <br />Vélemény | Pozitív vélemény | Címkék |
|
||||
| ---------------- | ---------------- | -------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------- |
|
||||
| 7.8 | 1945 | 2.5 | Ez jelenleg nem szálloda, hanem építkezési terület. Korán reggel és egész nap elfogadhatatlan építési zajjal terrorizáltak, miközben egy hosszú utazás után pihentem és dolgoztam a szobában. Az emberek egész nap dolgoztak, például légkalapáccsal a szomszédos szobákban. Kértem szobacserét, de nem volt csendes szoba elérhető. Ráadásul túlszámláztak. Este kijelentkeztem, mivel korán kellett indulnom a repülőjáratomhoz, és megfelelő számlát kaptam. Egy nappal később a szálloda további díjat számolt fel a beleegyezésem nélkül, a foglalási ár felett. Ez egy szörnyű hely. Ne büntesd magad azzal, hogy itt foglalsz. | Semmi. Szörnyű hely. Kerüld el. | Üzleti út Pár Standard Double Room 2 éjszakát töltött |
|
||||
|
||||
Amint láthatod, ez a vendég nem volt elégedett a szállodai tartózkodásával. A szálloda jó átlagos pontszámmal rendelkezik (7.8) és 1945 véleménnyel, de ez a véleményező 2.5 pontot adott, és 115 szót írt arról, mennyire negatív volt az ott tartózkodása. Ha semmit sem írt volna a Pozitív vélemény oszlopba, feltételezhetnéd, hogy semmi pozitív nem volt, de mégis írt 7 figyelmeztető szót. Ha csak a szavak számát néznénk, a szavak jelentése vagy érzelmi töltete helyett, torz képet kaphatnánk a véleményező szándékáról. Furcsa módon a 2.5 pontszám zavaró, mert ha a szállodai tartózkodás ennyire rossz volt, miért adott egyáltalán pontot? Az adatállomány alapos vizsgálata során láthatod, hogy a legalacsonyabb lehetséges pontszám 2.5, nem 0. A legmagasabb lehetséges pontszám 10.
|
||||
|
||||
##### Címkék
|
||||
|
||||
Ahogy fentebb említettük, első pillantásra a `Tags` oszlop használata az adatok kategorizálására logikusnak tűnik. Sajnos ezek a címkék nem szabványosítottak, ami azt jelenti, hogy egy adott szállodában az opciók lehetnek *Single room*, *Twin room* és *Double room*, míg egy másik szállodában *Deluxe Single Room*, *Classic Queen Room* és *Executive King Room*. Ezek lehetnek ugyanazok, de annyi variáció van, hogy a választás a következő:
|
||||
|
||||
1. Minden kifejezést egyetlen szabványra próbálunk átalakítani, ami nagyon nehéz, mert nem világos, hogy mi lenne az átalakítási útvonal minden esetben (pl. *Classic single room* átalakítása *Single room*-ra, de *Superior Queen Room with Courtyard Garden or City View* sokkal nehezebb).
|
||||
|
||||
1. NLP megközelítést alkalmazunk, és mérjük bizonyos kifejezések, mint például *Solo*, *Business Traveller* vagy *Family with young kids* gyakoriságát, ahogy azok az egyes szállodákra vonatkoznak, és ezt beépítjük az ajánlásba.
|
||||
|
||||
A címkék általában (de nem mindig) egyetlen mezőt tartalmaznak, amely 5-6 vesszővel elválasztott értéket sorol fel, amelyek a *Utazás típusa*, *Vendégek típusa*, *Szoba típusa*, *Éjszakák száma* és *Eszköz típusa, amelyen a véleményt benyújtották* kategóriákhoz igazodnak. Azonban mivel néhány véleményező nem tölti ki az összes mezőt (egy mezőt üresen hagyhat), az értékek nem mindig ugyanabban a sorrendben vannak.
|
||||
|
||||
Például vegyük a *Csoport típusa* kategóriát. Ebben az oszlopban a `Tags` mezőben 1025 egyedi lehetőség van, és sajnos csak néhányuk utal csoportokra (néhány a szoba típusára stb.). Ha csak azokat szűröd, amelyek családot említenek, az eredmények sok *Family room* típusú eredményt tartalmaznak. Ha hozzáadod a *with* kifejezést, azaz számolod a *Family with* értékeket, az eredmények jobbak, több mint 80,000 a 515,000 eredményből tartalmazza a "Family with young children" vagy "Family with older children" kifejezést.
|
||||
|
||||
Ez azt jelenti, hogy a címkék oszlop nem teljesen haszontalan számunkra, de némi munkát igényel, hogy hasznossá váljon.
|
||||
|
||||
##### Szállodai átlagos pontszám
|
||||
|
||||
Az adatállományban számos furcsaság vagy eltérés van, amelyeket nem tudok megfejteni, de itt bemutatom őket, hogy tisztában legyél velük, amikor a modelljeidet építed. Ha megfejted, kérlek, oszd meg velünk a vitafórumon!
|
||||
|
||||
Az adatállomány az alábbi oszlopokat tartalmazza az átlagos pontszám és a vélemények száma kapcsán:
|
||||
|
||||
1. Hotel_Name
|
||||
2. Additional_Number_of_Scoring
|
||||
3. Average_Score
|
||||
4. Total_Number_of_Reviews
|
||||
5. Reviewer_Score
|
||||
|
||||
Az adatállományban a legtöbb véleménnyel rendelkező szálloda a *Britannia International Hotel Canary Wharf*, amely 4789 véleményt tartalmaz az 515,000-ből. De ha megnézzük a `Total_Number_of_Reviews` értéket ennél a szállodánál, az 9086. Feltételezheted, hogy sokkal több pontszám van vélemények nélkül, így talán hozzá kellene adni az `Additional_Number_of_Scoring` oszlop értékét. Az érték 2682, és ha hozzáadjuk a 4789-hez, 7471-et kapunk, ami még mindig 1615-tel kevesebb, mint a `Total_Number_of_Reviews`.
|
||||
|
||||
Ha az `Average_Score` oszlopot nézed, feltételezheted, hogy az az adatállományban szereplő vélemények átlaga, de a Kaggle leírása szerint "*A szálloda átlagos pontszáma, amelyet az elmúlt év legfrissebb véleményei alapján számítottak ki*". Ez nem tűnik túl hasznosnak, de kiszámíthatjuk a saját átlagunkat az adatállományban szereplő véleménypontszámok alapján. Ugyanazt a szállodát példaként használva, az átlagos szállodai pontszám 7.1, de az adatállományban szereplő véleményező pontszámok átlaga 6.8. Ez közel van, de nem ugyanaz az érték,
|
||||
> 🚨 Egy figyelmeztetés
|
||||
|
||||
> Amikor ezzel az adathalmazzal dolgozol, olyan kódot fogsz írni, amely kiszámít valamit a szövegből anélkül, hogy magát a szöveget el kellene olvasnod vagy elemezned. Ez az NLP lényege: jelentés vagy érzelem értelmezése anélkül, hogy emberi beavatkozásra lenne szükség. Azonban előfordulhat, hogy elolvasol néhány negatív értékelést. Arra biztatlak, hogy ne tedd, mert nincs rá szükség. Néhányuk nevetséges vagy irreleváns negatív hotelértékelés, például: "Nem volt jó az időjárás", ami a hotel, vagy bárki más számára nem befolyásolható tényező. De van egy sötét oldala is néhány értékelésnek. Néha a negatív értékelések rasszista, szexista vagy életkorral kapcsolatos előítéleteket tartalmaznak. Ez sajnálatos, de várható egy nyilvános weboldalról lekapart adathalmaz esetében. Néhány értékelő olyan véleményeket hagy, amelyeket ízléstelennek, kényelmetlennek vagy felkavarónak találhatsz. Jobb, ha a kód méri az érzelmeket, mintha magad olvasnád el őket és felzaklatnád magad. Ennek ellenére csak kisebbség ír ilyen dolgokat, de mégis léteznek.
|
||||
## Feladat - Adatfeltárás
|
||||
### Adatok betöltése
|
||||
|
||||
Elég volt az adatok vizuális vizsgálatából, most írj néhány kódot, hogy válaszokat kapj! Ebben a részben a pandas könyvtárat fogjuk használni. Az első feladatod az, hogy megbizonyosodj arról, hogy be tudod tölteni és olvasni a CSV adatokat. A pandas könyvtár gyors CSV betöltőt kínál, és az eredményt egy dataframe-be helyezi, ahogy azt korábbi leckékben láttuk. A betöltendő CSV több mint félmillió sort tartalmaz, de csak 17 oszlopot. A pandas számos hatékony módot kínál a dataframe-ekkel való interakcióra, beleértve a műveletek végrehajtását minden soron.
|
||||
|
||||
Ettől a ponttól kezdve a leckében kódrészletek és magyarázatok lesznek a kódról, valamint némi vita arról, hogy mit jelentenek az eredmények. Használd a mellékelt _notebook.ipynb_-t a kódodhoz.
|
||||
|
||||
Kezdjük azzal, hogy betöltjük az adatfájlt, amelyet használni fogsz:
|
||||
|
||||
```python
|
||||
# Load the hotel reviews from CSV
|
||||
import pandas as pd
|
||||
import time
|
||||
# importing time so the start and end time can be used to calculate file loading time
|
||||
print("Loading data file now, this could take a while depending on file size")
|
||||
start = time.time()
|
||||
# df is 'DataFrame' - make sure you downloaded the file to the data folder
|
||||
df = pd.read_csv('../../data/Hotel_Reviews.csv')
|
||||
end = time.time()
|
||||
print("Loading took " + str(round(end - start, 2)) + " seconds")
|
||||
```
|
||||
|
||||
Most, hogy az adatok betöltve vannak, végezhetünk rajtuk néhány műveletet. Tartsd ezt a kódot a programod tetején a következő részhez.
|
||||
|
||||
## Az adatok feltárása
|
||||
|
||||
Ebben az esetben az adatok már *tiszták*, ami azt jelenti, hogy készen állnak a feldolgozásra, és nem tartalmaznak más nyelveken írt karaktereket, amelyek problémát okozhatnak az algoritmusoknak, amelyek csak angol karaktereket várnak.
|
||||
|
||||
✅ Lehet, hogy olyan adatokkal kell dolgoznod, amelyek kezdeti feldolgozást igényelnek, mielőtt NLP technikákat alkalmaznál, de most nem. Ha mégis, hogyan kezelnéd a nem angol karaktereket?
|
||||
|
||||
Szánj egy pillanatot arra, hogy megbizonyosodj arról, hogy az adatok betöltése után kóddal tudod feltárni őket. Könnyű lenne a `Negative_Review` és `Positive_Review` oszlopokra koncentrálni. Ezek természetes szövegekkel vannak tele, amelyeket az NLP algoritmusok feldolgozhatnak. De várj! Mielőtt belevágnál az NLP-be és az érzelemfelismerésbe, kövesd az alábbi kódot, hogy megbizonyosodj arról, hogy az adatkészletben megadott értékek megfelelnek a pandas segítségével számított értékeknek.
|
||||
|
||||
## Dataframe műveletek
|
||||
|
||||
Az első feladat ebben a leckében az, hogy ellenőrizd, helyesek-e az alábbi állítások, azáltal, hogy írsz néhány kódot, amely megvizsgálja a dataframe-et (anélkül, hogy megváltoztatnád).
|
||||
|
||||
> Mint sok programozási feladatnál, itt is többféle módon lehet megoldani, de jó tanács, hogy a legegyszerűbb, legkönnyebb módon csináld, különösen, ha később könnyebb lesz megérteni, amikor visszatérsz ehhez a kódhoz. A dataframe-ekkel egy átfogó API áll rendelkezésre, amely gyakran hatékony módot kínál arra, hogy elvégezd, amit szeretnél.
|
||||
|
||||
Tekintsd az alábbi kérdéseket kódolási feladatoknak, és próbáld meg megválaszolni őket anélkül, hogy megnéznéd a megoldást.
|
||||
|
||||
1. Írd ki a dataframe *alakját* (shape), amelyet éppen betöltöttél (az alak a sorok és oszlopok száma).
|
||||
2. Számítsd ki az értékek gyakoriságát a reviewer nemzetiségek esetében:
|
||||
1. Hány különböző érték van a `Reviewer_Nationality` oszlopban, és mik ezek?
|
||||
2. Melyik reviewer nemzetiség a leggyakoribb az adatkészletben (ország és értékelések száma)?
|
||||
3. Melyek a következő 10 leggyakrabban előforduló nemzetiségek, és azok gyakorisága?
|
||||
3. Melyik volt a leggyakrabban értékelt hotel a 10 leggyakoribb reviewer nemzetiség esetében?
|
||||
4. Hány értékelés van hotelenként (hotel gyakoriság az adatkészletben)?
|
||||
5. Bár van egy `Average_Score` oszlop minden hotel esetében az adatkészletben, kiszámíthatod az átlagos pontszámot is (az összes reviewer pontszámának átlaga az adatkészletben hotelenként). Adj hozzá egy új oszlopot a dataframe-hez `Calc_Average_Score` oszlopfejléccel, amely tartalmazza a kiszámított átlagot.
|
||||
6. Van-e olyan hotel, amelynek ugyanaz az (1 tizedesjegyre kerekített) `Average_Score` és `Calc_Average_Score` értéke?
|
||||
1. Próbálj meg írni egy Python függvényt, amely egy Series-t (sor) vesz argumentumként, és összehasonlítja az értékeket, üzenetet nyomtatva, ha az értékek nem egyenlőek. Ezután használd a `.apply()` metódust, hogy minden sort feldolgozz a függvénnyel.
|
||||
7. Számítsd ki és írd ki, hány sorban van a `Negative_Review` oszlop értéke "No Negative".
|
||||
8. Számítsd ki és írd ki, hány sorban van a `Positive_Review` oszlop értéke "No Positive".
|
||||
9. Számítsd ki és írd ki, hány sorban van a `Positive_Review` oszlop értéke "No Positive" **és** a `Negative_Review` oszlop értéke "No Negative".
|
||||
|
||||
### Kódválaszok
|
||||
|
||||
1. Írd ki a dataframe *alakját* (shape), amelyet éppen betöltöttél (az alak a sorok és oszlopok száma).
|
||||
|
||||
```python
|
||||
print("The shape of the data (rows, cols) is " + str(df.shape))
|
||||
> The shape of the data (rows, cols) is (515738, 17)
|
||||
```
|
||||
|
||||
2. Számítsd ki az értékek gyakoriságát a reviewer nemzetiségek esetében:
|
||||
|
||||
1. Hány különböző érték van a `Reviewer_Nationality` oszlopban, és mik ezek?
|
||||
2. Melyik reviewer nemzetiség a leggyakoribb az adatkészletben (ország és értékelések száma)?
|
||||
|
||||
```python
|
||||
# value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality
|
||||
nationality_freq = df["Reviewer_Nationality"].value_counts()
|
||||
print("There are " + str(nationality_freq.size) + " different nationalities")
|
||||
# print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data
|
||||
print(nationality_freq)
|
||||
|
||||
There are 227 different nationalities
|
||||
United Kingdom 245246
|
||||
United States of America 35437
|
||||
Australia 21686
|
||||
Ireland 14827
|
||||
United Arab Emirates 10235
|
||||
...
|
||||
Comoros 1
|
||||
Palau 1
|
||||
Northern Mariana Islands 1
|
||||
Cape Verde 1
|
||||
Guinea 1
|
||||
Name: Reviewer_Nationality, Length: 227, dtype: int64
|
||||
```
|
||||
|
||||
3. Melyek a következő 10 leggyakrabban előforduló nemzetiségek, és azok gyakorisága?
|
||||
|
||||
```python
|
||||
print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.")
|
||||
# Notice there is a leading space on the values, strip() removes that for printing
|
||||
# What is the top 10 most common nationalities and their frequencies?
|
||||
print("The next 10 highest frequency reviewer nationalities are:")
|
||||
print(nationality_freq[1:11].to_string())
|
||||
|
||||
The highest frequency reviewer nationality is United Kingdom with 245246 reviews.
|
||||
The next 10 highest frequency reviewer nationalities are:
|
||||
United States of America 35437
|
||||
Australia 21686
|
||||
Ireland 14827
|
||||
United Arab Emirates 10235
|
||||
Saudi Arabia 8951
|
||||
Netherlands 8772
|
||||
Switzerland 8678
|
||||
Germany 7941
|
||||
Canada 7894
|
||||
France 7296
|
||||
```
|
||||
|
||||
3. Melyik volt a leggyakrabban értékelt hotel a 10 leggyakoribb reviewer nemzetiség esetében?
|
||||
|
||||
```python
|
||||
# What was the most frequently reviewed hotel for the top 10 nationalities
|
||||
# Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow)
|
||||
for nat in nationality_freq[:10].index:
|
||||
# First, extract all the rows that match the criteria into a new dataframe
|
||||
nat_df = df[df["Reviewer_Nationality"] == nat]
|
||||
# Now get the hotel freq
|
||||
freq = nat_df["Hotel_Name"].value_counts()
|
||||
print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.")
|
||||
|
||||
The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews.
|
||||
The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews.
|
||||
The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews.
|
||||
The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews.
|
||||
The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews.
|
||||
The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews.
|
||||
The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews.
|
||||
The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews.
|
||||
The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews.
|
||||
The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews.
|
||||
```
|
||||
|
||||
4. Hány értékelés van hotelenként (hotel gyakoriság az adatkészletben)?
|
||||
|
||||
```python
|
||||
# First create a new dataframe based on the old one, removing the uneeded columns
|
||||
hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1)
|
||||
|
||||
# Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found
|
||||
hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count')
|
||||
|
||||
# Get rid of all the duplicated rows
|
||||
hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"])
|
||||
display(hotel_freq_df)
|
||||
```
|
||||
| Hotel_Név | Összes_Értékelés_Száma | Talált_Értékelések_Száma |
|
||||
| :----------------------------------------: | :---------------------: | :----------------------: |
|
||||
| Britannia International Hotel Canary Wharf | 9086 | 4789 |
|
||||
| Park Plaza Westminster Bridge London | 12158 | 4169 |
|
||||
| Copthorne Tara Hotel London Kensington | 7105 | 3578 |
|
||||
| ... | ... | ... |
|
||||
| Mercure Paris Porte d Orleans | 110 | 10 |
|
||||
| Hotel Wagner | 135 | 10 |
|
||||
| Hotel Gallitzinberg | 173 | 8 |
|
||||
|
||||
Észreveheted, hogy az *adathalmazban számolt* eredmények nem egyeznek a `Total_Number_of_Reviews` értékével. Nem világos, hogy ez az érték az adathalmazban a hotel összes értékelését képviselte-e, de nem mindet kaparták le, vagy valamilyen más számítást. A `Total_Number_of_Reviews` nem kerül felhasználásra a modellben, mivel nem egyértelmű.
|
||||
|
||||
5. Bár van egy `Average_Score` oszlop minden hotel esetében az adatkészletben, kiszámíthatod az átlagos pontszámot is (az összes reviewer pontszámának átlaga az adatkészletben hotelenként). Adj hozzá egy új oszlopot a dataframe-hez `Calc_Average_Score` oszlopfejléccel, amely tartalmazza a kiszámított átlagot. Írd ki a `Hotel_Név`, `Average_Score` és `Calc_Average_Score` oszlopokat.
|
||||
|
||||
```python
|
||||
# define a function that takes a row and performs some calculation with it
|
||||
def get_difference_review_avg(row):
|
||||
return row["Average_Score"] - row["Calc_Average_Score"]
|
||||
|
||||
# 'mean' is mathematical word for 'average'
|
||||
df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1)
|
||||
|
||||
# Add a new column with the difference between the two average scores
|
||||
df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1)
|
||||
|
||||
# Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel)
|
||||
review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"])
|
||||
|
||||
# Sort the dataframe to find the lowest and highest average score difference
|
||||
review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"])
|
||||
|
||||
display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]])
|
||||
```
|
||||
|
||||
Érdekelhet, hogy miért különbözik néha az `Average_Score` érték a kiszámított átlagos pontszámtól. Mivel nem tudhatjuk, miért egyeznek néhány értékek, de mások eltérnek, ebben az esetben a legbiztonságosabb, ha a rendelkezésre álló értékelési pontszámokat használjuk az átlag kiszámításához. Az eltérések általában nagyon kicsik, itt vannak a legnagyobb eltéréssel rendelkező hotelek:
|
||||
|
||||
| Átlagos_Pontszám_Eltérés | Átlagos_Pontszám | Számított_Átlagos_Pontszám | Hotel_Név |
|
||||
| :----------------------: | :--------------: | :------------------------: | ------------------------------------------: |
|
||||
| -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria |
|
||||
| -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery |
|
||||
| -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans |
|
||||
| -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel |
|
||||
| -0.5 | 7.0 | 7.5 | Hotel Royal Elys es |
|
||||
| ... | ... | ... | ... |
|
||||
| 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre |
|
||||
| 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur |
|
||||
| 0.9 | 6.8 | 5.9 | Villa Eugenie |
|
||||
| 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux |
|
||||
| 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar |
|
||||
|
||||
Mivel csak 1 hotel esetében van 1-nél nagyobb eltérés, valószínűleg figyelmen kívül hagyhatjuk az eltérést, és használhatjuk a számított átlagos pontszámot.
|
||||
|
||||
6. Számítsd ki és írd ki, hány sorban van a `Negative_Review` oszlop értéke "No Negative".
|
||||
|
||||
7. Számítsd ki és írd ki, hány sorban van a `Positive_Review` oszlop értéke "No Positive".
|
||||
|
||||
8. Számítsd ki és írd ki, hány sorban van a `Positive_Review` oszlop értéke "No Positive" **és** a `Negative_Review` oszlop értéke "No Negative".
|
||||
|
||||
```python
|
||||
# with lambdas:
|
||||
start = time.time()
|
||||
no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1)
|
||||
print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index)))
|
||||
|
||||
no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1)
|
||||
print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index)))
|
||||
|
||||
both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1)
|
||||
print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index)))
|
||||
end = time.time()
|
||||
print("Lambdas took " + str(round(end - start, 2)) + " seconds")
|
||||
|
||||
Number of No Negative reviews: 127890
|
||||
Number of No Positive reviews: 35946
|
||||
Number of both No Negative and No Positive reviews: 127
|
||||
Lambdas took 9.64 seconds
|
||||
```
|
||||
|
||||
## Egy másik módszer
|
||||
|
||||
Egy másik mód az elemek számolására lambdák nélkül, és a sorok számolására a sum használatával:
|
||||
|
||||
```python
|
||||
# without lambdas (using a mixture of notations to show you can use both)
|
||||
start = time.time()
|
||||
no_negative_reviews = sum(df.Negative_Review == "No Negative")
|
||||
print("Number of No Negative reviews: " + str(no_negative_reviews))
|
||||
|
||||
no_positive_reviews = sum(df["Positive_Review"] == "No Positive")
|
||||
print("Number of No Positive reviews: " + str(no_positive_reviews))
|
||||
|
||||
both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive"))
|
||||
print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews))
|
||||
|
||||
end = time.time()
|
||||
print("Sum took " + str(round(end - start, 2)) + " seconds")
|
||||
|
||||
Number of No Negative reviews: 127890
|
||||
Number of No Positive reviews: 35946
|
||||
Number of both No Negative and No Positive reviews: 127
|
||||
Sum took 0.19 seconds
|
||||
```
|
||||
|
||||
Észrevehetted, hogy 127 sor van, amelyben mind a `Negative_Review` oszlop értéke "No Negative", mind a `Positive_Review` oszlop értéke "No Positive". Ez azt jelenti, hogy az értékelő adott egy numerikus pontszámot a hotelnek, de nem írt sem pozitív, sem negatív értékelést. Szerencsére ez csak kis mennyiségű sor (127 a 515738-ból, vagyis 0,02%), így valószínűleg nem torzítja a modellünket vagy az eredményeinket semmilyen irányba, de lehet, hogy nem számítottál arra, hogy egy értékeléseket tartalmazó adathalmazban lesznek sorok értékelések nélkül, ezért érdemes feltárni az adatokat, hogy felfedezzük az ilyen sorokat.
|
||||
|
||||
Most, hogy feltártad az adatkészletet, a következő leckében szűrni fogod az adatokat, és hozzáadsz némi érzelemfelismerést.
|
||||
|
||||
---
|
||||
## 🚀Kihívás
|
||||
|
||||
Ez a lecke bemutatja, ahogy azt korábbi leckékben láttuk, hogy mennyire kritikus fontosságú az adatok és azok sajátosságainak megértése, mielőtt műveleteket végeznénk rajtuk. Különösen a szövegalapú adatok alapos vizsgálatot igényelnek. Ásd bele magad különböző szövegközpontú adathalmazokba, és nézd meg, felfedezhetsz-e olyan területeket, amelyek torzítást vagy ferde érzelmeket vihetnek be egy modellbe.
|
||||
|
||||
## [Utó-leckekvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Vedd fel [ezt az NLP tanulási útvonalat](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott), hogy felfedezd azokat az eszközöket, amelyeket beszéd- és szövegközpontú modellek építésekor kipróbálhatsz.
|
||||
|
||||
## Feladat
|
||||
|
||||
[NLTK](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,19 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "bf39bceb833cd628f224941dca8041df",
|
||||
"translation_date": "2025-09-05T16:58:21+00:00",
|
||||
"source_file": "6-NLP/4-Hotel-Reviews-1/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# NLTK
|
||||
|
||||
## Útmutató
|
||||
|
||||
Az NLTK egy jól ismert könyvtár, amelyet számítógépes nyelvészetben és NLP-ben használnak. Használja ki ezt az alkalmat, hogy átolvassa az '[NLTK könyvet](https://www.nltk.org/book/)', és próbálja ki a benne található gyakorlatokat. Ebben a nem értékelt feladatban mélyebben megismerkedhet ezzel a könyvtárral.
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T16:58:55+00:00",
|
||||
"source_file": "6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "81db6ff2cf6e62fbe2340b094bb9509e",
|
||||
"translation_date": "2025-09-05T16:58:41+00:00",
|
||||
"source_file": "6-NLP/4-Hotel-Reviews-1/solution/R/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
ez egy ideiglenes helyőrző
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,367 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "2c742993fe95d5bcbb2846eda3d442a1",
|
||||
"translation_date": "2025-09-05T17:07:14+00:00",
|
||||
"source_file": "6-NLP/5-Hotel-Reviews-2/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Érzelemfelismerés szállodai vélemények alapján
|
||||
|
||||
Most, hogy részletesen megvizsgáltad az adatállományt, itt az ideje, hogy szűrd az oszlopokat, majd NLP technikákat alkalmazz az adatállományon, hogy új betekintést nyerj a szállodákról.
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
### Szűrési és érzelemfelismerési műveletek
|
||||
|
||||
Ahogy valószínűleg észrevetted, az adatállományban van néhány probléma. Néhány oszlop haszontalan információval van tele, mások hibásnak tűnnek. Ha helyesek is, nem világos, hogyan számították ki őket, és az eredmények nem ellenőrizhetők független számításokkal.
|
||||
|
||||
## Gyakorlat: további adatfeldolgozás
|
||||
|
||||
Tisztítsd meg az adatokat egy kicsit jobban. Adj hozzá oszlopokat, amelyek később hasznosak lesznek, módosítsd más oszlopok értékeit, és teljesen törölj bizonyos oszlopokat.
|
||||
|
||||
1. Kezdeti oszlopfeldolgozás
|
||||
|
||||
1. Töröld a `lat` és `lng` oszlopokat.
|
||||
|
||||
2. Cseréld ki a `Hotel_Address` értékeit az alábbi értékekre (ha a cím tartalmazza a város és az ország nevét, változtasd meg csak a városra és az országra).
|
||||
|
||||
Ezek az adatállományban szereplő egyetlen városok és országok:
|
||||
|
||||
Amszterdam, Hollandia
|
||||
|
||||
Barcelona, Spanyolország
|
||||
|
||||
London, Egyesült Királyság
|
||||
|
||||
Milánó, Olaszország
|
||||
|
||||
Párizs, Franciaország
|
||||
|
||||
Bécs, Ausztria
|
||||
|
||||
```python
|
||||
def replace_address(row):
|
||||
if "Netherlands" in row["Hotel_Address"]:
|
||||
return "Amsterdam, Netherlands"
|
||||
elif "Barcelona" in row["Hotel_Address"]:
|
||||
return "Barcelona, Spain"
|
||||
elif "United Kingdom" in row["Hotel_Address"]:
|
||||
return "London, United Kingdom"
|
||||
elif "Milan" in row["Hotel_Address"]:
|
||||
return "Milan, Italy"
|
||||
elif "France" in row["Hotel_Address"]:
|
||||
return "Paris, France"
|
||||
elif "Vienna" in row["Hotel_Address"]:
|
||||
return "Vienna, Austria"
|
||||
|
||||
# Replace all the addresses with a shortened, more useful form
|
||||
df["Hotel_Address"] = df.apply(replace_address, axis = 1)
|
||||
# The sum of the value_counts() should add up to the total number of reviews
|
||||
print(df["Hotel_Address"].value_counts())
|
||||
```
|
||||
|
||||
Most már lekérdezheted az ország szintű adatokat:
|
||||
|
||||
```python
|
||||
display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"}))
|
||||
```
|
||||
|
||||
| Hotel_Address | Hotel_Name |
|
||||
| :--------------------- | :--------: |
|
||||
| Amsterdam, Netherlands | 105 |
|
||||
| Barcelona, Spain | 211 |
|
||||
| London, United Kingdom | 400 |
|
||||
| Milan, Italy | 162 |
|
||||
| Paris, France | 458 |
|
||||
| Vienna, Austria | 158 |
|
||||
|
||||
2. Szállodai meta-vélemény oszlopok feldolgozása
|
||||
|
||||
1. Töröld az `Additional_Number_of_Scoring` oszlopot.
|
||||
|
||||
1. Cseréld ki a `Total_Number_of_Reviews` értékét az adott szállodához tartozó vélemények tényleges számával az adatállományban.
|
||||
|
||||
1. Cseréld ki az `Average_Score` értékét a saját számított átlagos pontszámunkkal.
|
||||
|
||||
```python
|
||||
# Drop `Additional_Number_of_Scoring`
|
||||
df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True)
|
||||
# Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values
|
||||
df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count')
|
||||
df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1)
|
||||
```
|
||||
|
||||
3. Vélemény oszlopok feldolgozása
|
||||
|
||||
1. Töröld a `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` és `days_since_review` oszlopokat.
|
||||
|
||||
2. Hagyd meg a `Reviewer_Score`, `Negative_Review` és `Positive_Review` oszlopokat változatlanul.
|
||||
|
||||
3. Egyelőre hagyd meg a `Tags` oszlopot.
|
||||
|
||||
- A következő szakaszban további szűrési műveleteket végzünk a címkéken, majd a címkék törlésre kerülnek.
|
||||
|
||||
4. Véleményező oszlopok feldolgozása
|
||||
|
||||
1. Töröld a `Total_Number_of_Reviews_Reviewer_Has_Given` oszlopot.
|
||||
|
||||
2. Hagyd meg a `Reviewer_Nationality` oszlopot.
|
||||
|
||||
### Címke oszlopok
|
||||
|
||||
A `Tag` oszlop problémás, mivel egy lista (szöveg formájában) van tárolva az oszlopban. Sajnos az alrészek sorrendje és száma nem mindig ugyanaz. Nehéz az ember számára azonosítani a releváns kifejezéseket, mivel 515,000 sor és 1427 szálloda van, és mindegyiknek kissé eltérő lehetőségei vannak, amelyeket a véleményező választhatott. Itt jön képbe az NLP. A szöveget átvizsgálva megtalálhatod a leggyakoribb kifejezéseket, és megszámolhatod őket.
|
||||
|
||||
Sajnos nem az egyes szavak érdekelnek minket, hanem több szóból álló kifejezések (pl. *Üzleti út*). Egy több szóból álló gyakorisági eloszlás algoritmus futtatása ekkora adatmennyiségen (6762646 szó) rendkívül sok időt vehet igénybe, de anélkül, hogy megnéznénk az adatokat, úgy tűnik, hogy ez szükséges költség. Itt jön jól az exploratív adatvizsgálat, mivel láttál egy mintát a címkékből, például `[' Üzleti út ', ' Egyedül utazó ', ' Egyágyas szoba ', ' 5 éjszakát maradt ', ' Mobil eszközről küldve ']`, elkezdheted megkérdezni, hogy lehetséges-e jelentősen csökkenteni a feldolgozást. Szerencsére lehetséges - de először néhány lépést kell követned, hogy meghatározd az érdekes címkéket.
|
||||
|
||||
### Címkék szűrése
|
||||
|
||||
Ne feledd, hogy az adatállomány célja az érzelmek és oszlopok hozzáadása, amelyek segítenek kiválasztani a legjobb szállodát (számodra vagy esetleg egy ügyfél számára, aki szállodai ajánló botot szeretne készíteni). Fel kell tenned magadnak a kérdést, hogy a címkék hasznosak-e vagy sem a végső adatállományban. Íme egy értelmezés (ha más célból lenne szükséged az adatállományra, különböző címkék maradhatnak benne/kieshetnek):
|
||||
|
||||
1. Az utazás típusa releváns, ezt meg kell tartani.
|
||||
2. A vendégcsoport típusa fontos, ezt meg kell tartani.
|
||||
3. Az a szoba, lakosztály vagy stúdió típusa, amelyben a vendég tartózkodott, irreleváns (minden szállodában alapvetően ugyanazok a szobák vannak).
|
||||
4. Az eszköz, amelyről a véleményt beküldték, irreleváns.
|
||||
5. Az éjszakák száma, amelyet a véleményező ott töltött, *lehet*, hogy releváns, ha hosszabb tartózkodást a szálloda kedvelésével társítasz, de ez erőltetett, és valószínűleg irreleváns.
|
||||
|
||||
Összefoglalva, **tarts meg 2 fajta címkét, és távolítsd el a többit**.
|
||||
|
||||
Először nem akarod megszámolni a címkéket, amíg nem kerülnek jobb formátumba, tehát ez azt jelenti, hogy el kell távolítani a szögletes zárójeleket és az idézőjeleket. Ezt többféleképpen megteheted, de a leggyorsabbat szeretnéd, mivel sok adat feldolgozása hosszú időt vehet igénybe. Szerencsére a pandas egyszerű módot kínál mindegyik lépés elvégzésére.
|
||||
|
||||
```Python
|
||||
# Remove opening and closing brackets
|
||||
df.Tags = df.Tags.str.strip("[']")
|
||||
# remove all quotes too
|
||||
df.Tags = df.Tags.str.replace(" ', '", ",", regex = False)
|
||||
```
|
||||
|
||||
Minden címke valami ilyesmivé válik: `Üzleti út, Egyedül utazó, Egyágyas szoba, 5 éjszakát maradt, Mobil eszközről küldve`.
|
||||
|
||||
Ezután találunk egy problémát. Néhány vélemény vagy sor 5 oszlopot tartalmaz, néhány 3-at, néhány 6-ot. Ez az adatállomány létrehozásának eredménye, és nehéz javítani. Szeretnéd megszámolni az egyes kifejezések gyakoriságát, de ezek különböző sorrendben vannak minden véleményben, így a számolás hibás lehet, és egy szálloda nem kapja meg azt a címkét, amelyet megérdemelt volna.
|
||||
|
||||
Ehelyett a különböző sorrendet az előnyünkre fordítjuk, mivel minden címke több szóból áll, de vesszővel is el van választva! A legegyszerűbb módja ennek az, hogy létrehozunk 6 ideiglenes oszlopot, amelyekbe minden címkét beillesztünk a címke sorrendjének megfelelő oszlopba. Ezután egyesítheted a 6 oszlopot egy nagy oszlopba, és futtathatod a `value_counts()` metódust az eredményoszlopon. Ha ezt kinyomtatod, látni fogod, hogy 2428 egyedi címke volt. Íme egy kis minta:
|
||||
|
||||
| Címke | Szám |
|
||||
| ------------------------------ | ------ |
|
||||
| Szabadidős utazás | 417778 |
|
||||
| Mobil eszközről küldve | 307640 |
|
||||
| Pár | 252294 |
|
||||
| 1 éjszakát maradt | 193645 |
|
||||
| 2 éjszakát maradt | 133937 |
|
||||
| Egyedül utazó | 108545 |
|
||||
| 3 éjszakát maradt | 95821 |
|
||||
| Üzleti út | 82939 |
|
||||
| Csoport | 65392 |
|
||||
| Fiatal gyermekes család | 61015 |
|
||||
| 4 éjszakát maradt | 47817 |
|
||||
| Kétszemélyes szoba | 35207 |
|
||||
| Standard kétszemélyes szoba | 32248 |
|
||||
| Superior kétszemélyes szoba | 31393 |
|
||||
| Idősebb gyermekes család | 26349 |
|
||||
| Deluxe kétszemélyes szoba | 24823 |
|
||||
| Kétszemélyes vagy ikerszoba | 22393 |
|
||||
| 5 éjszakát maradt | 20845 |
|
||||
| Standard kétszemélyes vagy ikerszoba | 17483 |
|
||||
| Klasszikus kétszemélyes szoba | 16989 |
|
||||
| Superior kétszemélyes vagy ikerszoba | 13570 |
|
||||
| 2 szoba | 12393 |
|
||||
|
||||
Néhány gyakori címke, mint például `Mobil eszközről küldve`, nem hasznos számunkra, így okos dolog lehet eltávolítani őket, mielőtt megszámolnánk a kifejezések előfordulását, de ez olyan gyors művelet, hogy benne hagyhatod őket, és figyelmen kívül hagyhatod.
|
||||
|
||||
### Az éjszakák számát jelző címkék eltávolítása
|
||||
|
||||
Ezeknek a címkéknek az eltávolítása az első lépés, amely kissé csökkenti a figyelembe veendő címkék számát. Ne feledd, hogy nem távolítod el őket az adatállományból, csak úgy döntesz, hogy nem veszed figyelembe őket értékként a vélemények adatállományában.
|
||||
|
||||
| Tartózkodás hossza | Szám |
|
||||
| ------------------ | ------ |
|
||||
| 1 éjszakát maradt | 193645 |
|
||||
| 2 éjszakát maradt | 133937 |
|
||||
| 3 éjszakát maradt | 95821 |
|
||||
| 4 éjszakát maradt | 47817 |
|
||||
| 5 éjszakát maradt | 20845 |
|
||||
| 6 éjszakát maradt | 9776 |
|
||||
| 7 éjszakát maradt | 7399 |
|
||||
| 8 éjszakát maradt | 2502 |
|
||||
| 9 éjszakát maradt | 1293 |
|
||||
| ... | ... |
|
||||
|
||||
Számos különféle szoba, lakosztály, stúdió, apartman stb. van. Mindegyik nagyjából ugyanazt jelenti, és nem releváns számodra, így távolítsd el őket a figyelembe vételből.
|
||||
|
||||
| Szobatípus | Szám |
|
||||
| --------------------------- | ------ |
|
||||
| Kétszemélyes szoba | 35207 |
|
||||
| Standard kétszemélyes szoba | 32248 |
|
||||
| Superior kétszemélyes szoba | 31393 |
|
||||
| Deluxe kétszemélyes szoba | 24823 |
|
||||
| Kétszemélyes vagy ikerszoba | 22393 |
|
||||
| Standard kétszemélyes vagy ikerszoba | 17483 |
|
||||
| Klasszikus kétszemélyes szoba | 16989 |
|
||||
| Superior kétszemélyes vagy ikerszoba | 13570 |
|
||||
|
||||
Végül, és ez örömteli (mivel nem igényelt sok feldolgozást), a következő *hasznos* címkék maradnak:
|
||||
|
||||
| Címke | Szám |
|
||||
| --------------------------------------------- | ------ |
|
||||
| Szabadidős utazás | 417778 |
|
||||
| Pár | 252294 |
|
||||
| Egyedül utazó | 108545 |
|
||||
| Üzleti út | 82939 |
|
||||
| Csoport (összevonva Barátokkal utazók címkével) | 67535 |
|
||||
| Fiatal gyermekes család | 61015 |
|
||||
| Idősebb gyermekes család | 26349 |
|
||||
| Háziállattal | 1405 |
|
||||
|
||||
Érvelhetsz azzal, hogy a `Barátokkal utazók` nagyjából ugyanaz, mint a `Csoport`, és ez igaz lenne, ha összevonnád őket, ahogy fentebb. A helyes címkék azonosításához szükséges kód megtalálható itt: [Tags notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb).
|
||||
|
||||
Az utolsó lépés az, hogy új oszlopokat hozz létre ezekhez a címkékhez. Ezután minden véleménysor esetében, ha a `Tag` oszlop megegyezik az egyik új oszloppal, adj hozzá egy 1-est, ha nem, adj hozzá egy 0-t. Az eredmény egy összesítés lesz arról, hogy hány véleményező választotta ezt a szállodát (összesítve) például üzleti vagy szabadidős célra, vagy hogy háziállattal érkezett-e, és ez hasznos információ lehet szálloda ajánlásakor.
|
||||
|
||||
```python
|
||||
# Process the Tags into new columns
|
||||
# The file Hotel_Reviews_Tags.py, identifies the most important tags
|
||||
# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends,
|
||||
# Family with young children, Family with older children, With a pet
|
||||
df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0)
|
||||
df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0)
|
||||
df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0)
|
||||
df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0)
|
||||
df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0)
|
||||
df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0)
|
||||
df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0)
|
||||
df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0)
|
||||
|
||||
```
|
||||
|
||||
### Az adatállomány mentése
|
||||
|
||||
Végül mentsd el az adatállományt az aktuális állapotában egy új néven.
|
||||
|
||||
```python
|
||||
df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True)
|
||||
|
||||
# Saving new data file with calculated columns
|
||||
print("Saving results to Hotel_Reviews_Filtered.csv")
|
||||
df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False)
|
||||
```
|
||||
|
||||
## Érzelemfelismerési műveletek
|
||||
|
||||
Ebben az utolsó szakaszban érzelemfelismerést alkalmazol a vélemény oszlopokra, és az eredményeket elmented egy adatállományban.
|
||||
|
||||
## Gyakorlat: a szűrt adatok betöltése és mentése
|
||||
|
||||
Ne feledd, hogy most a korábban mentett szűrt adatállományt töltöd be, **nem** az eredeti adatállományt.
|
||||
|
||||
```python
|
||||
import time
|
||||
import pandas as pd
|
||||
import nltk as nltk
|
||||
from nltk.corpus import stopwords
|
||||
from nltk.sentiment.vader import SentimentIntensityAnalyzer
|
||||
nltk.download('vader_lexicon')
|
||||
|
||||
# Load the filtered hotel reviews from CSV
|
||||
df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv')
|
||||
|
||||
# You code will be added here
|
||||
|
||||
|
||||
# Finally remember to save the hotel reviews with new NLP data added
|
||||
print("Saving results to Hotel_Reviews_NLP.csv")
|
||||
df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False)
|
||||
```
|
||||
|
||||
### Stop szavak eltávolítása
|
||||
|
||||
Ha érzelemfelismerést futtatnál a negatív és pozitív vélemény oszlopokon, az hosszú időt vehet igénybe. Egy erős teszt laptopon, gyors CPU-val tesztelve 12-14 percet vett igénybe, attól függően, hogy melyik érzelemfelismerési könyvtárat használták. Ez viszonylag hosszú idő, így érdemes megvizsgálni, hogy lehet-e gyorsítani.
|
||||
|
||||
A stop szavak, vagyis olyan gyakori angol szavak eltávolítása, amelyek nem változtatják meg egy mondat érzelmi töltetét, az első lépés. Ezek eltávolításával az érzelemfelismerés gyorsabban fut, de nem lesz kevésbé pontos (mivel a stop szavak nem befolyásolják az érzelmi töltetet, de lassítják az elemzést).
|
||||
|
||||
A leghosszabb negatív vélemény 395 szóból állt, de a stop szavak eltávolítása után 195 szóból.
|
||||
|
||||
A stop szavak eltávolítása szintén gyors művelet, 515,000 sorból álló 2 vélemény oszlopból a stop szavak eltávolítása 3,3 másodpercet vett igénybe a teszt eszközön. Ez kissé több vagy kevesebb időt vehet igénybe nálad, attól függően, hogy milyen gyors a CPU-d, mennyi RAM-od van, van-e SSD-d, és néhány más tényezőtől. A művelet relatív rövidsége azt jelenti, hogy ha javítja az érzelemfelismerés idejét, akkor érdemes elvégezni.
|
||||
|
||||
@@CODE_BLOCK_
|
||||
Az NLTK különböző érzelemelemzőket kínál, amelyekkel tanulhatsz, és helyettesítheted őket, hogy megnézd, az érzelem mennyire pontos vagy kevésbé pontos. Itt a VADER érzelemelemzést használjuk.
|
||||
|
||||
> Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, 2014. június.
|
||||
|
||||
```python
|
||||
from nltk.sentiment.vader import SentimentIntensityAnalyzer
|
||||
|
||||
# Create the vader sentiment analyser (there are others in NLTK you can try too)
|
||||
vader_sentiment = SentimentIntensityAnalyzer()
|
||||
# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014.
|
||||
|
||||
# There are 3 possibilities of input for a review:
|
||||
# It could be "No Negative", in which case, return 0
|
||||
# It could be "No Positive", in which case, return 0
|
||||
# It could be a review, in which case calculate the sentiment
|
||||
def calc_sentiment(review):
|
||||
if review == "No Negative" or review == "No Positive":
|
||||
return 0
|
||||
return vader_sentiment.polarity_scores(review)["compound"]
|
||||
```
|
||||
|
||||
Később, amikor a programodban készen állsz az érzelem kiszámítására, alkalmazhatod azt minden egyes értékelésre az alábbi módon:
|
||||
|
||||
```python
|
||||
# Add a negative sentiment and positive sentiment column
|
||||
print("Calculating sentiment columns for both positive and negative reviews")
|
||||
start = time.time()
|
||||
df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment)
|
||||
df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment)
|
||||
end = time.time()
|
||||
print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds")
|
||||
```
|
||||
|
||||
Ez körülbelül 120 másodpercet vesz igénybe a számítógépemen, de ez minden gépen eltérő lehet. Ha ki szeretnéd nyomtatni az eredményeket, és megnézni, hogy az érzelem megfelel-e az értékelésnek:
|
||||
|
||||
```python
|
||||
df = df.sort_values(by=["Negative_Sentiment"], ascending=True)
|
||||
print(df[["Negative_Review", "Negative_Sentiment"]])
|
||||
df = df.sort_values(by=["Positive_Sentiment"], ascending=True)
|
||||
print(df[["Positive_Review", "Positive_Sentiment"]])
|
||||
```
|
||||
|
||||
Az utolsó dolog, amit a fájllal meg kell tenni, mielőtt a kihívásban használnád, az az, hogy elmented! Érdemes átrendezni az összes új oszlopot is, hogy könnyebb legyen velük dolgozni (emberi szempontból ez csak egy kozmetikai változtatás).
|
||||
|
||||
```python
|
||||
# Reorder the columns (This is cosmetic, but to make it easier to explore the data later)
|
||||
df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1)
|
||||
|
||||
print("Saving results to Hotel_Reviews_NLP.csv")
|
||||
df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False)
|
||||
```
|
||||
|
||||
Az egész kódot futtatnod kell [az elemző jegyzetfüzethez](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (miután futtattad [a szűrő jegyzetfüzetet](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb), hogy létrehozd a Hotel_Reviews_Filtered.csv fájlt).
|
||||
|
||||
Összefoglalva, a lépések:
|
||||
|
||||
1. Az eredeti adatállomány **Hotel_Reviews.csv** a korábbi leckében került feltárásra [az explorer jegyzetfüzettel](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb)
|
||||
2. A Hotel_Reviews.csv fájlt [a szűrő jegyzetfüzet](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) szűri, amelynek eredménye **Hotel_Reviews_Filtered.csv**
|
||||
3. A Hotel_Reviews_Filtered.csv fájlt [az érzelemelemző jegyzetfüzet](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) dolgozza fel, amelynek eredménye **Hotel_Reviews_NLP.csv**
|
||||
4. Használd a Hotel_Reviews_NLP.csv fájlt az alábbi NLP kihívásban
|
||||
|
||||
### Következtetés
|
||||
|
||||
Amikor elkezdted, volt egy adatállományod oszlopokkal és adatokkal, de nem mindegyik volt ellenőrizhető vagy használható. Feltártad az adatokat, kiszűrted, amire nincs szükséged, átalakítottad a címkéket valami hasznosabbá, kiszámítottad a saját átlagokat, hozzáadtál néhány érzelem oszlopot, és remélhetőleg érdekes dolgokat tanultál a természetes szöveg feldolgozásáról.
|
||||
|
||||
## [Utólagos kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Kihívás
|
||||
|
||||
Most, hogy elemezted az adatállományt érzelem szempontjából, próbáld meg alkalmazni azokat a stratégiákat, amelyeket ebben a tananyagban tanultál (például klaszterezést), hogy mintákat találj az érzelmek körül.
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Vedd fel [ezt a Learn modult](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott), hogy többet tanulj, és különböző eszközöket használj az érzelmek feltárására a szövegben.
|
||||
|
||||
## Feladat
|
||||
|
||||
[Próbálj ki egy másik adatállományt](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "daf144daa552da6a7d442aff6f3e77d8",
|
||||
"translation_date": "2025-09-05T17:10:08+00:00",
|
||||
"source_file": "6-NLP/5-Hotel-Reviews-2/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Próbálj ki egy másik adatállományt
|
||||
|
||||
## Útmutató
|
||||
|
||||
Most, hogy megtanultad, hogyan használhatod az NLTK-t szövegek érzelmi töltetének meghatározására, próbálj ki egy másik adatállományt. Valószínűleg szükséged lesz némi adatfeldolgozásra, ezért hozz létre egy notebookot, és dokumentáld a gondolatmenetedet. Mit fedezel fel?
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------- |
|
||||
| | Egy teljes notebook és adatállomány van bemutatva, jól dokumentált cellákkal, amelyek magyarázzák az érzelmi töltet meghatározását | A notebookból hiányoznak jó magyarázatok | A notebook hibás |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget az ebből a fordításból eredő félreértésekért vagy téves értelmezésekért.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T17:10:44+00:00",
|
||||
"source_file": "6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "81db6ff2cf6e62fbe2340b094bb9509e",
|
||||
"translation_date": "2025-09-05T17:10:30+00:00",
|
||||
"source_file": "6-NLP/5-Hotel-Reviews-2/solution/R/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
ez egy ideiglenes helyőrző
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "ee0670655c89e4719319764afb113624",
|
||||
"translation_date": "2025-09-05T16:59:09+00:00",
|
||||
"source_file": "6-NLP/data/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
Töltse le a szállodai értékelési adatokat ebbe a mappába.
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,199 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "662b509c39eee205687726636d0a8455",
|
||||
"translation_date": "2025-09-05T15:33:09+00:00",
|
||||
"source_file": "7-TimeSeries/1-Introduction/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Bevezetés az idősoros előrejelzésbe
|
||||
|
||||

|
||||
|
||||
> Vázlatrajz: [Tomomi Imura](https://www.twitter.com/girlie_mac)
|
||||
|
||||
Ebben és a következő leckében megismerkedhetsz az idősoros előrejelzéssel, amely a gépi tanulás tudományának egy érdekes és értékes, bár kevésbé ismert területe. Az idősoros előrejelzés olyan, mint egy „varázsgömb”: egy változó, például ár múltbeli teljesítménye alapján megjósolhatod annak jövőbeli potenciális értékét.
|
||||
|
||||
[](https://youtu.be/cBojo1hsHiI "Bevezetés az idősoros előrejelzésbe")
|
||||
|
||||
> 🎥 Kattints a fenti képre az idősoros előrejelzésről szóló videóért
|
||||
|
||||
## [Előzetes kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
Ez egy hasznos és érdekes terület, amely valódi értéket képvisel az üzleti életben, mivel közvetlenül alkalmazható árképzési, készletgazdálkodási és ellátási lánc problémákra. Bár a mélytanulási technikák egyre inkább használatosak a jövőbeli teljesítmény jobb előrejelzésére, az idősoros előrejelzés továbbra is nagyrészt a klasszikus gépi tanulási technikákra támaszkodik.
|
||||
|
||||
> A Penn State hasznos idősoros tananyaga [itt található](https://online.stat.psu.edu/stat510/lesson/1)
|
||||
|
||||
## Bevezetés
|
||||
|
||||
Tegyük fel, hogy egy sor okos parkolóórát üzemeltetsz, amelyek adatokat szolgáltatnak arról, hogy milyen gyakran és mennyi ideig használják őket az idő múlásával.
|
||||
|
||||
> Mi lenne, ha meg tudnád jósolni a parkolóóra jövőbeli értékét a kereslet és kínálat törvényei alapján, a múltbeli teljesítményére alapozva?
|
||||
|
||||
Pontosan megjósolni, mikor kell cselekedni a cél elérése érdekében, egy olyan kihívás, amelyet az idősoros előrejelzés segítségével lehet megoldani. Bár nem örülnének az emberek, ha forgalmas időszakokban többet kellene fizetniük parkolóhelyért, ez biztos módja lenne a bevétel növelésének, például az utcák tisztítására.
|
||||
|
||||
Nézzük meg néhány idősoros algoritmus típusát, és kezdjünk el egy notebookot az adatok tisztítására és előkészítésére. Az elemzendő adatok a GEFCom2014 előrejelzési versenyből származnak. Ez 3 évnyi óránkénti villamosenergia-fogyasztási és hőmérsékleti adatokat tartalmaz 2012 és 2014 között. A villamosenergia-fogyasztás és a hőmérséklet történelmi mintái alapján megjósolhatod a villamosenergia-fogyasztás jövőbeli értékeit.
|
||||
|
||||
Ebben a példában megtanulod, hogyan lehet egy időlépést előre jelezni, kizárólag a történelmi fogyasztási adatok alapján. Mielőtt azonban elkezdenéd, hasznos megérteni, mi zajlik a háttérben.
|
||||
|
||||
## Néhány definíció
|
||||
|
||||
Amikor az „idősor” kifejezéssel találkozol, fontos megérteni annak használatát különböző kontextusokban.
|
||||
|
||||
🎓 **Idősor**
|
||||
|
||||
A matematikában az „idősor egy időrendben indexelt (vagy listázott vagy grafikonon ábrázolt) adatpontok sorozata. Leggyakrabban az idősor egy sorozat, amelyet egymást követő, egyenlő időközönként vesznek fel.” Az idősor egyik példája a [Dow Jones ipari átlag](https://wikipedia.org/wiki/Time_series) napi záróértéke. Az idősorok grafikonjainak és statisztikai modellezésének használata gyakran előfordul jelanalízisben, időjárás-előrejelzésben, földrengés-előrejelzésben és más olyan területeken, ahol események történnek, és adatpontokat lehet időben ábrázolni.
|
||||
|
||||
🎓 **Idősoros elemzés**
|
||||
|
||||
Az idősoros elemzés az előbb említett idősoros adatok elemzése. Az idősoros adatok különböző formákat ölthetnek, beleértve az „megszakított idősorokat”, amelyek mintákat észlelnek egy idősor fejlődésében egy megszakító esemény előtt és után. Az idősorhoz szükséges elemzés típusa az adatok természetétől függ. Az idősoros adatok maguk is lehetnek számok vagy karakterek sorozatai.
|
||||
|
||||
Az elvégzendő elemzés különféle módszereket használ, beleértve a frekvenciatartományt és az időtartományt, lineáris és nemlineáris módszereket, és még sok mást. [Tudj meg többet](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) az ilyen típusú adatok elemzésének számos módjáról.
|
||||
|
||||
🎓 **Idősoros előrejelzés**
|
||||
|
||||
Az idősoros előrejelzés egy modell használata a jövőbeli értékek megjóslására, a korábban gyűjtött adatok által mutatott minták alapján. Bár regressziós modellekkel is lehet idősoros adatokat vizsgálni, ahol az időindexek x változóként jelennek meg egy grafikonon, az ilyen adatokat leginkább speciális típusú modellekkel lehet elemezni.
|
||||
|
||||
Az idősoros adatok egy rendezett megfigyelések listája, szemben a lineáris regresszióval elemezhető adatokkal. A leggyakoribb modell az ARIMA, amely az „Autoregresszív Integrált Mozgó Átlag” rövidítése.
|
||||
|
||||
[ARIMA modellek](https://online.stat.psu.edu/stat510/lesson/1/1.1) „kapcsolatot teremtenek egy sorozat jelenlegi értéke és a múltbeli értékek, valamint a múltbeli előrejelzési hibák között.” Ezek leginkább az időtartományban rendezett adatok elemzésére alkalmasak.
|
||||
|
||||
> Az ARIMA modelleknek több típusa van, amelyekről [itt](https://people.duke.edu/~rnau/411arim.htm) tudhatsz meg többet, és amelyeket a következő leckében érinteni fogsz.
|
||||
|
||||
A következő leckében egy ARIMA modellt fogsz építeni [Univariáns Idősorok](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm) használatával, amely egyetlen változóra összpontosít, amely idővel változtatja értékét. Az ilyen típusú adatok egyik példája [ez az adatállomány](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm), amely a Mauna Loa Obszervatóriumban mért havi CO2 koncentrációt rögzíti:
|
||||
|
||||
| CO2 | YearMonth | Year | Month |
|
||||
| :----: | :-------: | :---: | :---: |
|
||||
| 330.62 | 1975.04 | 1975 | 1 |
|
||||
| 331.40 | 1975.13 | 1975 | 2 |
|
||||
| 331.87 | 1975.21 | 1975 | 3 |
|
||||
| 333.18 | 1975.29 | 1975 | 4 |
|
||||
| 333.92 | 1975.38 | 1975 | 5 |
|
||||
| 333.43 | 1975.46 | 1975 | 6 |
|
||||
| 331.85 | 1975.54 | 1975 | 7 |
|
||||
| 330.01 | 1975.63 | 1975 | 8 |
|
||||
| 328.51 | 1975.71 | 1975 | 9 |
|
||||
| 328.41 | 1975.79 | 1975 | 10 |
|
||||
| 329.25 | 1975.88 | 1975 | 11 |
|
||||
| 330.97 | 1975.96 | 1975 | 12 |
|
||||
|
||||
✅ Azonosítsd a változót, amely idővel változik ebben az adatállományban.
|
||||
|
||||
## Az idősoros adatok jellemzői, amelyeket figyelembe kell venni
|
||||
|
||||
Amikor idősoros adatokat vizsgálsz, észreveheted, hogy [bizonyos jellemzőkkel](https://online.stat.psu.edu/stat510/lesson/1/1.1) rendelkeznek, amelyeket figyelembe kell venni és csökkenteni kell, hogy jobban megértsd a mintáikat. Ha az idősoros adatokat potenciálisan egy „jelként” tekinted, amelyet elemezni szeretnél, ezek a jellemzők „zajként” is felfoghatók. Gyakran szükséges csökkenteni ezt a „zajt” bizonyos statisztikai technikák alkalmazásával.
|
||||
|
||||
Íme néhány fogalom, amelyet ismerned kell ahhoz, hogy idősoros adatokkal dolgozhass:
|
||||
|
||||
🎓 **Trendek**
|
||||
|
||||
A trendek idővel mérhető növekedéseket és csökkenéseket jelentenek. [Olvass többet](https://machinelearningmastery.com/time-series-trends-in-python). Az idősorok kontextusában arról van szó, hogyan lehet használni, és ha szükséges, eltávolítani a trendeket az idősorokból.
|
||||
|
||||
🎓 **[Szezonális hatások](https://machinelearningmastery.com/time-series-seasonality-with-python/)**
|
||||
|
||||
A szezonális hatások olyan időszakos ingadozások, mint például az ünnepi rohamok, amelyek befolyásolhatják az értékesítést. [Nézd meg](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm), hogyan jelennek meg a szezonális hatások különböző típusú grafikonokon.
|
||||
|
||||
🎓 **Szélsőséges értékek**
|
||||
|
||||
A szélsőséges értékek messze esnek az adatok szokásos szórásától.
|
||||
|
||||
🎓 **Hosszú távú ciklus**
|
||||
|
||||
A szezonális hatásoktól függetlenül az adatok hosszú távú ciklust is mutathatnak, például egy gazdasági visszaesést, amely egy évnél tovább tart.
|
||||
|
||||
🎓 **Állandó szórás**
|
||||
|
||||
Idővel néhány adat állandó ingadozásokat mutat, például napi és éjszakai energiafogyasztás.
|
||||
|
||||
🎓 **Hirtelen változások**
|
||||
|
||||
Az adatok hirtelen változást mutathatnak, amely további elemzést igényelhet. Például a COVID miatt hirtelen bezáró üzletek változásokat okoztak az adatokban.
|
||||
|
||||
✅ Itt van egy [példa idősoros grafikon](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python), amely néhány év alatt napi játékon belüli pénzköltést mutat. Felismered az adatokban a fent felsorolt jellemzők bármelyikét?
|
||||
|
||||

|
||||
|
||||
## Gyakorlat - kezdjük az energiafogyasztási adatokkal
|
||||
|
||||
Kezdjünk el létrehozni egy idősoros modellt, amely a múltbeli fogyasztás alapján megjósolja a jövőbeli energiafogyasztást.
|
||||
|
||||
> Az adatok ebben a példában a GEFCom2014 előrejelzési versenyből származnak. Ez 3 évnyi óránkénti villamosenergia-fogyasztási és hőmérsékleti adatokat tartalmaz 2012 és 2014 között.
|
||||
>
|
||||
> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli és Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, July-September, 2016.
|
||||
|
||||
1. Nyisd meg a `working` mappában található _notebook.ipynb_ fájlt. Kezdd azzal, hogy hozzáadod azokat a könyvtárakat, amelyek segítenek az adatok betöltésében és vizualizálásában:
|
||||
|
||||
```python
|
||||
import os
|
||||
import matplotlib.pyplot as plt
|
||||
from common.utils import load_data
|
||||
%matplotlib inline
|
||||
```
|
||||
|
||||
Figyelj arra, hogy a `common` mappában található fájlokat használod, amelyek beállítják a környezetet és kezelik az adatok letöltését.
|
||||
|
||||
2. Ezután vizsgáld meg az adatokat egy dataframe-ként, a `load_data()` és `head()` hívásával:
|
||||
|
||||
```python
|
||||
data_dir = './data'
|
||||
energy = load_data(data_dir)[['load']]
|
||||
energy.head()
|
||||
```
|
||||
|
||||
Láthatod, hogy két oszlop van, amelyek az időpontot és a fogyasztást képviselik:
|
||||
|
||||
| | load |
|
||||
| :-----------------: | :----: |
|
||||
| 2012-01-01 00:00:00 | 2698.0 |
|
||||
| 2012-01-01 01:00:00 | 2558.0 |
|
||||
| 2012-01-01 02:00:00 | 2444.0 |
|
||||
| 2012-01-01 03:00:00 | 2402.0 |
|
||||
| 2012-01-01 04:00:00 | 2403.0 |
|
||||
|
||||
3. Most ábrázold az adatokat a `plot()` hívásával:
|
||||
|
||||
```python
|
||||
energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)
|
||||
plt.xlabel('timestamp', fontsize=12)
|
||||
plt.ylabel('load', fontsize=12)
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
4. Ezután ábrázold 2014 júliusának első hetét, az `energy` bemenetként való megadásával `[kezdő dátum]:[záró dátum]` mintában:
|
||||
|
||||
```python
|
||||
energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)
|
||||
plt.xlabel('timestamp', fontsize=12)
|
||||
plt.ylabel('load', fontsize=12)
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
Gyönyörű grafikon! Nézd meg ezeket a grafikonokat, és próbáld meg meghatározni a fent felsorolt jellemzők bármelyikét. Mit tudunk megállapítani az adatok vizualizálásával?
|
||||
|
||||
A következő leckében egy ARIMA modellt fogsz létrehozni, hogy előrejelzéseket készíts.
|
||||
|
||||
---
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
Készíts listát az összes olyan iparágról és kutatási területről, amely szerinted hasznot húzhat az idősoros előrejelzésből. Eszedbe jut olyan alkalmazás ezekre a technikákra a művészetekben? Az ökonometriában? Az ökológiában? A kiskereskedelemben? Az iparban? A pénzügyekben? Hol máshol?
|
||||
|
||||
## [Utólagos kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Bár itt nem foglalkozunk velük, a neurális hálózatokat néha használják az idősoros előrejelzés klasszikus módszereinek kiegészítésére. Olvass róluk többet [ebben a cikkben](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412)
|
||||
|
||||
## Feladat
|
||||
|
||||
[Vizualizálj további idősorokat](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az [Co-op Translator](https://github.com/Azure/co-op-translator) AI fordítási szolgáltatás segítségével került lefordításra. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "d1781b0b92568ea1d119d0a198b576b4",
|
||||
"translation_date": "2025-09-05T15:35:19+00:00",
|
||||
"source_file": "7-TimeSeries/1-Introduction/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Vizualizálj néhány további idősort
|
||||
|
||||
## Útmutató
|
||||
|
||||
Elkezdted megismerni az idősort előrejelző modellezést azáltal, hogy megvizsgáltad azokat az adattípusokat, amelyekhez ez a speciális modellezés szükséges. Már vizualizáltál néhány adatot az energiával kapcsolatban. Most keress más adatokat, amelyek hasznosak lehetnek az idősort előrejelző modellezéshez. Találj három példát (próbáld ki a [Kaggle](https://kaggle.com) és az [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott) oldalakat), és készíts egy notebookot, amelyben vizualizálod őket. Jegyezd fel a notebookban az adatok bármilyen különleges jellemzőit (szezonális minták, hirtelen változások vagy más trendek).
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szoruló |
|
||||
| --------- | ---------------------------------------------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
||||
| | Három adatkészlet van ábrázolva és magyarázva a notebookban | Két adatkészlet van ábrázolva és magyarázva a notebookban | Kevés adatkészlet van ábrázolva vagy magyarázva a notebookban, vagy az adatok nem elegendőek |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T15:35:58+00:00",
|
||||
"source_file": "7-TimeSeries/1-Introduction/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget az ebből a fordításból eredő félreértésekért vagy téves értelmezésekért.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "81db6ff2cf6e62fbe2340b094bb9509e",
|
||||
"translation_date": "2025-09-05T15:35:43+00:00",
|
||||
"source_file": "7-TimeSeries/1-Introduction/solution/R/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
ez egy ideiglenes helyőrző
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,406 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "917dbf890db71a322f306050cb284749",
|
||||
"translation_date": "2025-09-05T15:29:04+00:00",
|
||||
"source_file": "7-TimeSeries/2-ARIMA/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Idősorok előrejelzése ARIMA-val
|
||||
|
||||
Az előző leckében megismerkedtél az idősorok előrejelzésének alapjaival, és betöltöttél egy adatállományt, amely az elektromos terhelés ingadozásait mutatja egy időszak alatt.
|
||||
|
||||
[](https://youtu.be/IUSk-YDau10 "Bevezetés az ARIMA-ba")
|
||||
|
||||
> 🎥 Kattints a fenti képre egy videóért: Rövid bevezetés az ARIMA modellekbe. Az példa R-ben készült, de a koncepciók univerzálisak.
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Bevezetés
|
||||
|
||||
Ebben a leckében megismerkedsz az [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) modellek építésének egy konkrét módjával. Az ARIMA modellek különösen alkalmasak olyan adatok illesztésére, amelyek [nem állomásosak](https://wikipedia.org/wiki/Stationary_process).
|
||||
|
||||
## Általános fogalmak
|
||||
|
||||
Ahhoz, hogy ARIMA-val dolgozhass, néhány alapfogalmat ismerned kell:
|
||||
|
||||
- 🎓 **Állomásosság**. Statisztikai értelemben az állomásosság olyan adatokra utal, amelyek eloszlása nem változik időbeli eltolás esetén. A nem állomásos adatok ingadozásokat mutatnak trendek miatt, amelyeket át kell alakítani az elemzéshez. Például a szezonális hatások ingadozásokat okozhatnak az adatokban, amelyeket 'szezonális differenciálás' révén lehet eltávolítani.
|
||||
|
||||
- 🎓 **[Differenciálás](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. A differenciálás statisztikai értelemben az a folyamat, amely során a nem állomásos adatokat állomásossá alakítjuk az állandó trend eltávolításával. "A differenciálás eltávolítja az idősor szintjének változásait, megszünteti a trendet és a szezonális hatásokat, ezáltal stabilizálja az idősor átlagát." [Shixiong et al tanulmánya](https://arxiv.org/abs/1904.07632)
|
||||
|
||||
## ARIMA az idősorok kontextusában
|
||||
|
||||
Nézzük meg az ARIMA részeit, hogy jobban megértsük, hogyan segít az idősorok modellezésében és előrejelzések készítésében.
|
||||
|
||||
- **AR - AutoRegresszív**. Az autoregresszív modellek, ahogy a nevük is sugallja, visszatekintenek az időben, hogy elemezzék az adatok korábbi értékeit, és feltételezéseket tegyenek róluk. Ezeket a korábbi értékeket 'késéseknek' nevezzük. Példa lehet a havi ceruzaeladások adatai. Minden hónap eladási összesítése az adathalmazban egy 'változó' lenne. Ez a modell úgy épül fel, hogy "az érdeklődésre számot tartó változót saját késleltetett (azaz korábbi) értékeire regresszálják." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average)
|
||||
|
||||
- **I - Integrált**. Az ARIMA modellekben az 'I' az *[integrált](https://wikipedia.org/wiki/Order_of_integration)* aspektusra utal. Az adatok 'integrálása' a differenciálási lépések alkalmazásával történik, hogy megszüntessük a nem állomásosságot.
|
||||
|
||||
- **MA - Mozgó Átlag**. A [mozgó átlag](https://wikipedia.org/wiki/Moving-average_model) aspektus az output változóra utal, amelyet a késések aktuális és korábbi értékeinek megfigyelésével határozunk meg.
|
||||
|
||||
Összefoglalva: Az ARIMA-t arra használjuk, hogy a modell minél jobban illeszkedjen az idősorok speciális formájához.
|
||||
|
||||
## Gyakorlat - ARIMA modell építése
|
||||
|
||||
Nyisd meg a [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) mappát ebben a leckében, és keresd meg a [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb) fájlt.
|
||||
|
||||
1. Futtasd a notebookot, hogy betöltsd a `statsmodels` Python könyvtárat; erre szükséged lesz az ARIMA modellekhez.
|
||||
|
||||
1. Töltsd be a szükséges könyvtárakat.
|
||||
|
||||
1. Most tölts be néhány további könyvtárat, amelyek hasznosak az adatok ábrázolásához:
|
||||
|
||||
```python
|
||||
import os
|
||||
import warnings
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import datetime as dt
|
||||
import math
|
||||
|
||||
from pandas.plotting import autocorrelation_plot
|
||||
from statsmodels.tsa.statespace.sarimax import SARIMAX
|
||||
from sklearn.preprocessing import MinMaxScaler
|
||||
from common.utils import load_data, mape
|
||||
from IPython.display import Image
|
||||
|
||||
%matplotlib inline
|
||||
pd.options.display.float_format = '{:,.2f}'.format
|
||||
np.set_printoptions(precision=2)
|
||||
warnings.filterwarnings("ignore") # specify to ignore warning messages
|
||||
```
|
||||
|
||||
1. Töltsd be az adatokat a `/data/energy.csv` fájlból egy Pandas dataframe-be, és nézd meg:
|
||||
|
||||
```python
|
||||
energy = load_data('./data')[['load']]
|
||||
energy.head(10)
|
||||
```
|
||||
|
||||
1. Ábrázold az összes elérhető energiaadatot 2012 januárjától 2014 decemberéig. Nem lesz meglepetés, hiszen ezt az adatot láttuk az előző leckében:
|
||||
|
||||
```python
|
||||
energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)
|
||||
plt.xlabel('timestamp', fontsize=12)
|
||||
plt.ylabel('load', fontsize=12)
|
||||
plt.show()
|
||||
```
|
||||
|
||||
Most építsünk egy modellt!
|
||||
|
||||
### Képzési és tesztelési adathalmazok létrehozása
|
||||
|
||||
Most, hogy betöltötted az adatokat, szétválaszthatod őket képzési és tesztelési halmazokra. A modell képzését a képzési halmazon végzed. Szokás szerint, miután a modell befejezte a képzést, a tesztelési halmazzal értékeled annak pontosságát. Biztosítanod kell, hogy a tesztelési halmaz egy későbbi időszakot fed le, mint a képzési halmaz, hogy a modell ne szerezzen információt a jövőbeli időszakokról.
|
||||
|
||||
1. Jelölj ki egy két hónapos időszakot 2014. szeptember 1-től október 31-ig a képzési halmaz számára. A tesztelési halmaz a 2014. november 1-től december 31-ig tartó két hónapos időszakot foglalja magában:
|
||||
|
||||
```python
|
||||
train_start_dt = '2014-11-01 00:00:00'
|
||||
test_start_dt = '2014-12-30 00:00:00'
|
||||
```
|
||||
|
||||
Mivel ezek az adatok az energia napi fogyasztását tükrözik, erős szezonális mintázat figyelhető meg, de a fogyasztás leginkább a legutóbbi napok fogyasztásához hasonló.
|
||||
|
||||
1. Vizualizáld a különbségeket:
|
||||
|
||||
```python
|
||||
energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \
|
||||
.join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \
|
||||
.plot(y=['train', 'test'], figsize=(15, 8), fontsize=12)
|
||||
plt.xlabel('timestamp', fontsize=12)
|
||||
plt.ylabel('load', fontsize=12)
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
Ezért viszonylag kis időablak használata elegendő lehet az adatok képzéséhez.
|
||||
|
||||
> Megjegyzés: Mivel az ARIMA modell illesztéséhez használt függvény a fitting során mintán belüli validációt alkalmaz, kihagyjuk a validációs adatokat.
|
||||
|
||||
### Az adatok előkészítése a képzéshez
|
||||
|
||||
Most elő kell készítened az adatokat a képzéshez, szűréssel és skálázással. Szűrd az adathalmazt, hogy csak a szükséges időszakokat és oszlopokat tartalmazza, és skálázd az adatokat, hogy az értékek a 0 és 1 közötti intervallumba essenek.
|
||||
|
||||
1. Szűrd az eredeti adathalmazt, hogy csak az említett időszakokat és a szükséges 'load' oszlopot, valamint a dátumot tartalmazza:
|
||||
|
||||
```python
|
||||
train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']]
|
||||
test = energy.copy()[energy.index >= test_start_dt][['load']]
|
||||
|
||||
print('Training data shape: ', train.shape)
|
||||
print('Test data shape: ', test.shape)
|
||||
```
|
||||
|
||||
Megnézheted az adatok alakját:
|
||||
|
||||
```output
|
||||
Training data shape: (1416, 1)
|
||||
Test data shape: (48, 1)
|
||||
```
|
||||
|
||||
1. Skálázd az adatokat, hogy a (0, 1) tartományba essenek.
|
||||
|
||||
```python
|
||||
scaler = MinMaxScaler()
|
||||
train['load'] = scaler.fit_transform(train)
|
||||
train.head(10)
|
||||
```
|
||||
|
||||
1. Vizualizáld az eredeti és a skálázott adatokat:
|
||||
|
||||
```python
|
||||
energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12)
|
||||
train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12)
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
> Az eredeti adatok
|
||||
|
||||

|
||||
|
||||
> A skálázott adatok
|
||||
|
||||
1. Most, hogy kalibráltad a skálázott adatokat, skálázd a tesztadatokat is:
|
||||
|
||||
```python
|
||||
test['load'] = scaler.transform(test)
|
||||
test.head()
|
||||
```
|
||||
|
||||
### ARIMA megvalósítása
|
||||
|
||||
Elérkezett az idő az ARIMA megvalósítására! Most használni fogod a korábban telepített `statsmodels` könyvtárat.
|
||||
|
||||
Kövesd az alábbi lépéseket:
|
||||
|
||||
1. Határozd meg a modellt a `SARIMAX()` meghívásával, és add meg a modell paramétereit: p, d, és q paraméterek, valamint P, D, és Q paraméterek.
|
||||
2. Készítsd elő a modellt a képzési adatokhoz a fit() függvény meghívásával.
|
||||
3. Készíts előrejelzéseket a `forecast()` függvény meghívásával, és add meg az előrejelzés lépéseinek számát (a `horizontot`).
|
||||
|
||||
> 🎓 Mire valók ezek a paraméterek? Az ARIMA modellben három paramétert használunk, amelyek segítenek az idősorok főbb aspektusainak modellezésében: szezonális hatások, trendek és zaj. Ezek a paraméterek:
|
||||
|
||||
`p`: az autoregresszív aspektushoz kapcsolódó paraméter, amely a *múltbeli* értékeket veszi figyelembe.
|
||||
`d`: az integrált részhez kapcsolódó paraméter, amely meghatározza, hogy mennyi *differenciálást* (🎓 emlékszel a differenciálásra 👆?) kell alkalmazni az idősorra.
|
||||
`q`: a mozgó átlag részhez kapcsolódó paraméter.
|
||||
|
||||
> Megjegyzés: Ha az adatok szezonális aspektussal rendelkeznek - mint ezek -, akkor szezonális ARIMA modellt (SARIMA) használunk. Ebben az esetben egy másik paraméterkészletet kell használni: `P`, `D`, és `Q`, amelyek ugyanazokat az összefüggéseket írják le, mint `p`, `d`, és `q`, de a modell szezonális komponenseire vonatkoznak.
|
||||
|
||||
1. Kezdd azzal, hogy beállítod a preferált horizontértéket. Próbáljunk ki 3 órát:
|
||||
|
||||
```python
|
||||
# Specify the number of steps to forecast ahead
|
||||
HORIZON = 3
|
||||
print('Forecasting horizon:', HORIZON, 'hours')
|
||||
```
|
||||
|
||||
Az ARIMA modell paramétereinek legjobb értékeinek kiválasztása kihívást jelenthet, mivel ez némileg szubjektív és időigényes. Érdemes lehet használni az `auto_arima()` függvényt a [`pyramid` könyvtárból](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html).
|
||||
|
||||
1. Egyelőre próbálj ki néhány manuális beállítást, hogy jó modellt találj.
|
||||
|
||||
```python
|
||||
order = (4, 1, 0)
|
||||
seasonal_order = (1, 1, 0, 24)
|
||||
|
||||
model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order)
|
||||
results = model.fit()
|
||||
|
||||
print(results.summary())
|
||||
```
|
||||
|
||||
Egy eredménytábla jelenik meg.
|
||||
|
||||
Elkészítetted az első modelledet! Most meg kell találnunk egy módot annak értékelésére.
|
||||
|
||||
### A modell értékelése
|
||||
|
||||
A modell értékeléséhez alkalmazhatod az úgynevezett `lépésről lépésre` validációt. A gyakorlatban az idősor modelleket minden alkalommal újra kell tanítani, amikor új adatok válnak elérhetővé. Ez lehetővé teszi, hogy a modell minden időlépésnél a legjobb előrejelzést készítse.
|
||||
|
||||
Ezzel a technikával az idősor elején kezdve tanítsd a modellt a képzési adathalmazon. Ezután készíts előrejelzést a következő időlépésre. Az előrejelzést összehasonlítjuk az ismert értékkel. A képzési halmazt ezután kibővítjük az ismert értékkel, és a folyamatot megismételjük.
|
||||
|
||||
> Megjegyzés: A képzési halmaz ablakát érdemes fixen tartani a hatékonyabb képzés érdekében, így minden alkalommal, amikor új megfigyelést adsz hozzá a képzési halmazhoz, eltávolítod az ablak elejéről a megfigyelést.
|
||||
|
||||
Ez a folyamat robusztusabb becslést nyújt arról, hogy a modell hogyan fog teljesíteni a gyakorlatban. Ugyanakkor számítási költséggel jár, mivel sok modellt kell létrehozni. Ez elfogadható, ha az adatok kicsik vagy a modell egyszerű, de problémát jelenthet nagyobb léptékben.
|
||||
|
||||
A lépésről lépésre validáció az idősor modellek értékelésének arany standardja, és ajánlott saját projektjeidhez.
|
||||
|
||||
1. Először hozz létre egy tesztadatpontot minden HORIZONT lépéshez.
|
||||
|
||||
```python
|
||||
test_shifted = test.copy()
|
||||
|
||||
for t in range(1, HORIZON+1):
|
||||
test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H')
|
||||
|
||||
test_shifted = test_shifted.dropna(how='any')
|
||||
test_shifted.head(5)
|
||||
```
|
||||
|
||||
| | | load | load+1 | load+2 |
|
||||
| ---------- | -------- | ---- | ------ | ------ |
|
||||
| 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 |
|
||||
| 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 |
|
||||
| 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 |
|
||||
| 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 |
|
||||
| 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 |
|
||||
|
||||
Az adatok vízszintesen eltolódnak a horizont pontja szerint.
|
||||
|
||||
1. Készíts előrejelzéseket a tesztadatokon ezzel a csúszó ablak megközelítéssel, a tesztadatok hosszának megfelelő méretű ciklusban:
|
||||
|
||||
```python
|
||||
%%time
|
||||
training_window = 720 # dedicate 30 days (720 hours) for training
|
||||
|
||||
train_ts = train['load']
|
||||
test_ts = test_shifted
|
||||
|
||||
history = [x for x in train_ts]
|
||||
history = history[(-training_window):]
|
||||
|
||||
predictions = list()
|
||||
|
||||
order = (2, 1, 0)
|
||||
seasonal_order = (1, 1, 0, 24)
|
||||
|
||||
for t in range(test_ts.shape[0]):
|
||||
model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order)
|
||||
model_fit = model.fit()
|
||||
yhat = model_fit.forecast(steps = HORIZON)
|
||||
predictions.append(yhat)
|
||||
obs = list(test_ts.iloc[t])
|
||||
# move the training window
|
||||
history.append(obs[0])
|
||||
history.pop(0)
|
||||
print(test_ts.index[t])
|
||||
print(t+1, ': predicted =', yhat, 'expected =', obs)
|
||||
```
|
||||
|
||||
Nézheted a képzés folyamatát:
|
||||
|
||||
```output
|
||||
2014-12-30 00:00:00
|
||||
1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323]
|
||||
|
||||
2014-12-30 01:00:00
|
||||
2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126]
|
||||
|
||||
2014-12-30 02:00:00
|
||||
3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795]
|
||||
```
|
||||
|
||||
1. Hasonlítsd össze az előrejelzéseket a tényleges terheléssel:
|
||||
|
||||
```python
|
||||
eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)])
|
||||
eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1]
|
||||
eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h')
|
||||
eval_df['actual'] = np.array(np.transpose(test_ts)).ravel()
|
||||
eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']])
|
||||
eval_df.head()
|
||||
```
|
||||
|
||||
Kimenet
|
||||
| | | timestamp | h | prediction | actual |
|
||||
| --- | ---------- | --------- | --- | ---------- | -------- |
|
||||
| 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 |
|
||||
| 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 |
|
||||
| 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 |
|
||||
| 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 |
|
||||
| 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 |
|
||||
|
||||
Figyeld meg az óránkénti adatok előrejelzését, összehasonlítva a tényleges terheléssel. Mennyire pontos ez?
|
||||
|
||||
### A modell pontosságának ellenőrzése
|
||||
|
||||
Ellenőrizd a modell pontosságát az összes előrejelzés átlagos abszolút százalékos hibájának (MAPE) tesztelésével.
|
||||
> **🧮 Mutasd a matematikát**
|
||||
>
|
||||
> 
|
||||
>
|
||||
> A [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) a predikció pontosságát mutatja egy arányként, amelyet a fenti képlet határoz meg. A tényleges és az előrejelzett érték közötti különbséget elosztjuk a tényleges értékkel.
|
||||
> "Ennek a számításnak az abszolút értékét minden előrejelzett időpontra összegezzük, majd elosztjuk az illesztett pontok számával, n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error)
|
||||
1. Fejezd ki az egyenletet kódban:
|
||||
|
||||
```python
|
||||
if(HORIZON > 1):
|
||||
eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual']
|
||||
print(eval_df.groupby('h')['APE'].mean())
|
||||
```
|
||||
|
||||
1. Számítsd ki az egy lépésre vonatkozó MAPE értéket:
|
||||
|
||||
```python
|
||||
print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%')
|
||||
```
|
||||
|
||||
Egy lépés előrejelzés MAPE: 0.5570581332313952 %
|
||||
|
||||
1. Nyomtasd ki a több lépésre vonatkozó előrejelzés MAPE értékét:
|
||||
|
||||
```python
|
||||
print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%')
|
||||
```
|
||||
|
||||
```output
|
||||
Multi-step forecast MAPE: 1.1460048657704118 %
|
||||
```
|
||||
|
||||
Egy alacsony szám a legjobb: gondolj arra, hogy egy előrejelzés, amelynek MAPE értéke 10, 10%-kal tér el.
|
||||
|
||||
1. De mint mindig, az ilyen pontosságmérést vizuálisan könnyebb megérteni, ezért ábrázoljuk:
|
||||
|
||||
```python
|
||||
if(HORIZON == 1):
|
||||
## Plotting single step forecast
|
||||
eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8))
|
||||
|
||||
else:
|
||||
## Plotting multi step forecast
|
||||
plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']]
|
||||
for t in range(1, HORIZON+1):
|
||||
plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values
|
||||
|
||||
fig = plt.figure(figsize=(15, 8))
|
||||
ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0)
|
||||
ax = fig.add_subplot(111)
|
||||
for t in range(1, HORIZON+1):
|
||||
x = plot_df['timestamp'][(t-1):]
|
||||
y = plot_df['t+'+str(t)][0:len(x)]
|
||||
ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t))
|
||||
|
||||
ax.legend(loc='best')
|
||||
|
||||
plt.xlabel('timestamp', fontsize=12)
|
||||
plt.ylabel('load', fontsize=12)
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
🏆 Egy nagyon szép ábra, amely egy jó pontosságú modellt mutat. Szép munka!
|
||||
|
||||
---
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
Merülj el az idősor modellek pontosságának tesztelési módjaiban. Ebben a leckében érintjük a MAPE-t, de vannak más módszerek, amelyeket használhatnál? Kutass utána, és jegyzeteld le őket. Egy hasznos dokumentumot itt találhatsz: [itt](https://otexts.com/fpp2/accuracy.html)
|
||||
|
||||
## [Utó-leckekvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Ez a lecke csak az ARIMA-val történő idősor előrejelzés alapjait érinti. Szánj időt arra, hogy elmélyítsd tudásodat, és nézd meg [ezt a repót](https://microsoft.github.io/forecasting/) és annak különböző modell típusait, hogy megtanuld, hogyan lehet más módokon idősor modelleket építeni.
|
||||
|
||||
## Feladat
|
||||
|
||||
[Egy új ARIMA modell](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "1c814013e10866dfd92cdb32caaae3ac",
|
||||
"translation_date": "2025-09-05T15:31:41+00:00",
|
||||
"source_file": "7-TimeSeries/2-ARIMA/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Egy új ARIMA modell
|
||||
|
||||
## Útmutató
|
||||
|
||||
Most, hogy elkészítettél egy ARIMA modellt, készíts egy újat friss adatokkal (próbáld ki [ezeket az adatokat a Duke-tól](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Jegyzeteld a munkádat egy notebookban, vizualizáld az adatokat és a modelledet, majd teszteld annak pontosságát MAPE segítségével.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiváló | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------- | ------------------------------------ |
|
||||
| | Egy notebook kerül bemutatásra, amelyben egy új ARIMA modell van felépítve, tesztelve és vizualizációkkal, valamint pontossággal magyarázva. | A bemutatott notebook nincs jegyzetelve, vagy hibákat tartalmaz | Egy hiányos notebook kerül bemutatásra |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget az ebből a fordításból eredő félreértésekért vagy téves értelmezésekért.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T15:32:16+00:00",
|
||||
"source_file": "7-TimeSeries/2-ARIMA/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "81db6ff2cf6e62fbe2340b094bb9509e",
|
||||
"translation_date": "2025-09-05T15:32:03+00:00",
|
||||
"source_file": "7-TimeSeries/2-ARIMA/solution/R/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
ez egy ideiglenes helyőrző
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,393 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "482bccabe1df958496ea71a3667995cd",
|
||||
"translation_date": "2025-09-05T15:36:39+00:00",
|
||||
"source_file": "7-TimeSeries/3-SVR/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Idősoros előrejelzés Support Vector Regressor segítségével
|
||||
|
||||
Az előző leckében megtanultad, hogyan használhatod az ARIMA modellt idősoros előrejelzések készítésére. Most a Support Vector Regressor modellel fogsz megismerkedni, amely egy regressziós modell folyamatos adatok előrejelzésére.
|
||||
|
||||
## [Előzetes kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Bevezetés
|
||||
|
||||
Ebben a leckében felfedezheted, hogyan építhetsz modelleket [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) segítségével regresszióhoz, vagyis **SVR: Support Vector Regressor**.
|
||||
|
||||
### SVR az idősoros előrejelzés kontextusában [^1]
|
||||
|
||||
Mielőtt megértenéd az SVR fontosságát az idősoros előrejelzésben, íme néhány fontos fogalom, amelyet ismerned kell:
|
||||
|
||||
- **Regresszió:** Felügyelt tanulási technika, amely folyamatos értékeket jósol meg egy adott bemeneti halmazból. Az ötlet az, hogy egy görbét (vagy egyenes vonalat) illesszünk a jellemzők terébe, amely a legtöbb adatpontot tartalmazza. [Kattints ide](https://en.wikipedia.org/wiki/Regression_analysis) további információért.
|
||||
- **Support Vector Machine (SVM):** Egy felügyelt gépi tanulási modell, amelyet osztályozásra, regresszióra és kiugró értékek detektálására használnak. A modell egy hipersík a jellemzők terében, amely osztályozás esetén határként, regresszió esetén pedig legjobban illeszkedő vonalként működik. Az SVM-ben általában Kernel függvényt használnak az adathalmaz magasabb dimenziójú térbe történő átalakítására, hogy könnyebben elválaszthatóak legyenek. [Kattints ide](https://en.wikipedia.org/wiki/Support-vector_machine) további információért az SVM-ekről.
|
||||
- **Support Vector Regressor (SVR):** Az SVM egy típusa, amely megtalálja a legjobban illeszkedő vonalat (ami az SVM esetében egy hipersík), amely a legtöbb adatpontot tartalmazza.
|
||||
|
||||
### Miért SVR? [^1]
|
||||
|
||||
Az előző leckében megismerkedtél az ARIMA modellel, amely egy nagyon sikeres statisztikai lineáris módszer idősoros adatok előrejelzésére. Azonban sok esetben az idősoros adatok *nemlinearitást* mutatnak, amelyet a lineáris modellek nem tudnak leképezni. Ilyen esetekben az SVM képessége, hogy figyelembe vegye az adatok nemlinearitását a regressziós feladatok során, sikeressé teszi az SVR-t az idősoros előrejelzésben.
|
||||
|
||||
## Gyakorlat - SVR modell építése
|
||||
|
||||
Az első néhány adat-előkészítési lépés megegyezik az előző [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) leckében tanultakkal.
|
||||
|
||||
Nyisd meg a [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) mappát ebben a leckében, és keresd meg a [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb) fájlt. [^2]
|
||||
|
||||
1. Futtasd a notebookot, és importáld a szükséges könyvtárakat: [^2]
|
||||
|
||||
```python
|
||||
import sys
|
||||
sys.path.append('../../')
|
||||
```
|
||||
|
||||
```python
|
||||
import os
|
||||
import warnings
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import datetime as dt
|
||||
import math
|
||||
|
||||
from sklearn.svm import SVR
|
||||
from sklearn.preprocessing import MinMaxScaler
|
||||
from common.utils import load_data, mape
|
||||
```
|
||||
|
||||
2. Töltsd be az adatokat a `/data/energy.csv` fájlból egy Pandas dataframe-be, és nézd meg: [^2]
|
||||
|
||||
```python
|
||||
energy = load_data('../../data')[['load']]
|
||||
```
|
||||
|
||||
3. Ábrázold az összes elérhető energiaadatot 2012 januárjától 2014 decemberéig: [^2]
|
||||
|
||||
```python
|
||||
energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)
|
||||
plt.xlabel('timestamp', fontsize=12)
|
||||
plt.ylabel('load', fontsize=12)
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
Most építsük meg az SVR modellünket.
|
||||
|
||||
### Képzési és tesztelési adathalmazok létrehozása
|
||||
|
||||
Most, hogy az adatok betöltve vannak, szétválaszthatod őket képzési és tesztelési halmazokra. Ezután átalakítod az adatokat időlépés-alapú adathalmazzá, amelyre szükség lesz az SVR-hez. A modell képzését a képzési halmazon végzed. Miután a modell befejezte a képzést, kiértékeled a pontosságát a képzési halmazon, a tesztelési halmazon, majd az egész adathalmazon, hogy láthasd az általános teljesítményt. Biztosítanod kell, hogy a tesztelési halmaz egy későbbi időszakot fedjen le, mint a képzési halmaz, hogy elkerüld, hogy a modell információt szerezzen a jövőbeli időszakokból [^2] (ezt a helyzetet *túltanulásnak* nevezzük).
|
||||
|
||||
1. Jelölj ki egy két hónapos időszakot 2014. szeptember 1-től október 31-ig a képzési halmaz számára. A tesztelési halmaz a 2014. november 1-től december 31-ig tartó két hónapos időszakot fogja tartalmazni: [^2]
|
||||
|
||||
```python
|
||||
train_start_dt = '2014-11-01 00:00:00'
|
||||
test_start_dt = '2014-12-30 00:00:00'
|
||||
```
|
||||
|
||||
2. Vizualizáld a különbségeket: [^2]
|
||||
|
||||
```python
|
||||
energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \
|
||||
.join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \
|
||||
.plot(y=['train', 'test'], figsize=(15, 8), fontsize=12)
|
||||
plt.xlabel('timestamp', fontsize=12)
|
||||
plt.ylabel('load', fontsize=12)
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
### Adatok előkészítése a képzéshez
|
||||
|
||||
Most elő kell készítened az adatokat a képzéshez, szűréssel és skálázással. Szűrd az adathalmazt, hogy csak a szükséges időszakokat és oszlopokat tartalmazza, majd skálázd az adatokat, hogy az értékek a 0 és 1 közötti intervallumba essenek.
|
||||
|
||||
1. Szűrd az eredeti adathalmazt, hogy csak az említett időszakokat és a szükséges 'load' oszlopot, valamint a dátumot tartalmazza: [^2]
|
||||
|
||||
```python
|
||||
train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']]
|
||||
test = energy.copy()[energy.index >= test_start_dt][['load']]
|
||||
|
||||
print('Training data shape: ', train.shape)
|
||||
print('Test data shape: ', test.shape)
|
||||
```
|
||||
|
||||
```output
|
||||
Training data shape: (1416, 1)
|
||||
Test data shape: (48, 1)
|
||||
```
|
||||
|
||||
2. Skálázd a képzési adatokat a (0, 1) tartományba: [^2]
|
||||
|
||||
```python
|
||||
scaler = MinMaxScaler()
|
||||
train['load'] = scaler.fit_transform(train)
|
||||
```
|
||||
|
||||
4. Most skálázd a tesztelési adatokat: [^2]
|
||||
|
||||
```python
|
||||
test['load'] = scaler.transform(test)
|
||||
```
|
||||
|
||||
### Adatok létrehozása időlépésekkel [^1]
|
||||
|
||||
Az SVR-hez az input adatokat `[batch, timesteps]` formára kell átalakítani. Ezért átalakítod a meglévő `train_data` és `test_data` adatokat úgy, hogy legyen egy új dimenzió, amely az időlépéseket jelöli.
|
||||
|
||||
```python
|
||||
# Converting to numpy arrays
|
||||
train_data = train.values
|
||||
test_data = test.values
|
||||
```
|
||||
|
||||
Ebben a példában `timesteps = 5` értéket veszünk. Tehát a modell bemenete az első 4 időlépés adatai lesznek, a kimenet pedig az 5. időlépés adatai.
|
||||
|
||||
```python
|
||||
timesteps=5
|
||||
```
|
||||
|
||||
A képzési adatok 2D tensorra való átalakítása beágyazott listakomprehenzióval:
|
||||
|
||||
```python
|
||||
train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0]
|
||||
train_data_timesteps.shape
|
||||
```
|
||||
|
||||
```output
|
||||
(1412, 5)
|
||||
```
|
||||
|
||||
A tesztelési adatok 2D tensorra való átalakítása:
|
||||
|
||||
```python
|
||||
test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0]
|
||||
test_data_timesteps.shape
|
||||
```
|
||||
|
||||
```output
|
||||
(44, 5)
|
||||
```
|
||||
|
||||
A képzési és tesztelési adatok bemeneteinek és kimeneteinek kiválasztása:
|
||||
|
||||
```python
|
||||
x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]]
|
||||
x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]]
|
||||
|
||||
print(x_train.shape, y_train.shape)
|
||||
print(x_test.shape, y_test.shape)
|
||||
```
|
||||
|
||||
```output
|
||||
(1412, 4) (1412, 1)
|
||||
(44, 4) (44, 1)
|
||||
```
|
||||
|
||||
### SVR megvalósítása [^1]
|
||||
|
||||
Most itt az ideje, hogy megvalósítsd az SVR-t. További információért erről a megvalósításról, olvasd el [ezt a dokumentációt](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). A mi megvalósításunkban a következő lépéseket követjük:
|
||||
|
||||
1. Definiáld a modellt az `SVR()` meghívásával, és add meg a modell hiperparamétereit: kernel, gamma, c és epsilon
|
||||
2. Készítsd elő a modellt a képzési adatokhoz az `fit()` függvény meghívásával
|
||||
3. Végezz előrejelzéseket az `predict()` függvény meghívásával
|
||||
|
||||
Most létrehozzuk az SVR modellt. Itt az [RBF kernel](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel) használatát választjuk, és a hiperparamétereket gamma, C és epsilon értékekre állítjuk: 0.5, 10 és 0.05.
|
||||
|
||||
```python
|
||||
model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05)
|
||||
```
|
||||
|
||||
#### Modell illesztése a képzési adatokra [^1]
|
||||
|
||||
```python
|
||||
model.fit(x_train, y_train[:,0])
|
||||
```
|
||||
|
||||
```output
|
||||
SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5,
|
||||
kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False)
|
||||
```
|
||||
|
||||
#### Modell előrejelzések készítése [^1]
|
||||
|
||||
```python
|
||||
y_train_pred = model.predict(x_train).reshape(-1,1)
|
||||
y_test_pred = model.predict(x_test).reshape(-1,1)
|
||||
|
||||
print(y_train_pred.shape, y_test_pred.shape)
|
||||
```
|
||||
|
||||
```output
|
||||
(1412, 1) (44, 1)
|
||||
```
|
||||
|
||||
Elkészítetted az SVR-t! Most ki kell értékelni.
|
||||
|
||||
### Modell kiértékelése [^1]
|
||||
|
||||
A kiértékeléshez először visszaskálázzuk az adatokat az eredeti skálára. Ezután az eredmény ellenőrzéséhez ábrázoljuk az eredeti és előrejelzett idősoros adatokat, valamint kiírjuk a MAPE eredményt.
|
||||
|
||||
Az előrejelzett és eredeti kimenet skálázása:
|
||||
|
||||
```python
|
||||
# Scaling the predictions
|
||||
y_train_pred = scaler.inverse_transform(y_train_pred)
|
||||
y_test_pred = scaler.inverse_transform(y_test_pred)
|
||||
|
||||
print(len(y_train_pred), len(y_test_pred))
|
||||
```
|
||||
|
||||
```python
|
||||
# Scaling the original values
|
||||
y_train = scaler.inverse_transform(y_train)
|
||||
y_test = scaler.inverse_transform(y_test)
|
||||
|
||||
print(len(y_train), len(y_test))
|
||||
```
|
||||
|
||||
#### Modell teljesítményének ellenőrzése a képzési és tesztelési adatokon [^1]
|
||||
|
||||
Kinyerjük az időbélyegeket az adathalmazból, hogy az x-tengelyen megjelenítsük őket. Ne feledd, hogy az első ```timesteps-1``` értékeket használjuk bemenetként az első kimenethez, így a kimenet időbélyegei ezután kezdődnek.
|
||||
|
||||
```python
|
||||
train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:]
|
||||
test_timestamps = energy[test_start_dt:].index[timesteps-1:]
|
||||
|
||||
print(len(train_timestamps), len(test_timestamps))
|
||||
```
|
||||
|
||||
```output
|
||||
1412 44
|
||||
```
|
||||
|
||||
A képzési adatok előrejelzéseinek ábrázolása:
|
||||
|
||||
```python
|
||||
plt.figure(figsize=(25,6))
|
||||
plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6)
|
||||
plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8)
|
||||
plt.legend(['Actual','Predicted'])
|
||||
plt.xlabel('Timestamp')
|
||||
plt.title("Training data prediction")
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
MAPE kiírása a képzési adatokra:
|
||||
|
||||
```python
|
||||
print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%')
|
||||
```
|
||||
|
||||
```output
|
||||
MAPE for training data: 1.7195710200875551 %
|
||||
```
|
||||
|
||||
A tesztelési adatok előrejelzéseinek ábrázolása:
|
||||
|
||||
```python
|
||||
plt.figure(figsize=(10,3))
|
||||
plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6)
|
||||
plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8)
|
||||
plt.legend(['Actual','Predicted'])
|
||||
plt.xlabel('Timestamp')
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
MAPE kiírása a tesztelési adatokra:
|
||||
|
||||
```python
|
||||
print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%')
|
||||
```
|
||||
|
||||
```output
|
||||
MAPE for testing data: 1.2623790187854018 %
|
||||
```
|
||||
|
||||
🏆 Nagyon jó eredményt értél el a tesztelési adathalmazon!
|
||||
|
||||
### Modell teljesítményének ellenőrzése a teljes adathalmazon [^1]
|
||||
|
||||
```python
|
||||
# Extracting load values as numpy array
|
||||
data = energy.copy().values
|
||||
|
||||
# Scaling
|
||||
data = scaler.transform(data)
|
||||
|
||||
# Transforming to 2D tensor as per model input requirement
|
||||
data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0]
|
||||
print("Tensor shape: ", data_timesteps.shape)
|
||||
|
||||
# Selecting inputs and outputs from data
|
||||
X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]]
|
||||
print("X shape: ", X.shape,"\nY shape: ", Y.shape)
|
||||
```
|
||||
|
||||
```output
|
||||
Tensor shape: (26300, 5)
|
||||
X shape: (26300, 4)
|
||||
Y shape: (26300, 1)
|
||||
```
|
||||
|
||||
```python
|
||||
# Make model predictions
|
||||
Y_pred = model.predict(X).reshape(-1,1)
|
||||
|
||||
# Inverse scale and reshape
|
||||
Y_pred = scaler.inverse_transform(Y_pred)
|
||||
Y = scaler.inverse_transform(Y)
|
||||
```
|
||||
|
||||
```python
|
||||
plt.figure(figsize=(30,8))
|
||||
plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6)
|
||||
plt.plot(Y_pred, color = 'blue', linewidth=0.8)
|
||||
plt.legend(['Actual','Predicted'])
|
||||
plt.xlabel('Timestamp')
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
```python
|
||||
print('MAPE: ', mape(Y_pred, Y)*100, '%')
|
||||
```
|
||||
|
||||
```output
|
||||
MAPE: 2.0572089029888656 %
|
||||
```
|
||||
|
||||
🏆 Nagyon szép ábrák, amelyek egy jó pontosságú modellt mutatnak. Szép munka!
|
||||
|
||||
---
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
- Próbáld meg módosítani a hiperparamétereket (gamma, C, epsilon) a modell létrehozásakor, és értékeld ki az adatokat, hogy lásd, melyik hiperparaméter-készlet adja a legjobb eredményeket a tesztelési adatokon. További információért ezekről a hiperparaméterekről olvasd el [ezt a dokumentumot](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel).
|
||||
- Próbálj ki különböző kernel függvényeket a modellhez, és elemezd a teljesítményüket az adathalmazon. Egy hasznos dokumentumot itt találhatsz: [kernel függvények](https://scikit-learn.org/stable/modules/svm.html#kernel-functions).
|
||||
- Próbálj ki különböző értékeket a `timesteps` paraméterhez, hogy a modell visszatekintve készítsen előrejelzést.
|
||||
|
||||
## [Utólagos kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
Ez a lecke az SVR alkalmazását mutatta be idősoros előrejelzéshez. További információért az SVR-ről olvasd el [ezt a blogot](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). Ez a [scikit-learn dokumentáció](https://scikit-learn.org/stable/modules/svm.html) átfogóbb magyarázatot nyújt az SVM-ekről általában, az [SVR-ekről](https://scikit-learn.org/stable/modules/svm.html#regression), valamint más megvalósítási részletekről, például a különböző [kernel függvényekről](https://scikit-learn.org/stable/modules/svm.html#kernel-functions), amelyek használhatók, és azok paramétereiről.
|
||||
|
||||
## Feladat
|
||||
|
||||
[Egy új SVR modell](assignment.md)
|
||||
|
||||
## Köszönet
|
||||
|
||||
[^1]: A szöveget, kódot és kimenetet ebben a szakaszban [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) készítette
|
||||
[^2]: A szöveget, kódot és kimenetet ebben a szakaszban az [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) leckéből vettük
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget az ebből a fordításból eredő félreértésekért vagy téves értelmezésekért.
|
@ -0,0 +1,29 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "94aa2fc6154252ae30a3f3740299707a",
|
||||
"translation_date": "2025-09-05T15:38:42+00:00",
|
||||
"source_file": "7-TimeSeries/3-SVR/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Egy új SVR modell
|
||||
|
||||
## Útmutató [^1]
|
||||
|
||||
Most, hogy elkészítettél egy SVR modellt, hozz létre egy újat friss adatokkal (próbáld ki [ezeket az adatokat a Duke-tól](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Jegyzeteld a munkádat egy notebookban, vizualizáld az adatokat és a modelledet, valamint teszteld annak pontosságát megfelelő grafikonok és MAPE segítségével. Próbáld ki a különböző hiperparaméterek módosítását, valamint különböző értékek használatát az időlépésekhez.
|
||||
|
||||
## Értékelési szempontok [^1]
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szoruló |
|
||||
| --------- | ----------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------- |
|
||||
| | Egy notebook kerül bemutatásra, amelyben egy SVR modell van felépítve, tesztelve és vizualizációkkal, valamint pontossággal magyarázva. | A bemutatott notebook nincs jegyzetelve, vagy hibákat tartalmaz. | Egy hiányos notebook kerül bemutatásra |
|
||||
|
||||
|
||||
|
||||
[^1]:A szöveg ebben a szekcióban az [ARIMA feladatból](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) származik.
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,37 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "61342603bad8acadbc6b2e4e3aab3f66",
|
||||
"translation_date": "2025-09-05T15:27:42+00:00",
|
||||
"source_file": "7-TimeSeries/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Bevezetés az időbeli előrejelzésbe
|
||||
|
||||
Mi az időbeli előrejelzés? A jövőbeli események előrejelzéséről szól, a múltbeli trendek elemzése alapján.
|
||||
|
||||
## Regionális téma: világszintű villamosenergia-felhasználás ✨
|
||||
|
||||
Ebben a két leckében megismerkedhetsz az időbeli előrejelzéssel, amely a gépi tanulás egy kevésbé ismert területe, de ennek ellenére rendkívül értékes az ipari és üzleti alkalmazások, valamint más területek számára. Bár neurális hálózatok is használhatók ezeknek a modelleknek a hasznosságának növelésére, mi a klasszikus gépi tanulás kontextusában fogjuk tanulmányozni őket, mivel a modellek segítenek a jövőbeli teljesítmény előrejelzésében a múlt alapján.
|
||||
|
||||
Regionális fókuszunk a világ villamosenergia-felhasználása, egy érdekes adatállomány, amely segít megtanulni, hogyan lehet előre jelezni a jövőbeli energiafelhasználást a múltbeli terhelési minták alapján. Láthatod, hogy az ilyen típusú előrejelzés mennyire hasznos lehet egy üzleti környezetben.
|
||||
|
||||

|
||||
|
||||
Fotó: [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) elektromos tornyokról egy úton Rádzsasztánban az [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) oldalán.
|
||||
|
||||
## Leckék
|
||||
|
||||
1. [Bevezetés az időbeli előrejelzésbe](1-Introduction/README.md)
|
||||
2. [ARIMA időbeli előrejelző modellek építése](2-ARIMA/README.md)
|
||||
3. [Support Vector Regressor építése időbeli előrejelzéshez](3-SVR/README.md)
|
||||
|
||||
## Köszönetnyilvánítás
|
||||
|
||||
Az "Bevezetés az időbeli előrejelzésbe" című anyagot ⚡️ írta [Francesca Lazzeri](https://twitter.com/frlazzeri) és [Jen Looper](https://twitter.com/jenlooper). A jegyzetfüzetek először az [Azure "Deep Learning For Time Series" repo](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) oldalán jelentek meg, amelyet eredetileg Francesca Lazzeri írt. Az SVR leckét [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) készítette.
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,256 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "911efd5e595089000cb3c16fce1beab8",
|
||||
"translation_date": "2025-09-05T16:38:33+00:00",
|
||||
"source_file": "8-Reinforcement/1-QLearning/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Bevezetés a megerősítéses tanulásba és a Q-tanulásba
|
||||
|
||||

|
||||
> Sketchnote: [Tomomi Imura](https://www.twitter.com/girlie_mac)
|
||||
|
||||
A megerősítéses tanulás három fontos fogalmat foglal magában: az ügynököt, az állapotokat és az állapotonkénti cselekvések halmazát. Egy adott állapotban végrehajtott cselekvésért az ügynök jutalmat kap. Képzeljük el újra a Super Mario számítógépes játékot. Te vagy Mario, egy pályán állsz egy szakadék szélén. Fölötted egy érme van. Az, hogy te Mario vagy, egy adott pályán, egy adott pozícióban... ez az állapotod. Ha egy lépést jobbra lépsz (egy cselekvés), leesel a szakadékba, és alacsony pontszámot kapsz. Ha viszont megnyomod az ugrás gombot, pontot szerzel, és életben maradsz. Ez egy pozitív kimenetel, amiért pozitív pontszámot kell kapnod.
|
||||
|
||||
A megerősítéses tanulás és egy szimulátor (a játék) segítségével megtanulhatod, hogyan játszd a játékot úgy, hogy maximalizáld a jutalmat, vagyis életben maradj, és minél több pontot szerezz.
|
||||
|
||||
[](https://www.youtube.com/watch?v=lDq_en8RNOo)
|
||||
|
||||
> 🎥 Kattints a fenti képre, hogy meghallgasd Dmitry előadását a megerősítéses tanulásról.
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Előfeltételek és beállítás
|
||||
|
||||
Ebben a leckében Pythonban fogunk kódot kipróbálni. Képesnek kell lenned futtatni a Jupyter Notebook kódját, akár a saját számítógépeden, akár a felhőben.
|
||||
|
||||
Megnyithatod [a lecke notebookját](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb), és végigmehetsz a leckén, hogy felépítsd a példát.
|
||||
|
||||
> **Megjegyzés:** Ha a kódot a felhőből nyitod meg, le kell töltened az [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) fájlt is, amelyet a notebook kód használ. Helyezd el ugyanabban a könyvtárban, ahol a notebook található.
|
||||
|
||||
## Bevezetés
|
||||
|
||||
Ebben a leckében **[Péter és a farkas](https://hu.wikipedia.org/wiki/P%C3%A9ter_%C3%A9s_a_farkas)** világát fogjuk felfedezni, amelyet egy orosz zeneszerző, [Szergej Prokofjev](https://hu.wikipedia.org/wiki/Szergej_Prokofjev) zenés meséje ihletett. A **megerősítéses tanulás** segítségével Pétert irányítjuk, hogy felfedezze a környezetét, ízletes almákat gyűjtsön, és elkerülje a farkassal való találkozást.
|
||||
|
||||
A **megerősítéses tanulás** (RL) egy olyan tanulási technika, amely lehetővé teszi számunkra, hogy egy **ügynök** optimális viselkedését tanuljuk meg egy adott **környezetben**, számos kísérlet lefuttatásával. Az ügynöknek ebben a környezetben van egy **célja**, amelyet egy **jutalomfüggvény** határoz meg.
|
||||
|
||||
## A környezet
|
||||
|
||||
Egyszerűség kedvéért tekintsük Péter világát egy `szélesség` x `magasság` méretű négyzet alakú táblának, például így:
|
||||
|
||||

|
||||
|
||||
A tábla minden cellája lehet:
|
||||
|
||||
* **talaj**, amin Péter és más lények járhatnak.
|
||||
* **víz**, amin nyilvánvalóan nem lehet járni.
|
||||
* **fa** vagy **fű**, ahol pihenni lehet.
|
||||
* egy **alma**, amit Péter örömmel találna meg, hogy táplálkozzon.
|
||||
* egy **farkas**, ami veszélyes, és el kell kerülni.
|
||||
|
||||
Van egy külön Python modul, az [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), amely tartalmazza a kódot a környezettel való munkához. Mivel ez a kód nem fontos a fogalmak megértéséhez, importáljuk a modult, és használjuk a minta tábla létrehozásához (kódblokk 1):
|
||||
|
||||
```python
|
||||
from rlboard import *
|
||||
|
||||
width, height = 8,8
|
||||
m = Board(width,height)
|
||||
m.randomize(seed=13)
|
||||
m.plot()
|
||||
```
|
||||
|
||||
Ez a kód egy, a fentiekhez hasonló környezetet fog megjeleníteni.
|
||||
|
||||
## Cselekvések és stratégia
|
||||
|
||||
Példánkban Péter célja az alma megtalálása, miközben elkerüli a farkast és más akadályokat. Ehhez lényegében addig sétálhat, amíg meg nem találja az almát.
|
||||
|
||||
Ezért bármely pozícióban választhat a következő cselekvések közül: fel, le, balra és jobbra.
|
||||
|
||||
Ezeket a cselekvéseket egy szótárként definiáljuk, és a megfelelő koordinátaváltozásokhoz rendeljük. Például a jobbra mozgás (`R`) egy `(1,0)` párnak felel meg. (kódblokk 2):
|
||||
|
||||
```python
|
||||
actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) }
|
||||
action_idx = { a : i for i,a in enumerate(actions.keys()) }
|
||||
```
|
||||
|
||||
Összefoglalva, a forgatókönyv stratégiája és célja a következő:
|
||||
|
||||
- **A stratégia**, az ügynökünk (Péter) stratégiáját egy úgynevezett **politika** határozza meg. A politika egy olyan függvény, amely bármely adott állapotban visszaadja a cselekvést. Esetünkben a probléma állapotát a tábla és a játékos aktuális pozíciója képviseli.
|
||||
|
||||
- **A cél**, a megerősítéses tanulás célja egy jó politika megtanulása, amely lehetővé teszi a probléma hatékony megoldását. Az alapként vegyük figyelembe a legegyszerűbb politikát, az úgynevezett **véletlenszerű sétát**.
|
||||
|
||||
## Véletlenszerű séta
|
||||
|
||||
Először oldjuk meg a problémát egy véletlenszerű séta stratégiával. A véletlenszerű séta során véletlenszerűen választjuk ki a következő cselekvést az engedélyezett cselekvések közül, amíg el nem érjük az almát (kódblokk 3).
|
||||
|
||||
1. Valósítsd meg a véletlenszerű sétát az alábbi kóddal:
|
||||
|
||||
```python
|
||||
def random_policy(m):
|
||||
return random.choice(list(actions))
|
||||
|
||||
def walk(m,policy,start_position=None):
|
||||
n = 0 # number of steps
|
||||
# set initial position
|
||||
if start_position:
|
||||
m.human = start_position
|
||||
else:
|
||||
m.random_start()
|
||||
while True:
|
||||
if m.at() == Board.Cell.apple:
|
||||
return n # success!
|
||||
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
|
||||
return -1 # eaten by wolf or drowned
|
||||
while True:
|
||||
a = actions[policy(m)]
|
||||
new_pos = m.move_pos(m.human,a)
|
||||
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
|
||||
m.move(a) # do the actual move
|
||||
break
|
||||
n+=1
|
||||
|
||||
walk(m,random_policy)
|
||||
```
|
||||
|
||||
A `walk` hívás visszaadja a megfelelő útvonal hosszát, amely futtatásonként változhat.
|
||||
|
||||
1. Futtasd le a séta kísérletet többször (például 100-szor), és nyomtasd ki az eredményeket (kódblokk 4):
|
||||
|
||||
```python
|
||||
def print_statistics(policy):
|
||||
s,w,n = 0,0,0
|
||||
for _ in range(100):
|
||||
z = walk(m,policy)
|
||||
if z<0:
|
||||
w+=1
|
||||
else:
|
||||
s += z
|
||||
n += 1
|
||||
print(f"Average path length = {s/n}, eaten by wolf: {w} times")
|
||||
|
||||
print_statistics(random_policy)
|
||||
```
|
||||
|
||||
Figyeld meg, hogy az útvonal átlagos hossza körülbelül 30-40 lépés, ami elég sok, tekintve, hogy az átlagos távolság a legközelebbi almáig körülbelül 5-6 lépés.
|
||||
|
||||
Azt is láthatod, hogyan mozog Péter a véletlenszerű séta során:
|
||||
|
||||

|
||||
|
||||
## Jutalomfüggvény
|
||||
|
||||
Ahhoz, hogy a politikánk intelligensebb legyen, meg kell értenünk, mely lépések "jobbak", mint mások. Ehhez meg kell határoznunk a célunkat.
|
||||
|
||||
A cél egy **jutalomfüggvény** segítségével határozható meg, amely minden állapothoz visszaad egy pontszámot. Minél magasabb a szám, annál jobb a jutalomfüggvény. (kódblokk 5)
|
||||
|
||||
```python
|
||||
move_reward = -0.1
|
||||
goal_reward = 10
|
||||
end_reward = -10
|
||||
|
||||
def reward(m,pos=None):
|
||||
pos = pos or m.human
|
||||
if not m.is_valid(pos):
|
||||
return end_reward
|
||||
x = m.at(pos)
|
||||
if x==Board.Cell.water or x == Board.Cell.wolf:
|
||||
return end_reward
|
||||
if x==Board.Cell.apple:
|
||||
return goal_reward
|
||||
return move_reward
|
||||
```
|
||||
|
||||
A jutalomfüggvények érdekessége, hogy a legtöbb esetben *csak a játék végén kapunk jelentős jutalmat*. Ez azt jelenti, hogy az algoritmusunknak valahogy emlékeznie kell a "jó" lépésekre, amelyek pozitív jutalomhoz vezettek a végén, és növelnie kell azok fontosságát. Hasonlóképpen, minden olyan lépést, amely rossz eredményhez vezet, el kell kerülni.
|
||||
|
||||
## Q-tanulás
|
||||
|
||||
Az algoritmus, amelyet itt tárgyalunk, a **Q-tanulás**. Ebben az algoritmusban a politika egy **Q-tábla** nevű függvénnyel (vagy adatszerkezettel) van meghatározva. Ez rögzíti az egyes cselekvések "jóságát" egy adott állapotban.
|
||||
|
||||
Q-táblának hívják, mert gyakran kényelmes táblázatként vagy többdimenziós tömbként ábrázolni. Mivel a táblánk mérete `szélesség` x `magasság`, a Q-táblát egy numpy tömbként ábrázolhatjuk, amelynek alakja `szélesség` x `magasság` x `len(cselekvések)`: (kódblokk 6)
|
||||
|
||||
```python
|
||||
Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)
|
||||
```
|
||||
|
||||
Figyeld meg, hogy a Q-tábla összes értékét egyenlő értékkel inicializáljuk, esetünkben 0,25-tel. Ez megfelel a "véletlenszerű séta" politikának, mert minden lépés minden állapotban egyformán jó. A Q-táblát átadhatjuk a `plot` függvénynek, hogy vizualizáljuk a táblát a táblán: `m.plot(Q)`.
|
||||
|
||||

|
||||
|
||||
A cellák közepén egy "nyíl" látható, amely a mozgás preferált irányát jelzi. Mivel minden irány egyenlő, egy pont jelenik meg.
|
||||
|
||||
Most el kell indítanunk a szimulációt, felfedeznünk a környezetet, és meg kell tanulnunk a Q-tábla értékeinek jobb eloszlását, amely lehetővé teszi számunkra, hogy sokkal gyorsabban megtaláljuk az utat az almához.
|
||||
|
||||
## A Q-tanulás lényege: Bellman-egyenlet
|
||||
|
||||
Amint elkezdünk mozogni, minden cselekvéshez tartozik egy megfelelő jutalom, azaz elméletileg kiválaszthatjuk a következő cselekvést a legmagasabb azonnali jutalom alapján. Azonban a legtöbb állapotban a lépés nem éri el a célunkat, hogy elérjük az almát, így nem tudjuk azonnal eldönteni, melyik irány a jobb.
|
||||
|
||||
> Ne feledd, hogy nem az azonnali eredmény számít, hanem a végső eredmény, amelyet a szimuláció végén kapunk.
|
||||
|
||||
Ahhoz, hogy figyelembe vegyük ezt a késleltetett jutalmat, a **[dinamikus programozás](https://hu.wikipedia.org/wiki/Dinamikus_programoz%C3%A1s)** elveit kell alkalmaznunk, amelyek lehetővé teszik, hogy rekurzívan gondolkodjunk a problémánkról.
|
||||
|
||||
Tegyük fel, hogy most az *s* állapotban vagyunk, és a következő állapotba, *s'*-be akarunk lépni. Ezzel megkapjuk az azonnali jutalmat, *r(s,a)*, amelyet a jutalomfüggvény határoz meg, plusz némi jövőbeli jutalmat. Ha feltételezzük, hogy a Q-táblánk helyesen tükrözi az egyes cselekvések "vonzerejét", akkor az *s'* állapotban egy olyan *a* cselekvést választunk, amely a *Q(s',a')* maximális értékének felel meg. Így az *s* állapotban elérhető legjobb jövőbeli jutalom a következőképpen lesz meghatározva: `max`
|
||||
|
||||
## A szabály ellenőrzése
|
||||
|
||||
Mivel a Q-tábla felsorolja az egyes állapotokban végrehajtható cselekvések "vonzerejét", könnyen használható hatékony navigáció meghatározására a világunkban. A legegyszerűbb esetben kiválaszthatjuk azt a cselekvést, amely a legmagasabb Q-tábla értékhez tartozik: (kód blokk 9)
|
||||
|
||||
```python
|
||||
def qpolicy_strict(m):
|
||||
x,y = m.human
|
||||
v = probs(Q[x,y])
|
||||
a = list(actions)[np.argmax(v)]
|
||||
return a
|
||||
|
||||
walk(m,qpolicy_strict)
|
||||
```
|
||||
|
||||
> Ha többször kipróbálod a fenti kódot, észreveheted, hogy néha "elakad", és a jegyzetfüzetben a STOP gombot kell megnyomnod a megszakításhoz. Ez azért történik, mert előfordulhatnak olyan helyzetek, amikor két állapot "mutat" egymásra az optimális Q-értékek alapján, ilyenkor az ügynök végtelenül mozoghat ezek között az állapotok között.
|
||||
|
||||
## 🚀Kihívás
|
||||
|
||||
> **Feladat 1:** Módosítsd a `walk` függvényt úgy, hogy korlátozza az út maximális hosszát egy bizonyos lépésszámra (például 100), és figyeld meg, hogy a fenti kód időnként visszaadja ezt az értéket.
|
||||
|
||||
> **Feladat 2:** Módosítsd a `walk` függvényt úgy, hogy ne térjen vissza olyan helyekre, ahol korábban már járt. Ez megakadályozza, hogy a `walk` ciklusba kerüljön, azonban az ügynök még mindig "csapdába" eshet egy olyan helyen, ahonnan nem tud kijutni.
|
||||
|
||||
## Navigáció
|
||||
|
||||
Egy jobb navigációs szabály az lenne, amit a tanulás során használtunk, amely kombinálja a kihasználást és a felfedezést. Ebben a szabályban minden cselekvést egy bizonyos valószínűséggel választunk ki, amely arányos a Q-tábla értékeivel. Ez a stratégia még mindig eredményezheti, hogy az ügynök visszatér egy már felfedezett helyre, de ahogy az alábbi kódból látható, ez nagyon rövid átlagos útvonalat eredményez a kívánt helyre (ne feledd, hogy a `print_statistics` 100-szor futtatja a szimulációt): (kód blokk 10)
|
||||
|
||||
```python
|
||||
def qpolicy(m):
|
||||
x,y = m.human
|
||||
v = probs(Q[x,y])
|
||||
a = random.choices(list(actions),weights=v)[0]
|
||||
return a
|
||||
|
||||
print_statistics(qpolicy)
|
||||
```
|
||||
|
||||
A kód futtatása után sokkal rövidebb átlagos útvonalhosszt kell kapnod, 3-6 lépés körül.
|
||||
|
||||
## A tanulási folyamat vizsgálata
|
||||
|
||||
Ahogy említettük, a tanulási folyamat egyensúlyozás a felfedezés és a problématér szerkezetéről szerzett tudás kihasználása között. Láttuk, hogy a tanulás eredményei (az ügynök képessége, hogy rövid utat találjon a célhoz) javultak, de az is érdekes, hogy megfigyeljük, hogyan viselkedik az átlagos útvonalhossz a tanulási folyamat során:
|
||||
|
||||
## A tanulságok összefoglalása:
|
||||
|
||||
- **Az átlagos útvonalhossz növekszik**. Amit itt látunk, az az, hogy eleinte az átlagos útvonalhossz növekszik. Ez valószínűleg azért van, mert amikor semmit sem tudunk a környezetről, hajlamosak vagyunk rossz állapotokba, vízbe vagy farkasok közé kerülni. Ahogy többet tanulunk és elkezdjük használni ezt a tudást, hosszabb ideig tudjuk felfedezni a környezetet, de még mindig nem tudjuk pontosan, hol vannak az almák.
|
||||
|
||||
- **Az útvonalhossz csökken, ahogy többet tanulunk**. Miután eleget tanultunk, az ügynök számára könnyebbé válik a cél elérése, és az útvonalhossz csökkenni kezd. Azonban még mindig nyitottak vagyunk a felfedezésre, így gyakran eltérünk az optimális úttól, és új lehetőségeket fedezünk fel, ami hosszabb utat eredményez.
|
||||
|
||||
- **A hossz hirtelen megnő**. Amit ezen a grafikonon még megfigyelhetünk, az az, hogy egy ponton az útvonalhossz hirtelen megnőtt. Ez a folyamat sztochasztikus természetét jelzi, és azt, hogy bizonyos pontokon "elronthatjuk" a Q-tábla együtthatóit azzal, hogy új értékekkel felülírjuk őket. Ezt ideálisan minimalizálni kellene a tanulási ráta csökkentésével (például a tanulás végéhez közeledve csak kis értékkel módosítjuk a Q-tábla értékeit).
|
||||
|
||||
Összességében fontos megjegyezni, hogy a tanulási folyamat sikere és minősége jelentősen függ a paraméterektől, mint például a tanulási ráta, a tanulási ráta csökkenése és a diszkontfaktor. Ezeket gyakran **hiperparamétereknek** nevezik, hogy megkülönböztessék őket a **paraméterektől**, amelyeket a tanulás során optimalizálunk (például a Q-tábla együtthatói). A legjobb hiperparaméter értékek megtalálásának folyamatát **hiperparaméter optimalizációnak** nevezzük, és ez egy külön témát érdemel.
|
||||
|
||||
## [Utó-előadás kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Feladat
|
||||
[Egy reálisabb világ](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,41 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "68394b2102d3503882e5e914bd0ff5c1",
|
||||
"translation_date": "2025-09-05T16:43:11+00:00",
|
||||
"source_file": "8-Reinforcement/1-QLearning/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Egy Reálisabb Világ
|
||||
|
||||
A mi helyzetünkben Péter szinte fáradtság vagy éhség nélkül tudott mozogni. Egy reálisabb világban időnként le kell ülnie pihenni, és ennie is kell. Tegyük világunkat reálisabbá az alábbi szabályok bevezetésével:
|
||||
|
||||
1. Amikor Péter egyik helyről a másikra mozog, **energiát** veszít és **fáradtságot** szerez.
|
||||
2. Péter több energiát nyerhet, ha almát eszik.
|
||||
3. Péter megszabadulhat a fáradtságtól, ha a fa alatt vagy a füvön pihen (azaz olyan mezőre lép, ahol fa vagy fű van - zöld mező).
|
||||
4. Péternek meg kell találnia és le kell győznie a farkast.
|
||||
5. Ahhoz, hogy legyőzze a farkast, Péternek bizonyos energiaszinttel és fáradtsági szinttel kell rendelkeznie, különben elveszíti a csatát.
|
||||
|
||||
## Útmutató
|
||||
|
||||
Használd az eredeti [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) jegyzetfüzetet kiindulópontként a megoldáshoz.
|
||||
|
||||
Módosítsd a jutalomfüggvényt a játék szabályai szerint, futtasd a megerősítéses tanulási algoritmust, hogy megtaláld a legjobb stratégiát a játék megnyeréséhez, és hasonlítsd össze az eredményeket a véletlenszerű lépésekkel az alapján, hogy hány játékot nyertél vagy vesztettél.
|
||||
|
||||
> **Note**: Az új világban az állapot összetettebb, és az ember pozíciója mellett magában foglalja a fáradtság és az energiaszinteket is. Az állapotot ábrázolhatod egy tuple formájában (Board,energy,fatigue), definiálhatsz egy osztályt az állapothoz (akár származtathatod a `Board` osztályból), vagy módosíthatod az eredeti `Board` osztályt a [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py) fájlban.
|
||||
|
||||
A megoldásodban tartsd meg a véletlenszerű lépés stratégiájáért felelős kódot, és hasonlítsd össze az algoritmusod eredményeit a véletlenszerű lépésekkel a végén.
|
||||
|
||||
> **Note**: Lehet, hogy módosítanod kell a hiperparamétereket, hogy működjön, különösen az epochok számát. Mivel a játék sikere (a farkassal való harc) ritka esemény, sokkal hosszabb tanulási időre számíthatsz.
|
||||
|
||||
## Értékelési Szempontok
|
||||
|
||||
| Kritérium | Kiváló | Megfelelő | Fejlesztésre Szorul |
|
||||
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| | Egy jegyzetfüzet bemutatja az új világ szabályait, a Q-Learning algoritmust és néhány szöveges magyarázatot. A Q-Learning jelentősen javítja az eredményeket a véletlenszerű lépésekhez képest. | Jegyzetfüzet bemutatva, Q-Learning implementálva és javítja az eredményeket a véletlenszerű lépésekhez képest, de nem jelentősen; vagy a jegyzetfüzet rosszul dokumentált, a kód nem jól strukturált | Kísérlet történt a világ szabályainak újradefiniálására, de a Q-Learning algoritmus nem működik, vagy a jutalomfüggvény nincs teljesen definiálva |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T16:44:25+00:00",
|
||||
"source_file": "8-Reinforcement/1-QLearning/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális, emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "81db6ff2cf6e62fbe2340b094bb9509e",
|
||||
"translation_date": "2025-09-05T16:44:12+00:00",
|
||||
"source_file": "8-Reinforcement/1-QLearning/solution/R/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
ez egy ideiglenes helyőrző
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,57 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "1f2b7441745eb52e25745423b247016b",
|
||||
"translation_date": "2025-09-05T16:48:06+00:00",
|
||||
"source_file": "8-Reinforcement/2-Gym/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Hegyi Autó Tanítása
|
||||
|
||||
[OpenAI Gym](http://gym.openai.com) úgy lett kialakítva, hogy minden környezet ugyanazt az API-t biztosítsa - azaz ugyanazokat a `reset`, `step` és `render` metódusokat, valamint az **akciótér** és **megfigyelési tér** azonos absztrakcióit. Ezért lehetségesnek kell lennie, hogy ugyanazokat a megerősítéses tanulási algoritmusokat minimális kódmódosítással különböző környezetekhez igazítsuk.
|
||||
|
||||
## A Hegyi Autó Környezet
|
||||
|
||||
A [Hegyi Autó környezet](https://gym.openai.com/envs/MountainCar-v0/) egy völgyben ragadt autót tartalmaz:
|
||||
|
||||
A cél az, hogy kijussunk a völgyből és megszerezzük a zászlót, az alábbi akciók egyikének végrehajtásával minden lépésben:
|
||||
|
||||
| Érték | Jelentés |
|
||||
|---|---|
|
||||
| 0 | Balra gyorsítás |
|
||||
| 1 | Nem gyorsít |
|
||||
| 2 | Jobbra gyorsítás |
|
||||
|
||||
A probléma fő trükkje azonban az, hogy az autó motorja nem elég erős ahhoz, hogy egyetlen menetben felmásszon a hegyre. Ezért az egyetlen módja a sikernek az, hogy oda-vissza vezetünk, hogy lendületet gyűjtsünk.
|
||||
|
||||
A megfigyelési tér mindössze két értékből áll:
|
||||
|
||||
| Szám | Megfigyelés | Min | Max |
|
||||
|-----|--------------|-----|-----|
|
||||
| 0 | Autó pozíció | -1.2| 0.6 |
|
||||
| 1 | Autó sebesség | -0.07 | 0.07 |
|
||||
|
||||
A jutalmazási rendszer a hegyi autó esetében meglehetősen trükkös:
|
||||
|
||||
* 0 jutalom jár, ha az ügynök elérte a zászlót (pozíció = 0.5) a hegy tetején.
|
||||
* -1 jutalom jár, ha az ügynök pozíciója kevesebb, mint 0.5.
|
||||
|
||||
Az epizód véget ér, ha az autó pozíciója több mint 0.5, vagy ha az epizód hossza meghaladja a 200-at.
|
||||
|
||||
## Útmutató
|
||||
|
||||
Igazítsd a megerősítéses tanulási algoritmusunkat a hegyi autó probléma megoldásához. Kezdd a meglévő [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb) kóddal, cseréld ki az új környezetet, módosítsd az állapot diszkretizációs függvényeket, és próbáld meg a meglévő algoritmust minimális kódmódosítással betanítani. Optimalizáld az eredményt a hiperparaméterek beállításával.
|
||||
|
||||
> **Megjegyzés**: Valószínűleg szükség lesz a hiperparaméterek beállítására, hogy az algoritmus konvergáljon.
|
||||
|
||||
## Értékelési Kritériumok
|
||||
|
||||
| Kritérium | Kiváló | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ------- | --------- | ------------------- |
|
||||
| | A Q-Learning algoritmus sikeresen adaptálva lett a CartPole példából, minimális kódmódosítással, és képes megoldani a zászló megszerzésének problémáját 200 lépés alatt. | Egy új Q-Learning algoritmus lett átvéve az internetről, de jól dokumentált; vagy a meglévő algoritmus lett adaptálva, de nem érte el a kívánt eredményeket. | A hallgató nem tudott sikeresen adaptálni semmilyen algoritmust, de jelentős lépéseket tett a megoldás felé (megvalósította az állapot diszkretizációt, Q-Table adatstruktúrát stb.). |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a39c15d63f3b2795ee2284a82b986b93",
|
||||
"translation_date": "2025-09-05T16:49:01+00:00",
|
||||
"source_file": "8-Reinforcement/2-Gym/solution/Julia/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,15 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "81db6ff2cf6e62fbe2340b094bb9509e",
|
||||
"translation_date": "2025-09-05T16:48:49+00:00",
|
||||
"source_file": "8-Reinforcement/2-Gym/solution/R/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
ez egy ideiglenes helyőrző
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,145 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "83320d6b6994909e35d830cebf214039",
|
||||
"translation_date": "2025-09-05T15:50:14+00:00",
|
||||
"source_file": "9-Real-World/1-Applications/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Utóirat: Gépi tanulás a való világban
|
||||
|
||||

|
||||
> Sketchnote készítette: [Tomomi Imura](https://www.twitter.com/girlie_mac)
|
||||
|
||||
Ebben a tananyagban számos módszert tanultál az adatok előkészítésére és gépi tanulási modellek létrehozására. Klasszikus regressziós, klaszterezési, osztályozási, természetes nyelvfeldolgozási és idősoros modellek sorozatát építetted fel. Gratulálunk! Most talán azon gondolkodsz, hogy mindez mire jó... milyen valós alkalmazásai vannak ezeknek a modelleknek?
|
||||
|
||||
Bár az iparban nagy érdeklődést váltott ki az AI, amely általában mély tanulást használ, a klasszikus gépi tanulási modelleknek továbbra is értékes alkalmazásai vannak. Lehet, hogy már ma is használod ezeket az alkalmazásokat! Ebben a leckében megvizsgáljuk, hogyan használja nyolc különböző iparág és szakterület ezeket a modelleket, hogy alkalmazásaik teljesítményét, megbízhatóságát, intelligenciáját és értékét növeljék a felhasználók számára.
|
||||
|
||||
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## 💰 Pénzügy
|
||||
|
||||
A pénzügyi szektor számos lehetőséget kínál a gépi tanulás számára. Sok probléma ebben a területen modellezhető és megoldható ML segítségével.
|
||||
|
||||
### Hitelkártya-csalás észlelése
|
||||
|
||||
Korábban tanultunk a [k-means klaszterezésről](../../5-Clustering/2-K-Means/README.md), de hogyan használható ez a hitelkártya-csalásokkal kapcsolatos problémák megoldására?
|
||||
|
||||
A k-means klaszterezés hasznos a hitelkártya-csalás észlelésének egyik technikájában, amelyet **szélsőértékek észlelésének** neveznek. A szélsőértékek, vagyis az adathalmaz megfigyeléseiben tapasztalható eltérések, megmutathatják, hogy egy hitelkártyát normál módon használnak-e, vagy valami szokatlan történik. Az alábbi tanulmány szerint a hitelkártya-adatokat k-means klaszterezési algoritmus segítségével lehet rendezni, és minden tranzakciót egy klaszterhez rendelni annak alapján, hogy mennyire tűnik szélsőértéknek. Ezután ki lehet értékelni a legkockázatosabb klasztereket, hogy megállapítsuk, csalásról vagy legitim tranzakcióról van-e szó.
|
||||
[Hivatkozás](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf)
|
||||
|
||||
### Vagyonkezelés
|
||||
|
||||
A vagyonkezelés során egy személy vagy cég kezeli ügyfelei befektetéseit. Feladatuk a vagyon hosszú távú fenntartása és növelése, ezért elengedhetetlen, hogy jól teljesítő befektetéseket válasszanak.
|
||||
|
||||
Egy befektetés teljesítményének értékelésére az egyik módszer a statisztikai regresszió. A [lineáris regresszió](../../2-Regression/1-Tools/README.md) értékes eszköz annak megértéséhez, hogy egy alap hogyan teljesít egy benchmarkhoz képest. Azt is megállapíthatjuk, hogy a regresszió eredményei statisztikailag szignifikánsak-e, vagy hogy mennyire befolyásolnák az ügyfél befektetéseit. Az elemzést tovább bővítheted többszörös regresszióval, ahol további kockázati tényezőket is figyelembe lehet venni. Egy konkrét alap teljesítményének értékelésére vonatkozó példát az alábbi tanulmányban találhatsz.
|
||||
[Hivatkozás](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/)
|
||||
|
||||
## 🎓 Oktatás
|
||||
|
||||
Az oktatási szektor szintén nagyon érdekes terület, ahol az ML alkalmazható. Érdekes problémák merülhetnek fel, például a csalás észlelése teszteken vagy esszéken, illetve az elfogultság kezelése, akár szándékos, akár nem, a javítási folyamat során.
|
||||
|
||||
### Diákok viselkedésének előrejelzése
|
||||
|
||||
A [Coursera](https://coursera.com), egy online nyílt kurzusokat kínáló szolgáltató, nagyszerű technológiai blogot vezet, ahol számos mérnöki döntést megvitatnak. Ebben az esettanulmányban regressziós vonalat rajzoltak, hogy megvizsgálják, van-e összefüggés az alacsony NPS (Net Promoter Score) értékelés és a kurzus megtartása vagy lemorzsolódása között.
|
||||
[Hivatkozás](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a)
|
||||
|
||||
### Elfogultság csökkentése
|
||||
|
||||
A [Grammarly](https://grammarly.com), egy írássegítő, amely helyesírási és nyelvtani hibákat ellenőriz, kifinomult [természetes nyelvfeldolgozási rendszereket](../../6-NLP/README.md) használ termékeiben. Érdekes esettanulmányt tettek közzé technológiai blogjukban arról, hogyan kezelték a nemi elfogultságot a gépi tanulásban, amelyről az [igazságosságról szóló bevezető leckénkben](../../1-Introduction/3-fairness/README.md) tanultál.
|
||||
[Hivatkozás](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/)
|
||||
|
||||
## 👜 Kereskedelem
|
||||
|
||||
A kereskedelmi szektor jelentős előnyöket élvezhet az ML használatából, kezdve a jobb vásárlói élmény megteremtésétől az optimális készletkezelésig.
|
||||
|
||||
### Vásárlói élmény személyre szabása
|
||||
|
||||
A Wayfair, egy otthoni termékeket, például bútorokat árusító cég, kiemelten fontosnak tartja, hogy segítsen vásárlóinak megtalálni az ízlésüknek és igényeiknek megfelelő termékeket. Ebben a cikkben a cég mérnökei leírják, hogyan használják az ML-t és az NLP-t, hogy "a megfelelő eredményeket kínálják a vásárlóknak". Különösen a Query Intent Engine-t építették ki, amely entitáskinyerést, osztályozó tanítást, eszköz- és véleménykinyerést, valamint érzelemcímkézést alkalmaz az ügyfélértékelésekben. Ez egy klasszikus példa arra, hogyan működik az NLP az online kereskedelemben.
|
||||
[Hivatkozás](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search)
|
||||
|
||||
### Készletkezelés
|
||||
|
||||
Az innovatív, rugalmas cégek, mint például a [StitchFix](https://stitchfix.com), egy dobozos szolgáltatás, amely ruhákat küld a fogyasztóknak, erősen támaszkodnak az ML-re az ajánlások és készletkezelés terén. Stíluscsapataik együttműködnek a merchandising csapataikkal: "egy adatkutatónk egy genetikus algoritmussal kísérletezett, és alkalmazta azt a ruházatra, hogy megjósolja, milyen sikeres ruhadarab lehet, amely ma még nem létezik. Ezt bemutattuk a merchandising csapatnak, és most már eszközként használhatják."
|
||||
[Hivatkozás](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/)
|
||||
|
||||
## 🏥 Egészségügy
|
||||
|
||||
Az egészségügyi szektor az ML-t kutatási feladatok optimalizálására, valamint logisztikai problémák, például a betegek visszafogadása vagy a betegségek terjedésének megállítása érdekében használhatja.
|
||||
|
||||
### Klinikai vizsgálatok kezelése
|
||||
|
||||
A klinikai vizsgálatokban a toxicitás komoly aggodalomra ad okot a gyógyszergyártók számára. Mennyi toxicitás tolerálható? Ebben a tanulmányban különböző klinikai vizsgálati módszerek elemzése új megközelítést eredményezett a klinikai vizsgálati eredmények esélyeinek előrejelzésére. Különösen a random forest segítségével hoztak létre egy [osztályozót](../../4-Classification/README.md), amely képes megkülönböztetni a gyógyszercsoportokat.
|
||||
[Hivatkozás](https://www.sciencedirect.com/science/article/pii/S2451945616302914)
|
||||
|
||||
### Kórházi visszafogadás kezelése
|
||||
|
||||
A kórházi ellátás költséges, különösen akkor, ha a betegeket vissza kell fogadni. Ez a tanulmány egy olyan céget tárgyal, amely ML-t használ a visszafogadás potenciáljának előrejelzésére [klaszterezési](../../5-Clustering/README.md) algoritmusok segítségével. Ezek a klaszterek segítenek az elemzőknek "felfedezni olyan visszafogadási csoportokat, amelyeknek közös oka lehet".
|
||||
[Hivatkozás](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning)
|
||||
|
||||
### Betegségkezelés
|
||||
|
||||
A közelmúltbeli járvány rávilágított arra, hogy a gépi tanulás hogyan segíthet a betegségek terjedésének megállításában. Ebben a cikkben felismerheted az ARIMA, logisztikai görbék, lineáris regresszió és SARIMA használatát. "Ez a munka arra irányul, hogy kiszámítsa a vírus terjedési sebességét, és így előre jelezze a haláleseteket, gyógyulásokat és megerősített eseteket, hogy jobban felkészülhessünk és túlélhessünk."
|
||||
[Hivatkozás](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/)
|
||||
|
||||
## 🌲 Ökológia és zöld technológia
|
||||
|
||||
A természet és ökológia számos érzékeny rendszert foglal magában, ahol az állatok és a természet közötti kölcsönhatás kerül előtérbe. Fontos, hogy ezeket a rendszereket pontosan mérjük, és megfelelően cselekedjünk, ha valami történik, például erdőtűz vagy az állatpopuláció csökkenése.
|
||||
|
||||
### Erdőgazdálkodás
|
||||
|
||||
Korábbi leckékben tanultál a [megerősítéses tanulásról](../../8-Reinforcement/README.md). Ez nagyon hasznos lehet, amikor a természetben előforduló mintázatokat próbáljuk megjósolni. Különösen hasznos lehet ökológiai problémák, például erdőtüzek és invazív fajok terjedésének nyomon követésére. Kanadában egy kutatócsoport megerősítéses tanulást használt erdőtűz dinamikai modellek építésére műholdképek alapján. Egy innovatív "térbeli terjedési folyamat (SSP)" segítségével az erdőtüzet "ügynökként képzelték el a táj bármely cellájában". "Azok az akciók, amelyeket a tűz bármely helyszínen bármely időpontban megtehet, magukban foglalják az északra, délre, keletre vagy nyugatra való terjedést, vagy a nem terjedést."
|
||||
|
||||
Ez a megközelítés megfordítja a szokásos RL beállítást, mivel a megfelelő Markov döntési folyamat (MDP) dinamikája ismert funkció az azonnali erdőtűz terjedésére. Olvass többet az algoritmusokról az alábbi linken.
|
||||
[Hivatkozás](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full)
|
||||
|
||||
### Állatok mozgásának érzékelése
|
||||
|
||||
Bár a mély tanulás forradalmat hozott az állatok mozgásának vizuális nyomon követésében (építhetsz saját [jegesmedve nyomkövetőt](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) itt), a klasszikus ML-nek még mindig van helye ebben a feladatban.
|
||||
|
||||
Az állatok mozgásának nyomon követésére szolgáló érzékelők és az IoT az ilyen típusú vizuális feldolgozást használják, de az alapvető ML technikák hasznosak az adatok előfeldolgozásában. Például ebben a tanulmányban a juhok testtartását különböző osztályozó algoritmusok segítségével figyelték meg és elemezték. Felismerheted az ROC görbét a 335. oldalon.
|
||||
[Hivatkozás](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf)
|
||||
|
||||
### ⚡️ Energia menedzsment
|
||||
|
||||
Az [idősoros előrejelzésről](../../7-TimeSeries/README.md) szóló leckéinkben megemlítettük az okos parkolóórák koncepcióját, amelyek segítenek bevételt generálni egy város számára a kereslet és kínálat megértése alapján. Ez a cikk részletesen tárgyalja, hogyan kombinálták a klaszterezést, regressziót és idősoros előrejelzést, hogy előre jelezzék Írország jövőbeli energiafelhasználását okos mérés alapján.
|
||||
[Hivatkozás](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf)
|
||||
|
||||
## 💼 Biztosítás
|
||||
|
||||
A biztosítási szektor egy másik terület, amely az ML-t használja életképes pénzügyi és aktuáriusi modellek felépítésére és optimalizálására.
|
||||
|
||||
### Volatilitás kezelése
|
||||
|
||||
A MetLife, egy életbiztosítási szolgáltató, nyíltan beszél arról, hogyan elemzik és csökkentik a volatilitást pénzügyi modelljeikben. Ebben a cikkben bináris és ordinális osztályozási vizualizációkat találhatsz. Emellett előrejelzési vizualizációkat is felfedezhetsz.
|
||||
[Hivatkozás](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf)
|
||||
|
||||
## 🎨 Művészetek, kultúra és irodalom
|
||||
|
||||
A művészetekben, például az újságírásban, számos érdekes probléma merül fel. A hamis hírek észlelése komoly probléma, mivel bizonyítottan befolyásolja az emberek véleményét, sőt demokráciákat is megingathat. A múzeumok is profitálhatnak az ML használatából, például az artefaktumok közötti kapcsolatok megtalálásában vagy az erőforrások tervezésében.
|
||||
|
||||
### Hamis hírek észlelése
|
||||
|
||||
A hamis hírek észlelése macska-egér játékká vált a mai médiában. Ebben a cikkben a kutatók azt javasolják, hogy több ML technikát kombináló rendszert teszteljenek, és a legjobb modellt alkalmazzák: "Ez a rendszer természetes nyelvfeldolgozáson alapul, hogy adatokat nyerjen ki, majd ezek az adatok gépi tanulási osztályozók, például Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD) és Logistic Regression (LR) tanítására szolgálnak."
|
||||
[Hivatkozás](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf)
|
||||
|
||||
Ez a cikk bemutatja, hogyan lehet különböző ML területeket kombinálni, hogy érdekes eredményeket érjünk el, amelyek segíthetnek megállítani a hamis hírek terjedését és valódi károkat okozását; ebben az esetben az indíték a COVID-kezelésekről szóló pletykák terjedése volt, amelyek tömeges erőszakot váltottak ki.
|
||||
|
||||
### Múzeumi ML
|
||||
|
||||
A múzeumok az AI forradalmának küszö
|
||||
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
## Áttekintés és önálló tanulás
|
||||
|
||||
A Wayfair adatkutató csapata több érdekes videót készített arról, hogyan használják a gépi tanulást a vállalatuknál. Érdemes [megnézni](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)!
|
||||
|
||||
## Feladat
|
||||
|
||||
[ML kincsvadászat](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,27 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "fdebfcd0a3f12c9e2b436ded1aa79885",
|
||||
"translation_date": "2025-09-05T15:53:02+00:00",
|
||||
"source_file": "9-Real-World/1-Applications/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# ML Kincsvadászat
|
||||
|
||||
## Útmutató
|
||||
|
||||
Ebben a leckében számos valós életből vett példát ismertél meg, amelyeket klasszikus gépi tanulással oldottak meg. Bár a mélytanulás, az AI új technikái és eszközei, valamint a neurális hálózatok alkalmazása felgyorsította az eszközök fejlesztését ezekben az ágazatokban, a klasszikus gépi tanulás, amelyet ebben a tananyagban tanultál, továbbra is nagy értéket képvisel.
|
||||
|
||||
Ebben a feladatban képzeld el, hogy részt veszel egy hackathonon. Használd fel a tananyagban tanultakat, és javasolj egy megoldást klasszikus gépi tanulás segítségével egy probléma megoldására az egyik ágazatban, amelyet ebben a leckében tárgyaltunk. Készíts egy prezentációt, amelyben bemutatod, hogyan valósítanád meg az ötletedet. Extra pontokat ér, ha mintaadatokat gyűjtesz, és építesz egy gépi tanulási modellt az elképzelésed támogatására!
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ----------------------------------------------------------------- | ----------------------------------------------- | ----------------------- |
|
||||
| | PowerPoint prezentáció készül - extra pont a modell építéséért | Egy nem innovatív, alapvető prezentáció készül | A munka hiányos |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget az ebből a fordításból eredő félreértésekért vagy téves értelmezésekért.
|
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "91c6a180ef08e20cc15acfd2d6d6e164",
|
||||
"translation_date": "2025-09-05T15:57:21+00:00",
|
||||
"source_file": "9-Real-World/2-Debugging-ML-Models/assignment.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Fedezd fel a Responsible AI (RAI) dashboardot
|
||||
|
||||
## Útmutató
|
||||
|
||||
Ebben a leckében megismerkedtél a RAI dashboarddal, amely egy "nyílt forráskódú" eszközökre épülő komponenscsomag, amely segíti az adatkutatókat hibaanalízis, adatfeltárás, méltányossági értékelés, modellérthetőség, ellenpélda/mi lenne ha értékelések és ok-okozati elemzések elvégzésében AI rendszereken. Ehhez a feladathoz fedezd fel a RAI dashboard néhány mintapéldáját [notebookok](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) formájában, és számolj be az eredményeidről egy dolgozatban vagy prezentációban.
|
||||
|
||||
## Értékelési szempontok
|
||||
|
||||
| Kritérium | Kiemelkedő | Megfelelő | Fejlesztésre szorul |
|
||||
| --------- | ---------- | --------- | ------------------- |
|
||||
| | Egy dolgozat vagy PowerPoint prezentáció bemutatja a RAI dashboard komponenseit, a futtatott notebookot és az abból levont következtetéseket | Egy dolgozat bemutatásra kerül, de következtetések nélkül | Nem kerül bemutatásra dolgozat |
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az [Co-op Translator](https://github.com/Azure/co-op-translator) AI fordítási szolgáltatás segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,32 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "5e069a0ac02a9606a69946c2b3c574a9",
|
||||
"translation_date": "2025-09-05T15:49:03+00:00",
|
||||
"source_file": "9-Real-World/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Utószó: Klasszikus gépi tanulás valós alkalmazásai
|
||||
|
||||
A tananyag ezen részében megismerkedhetsz a klasszikus gépi tanulás néhány valós alkalmazásával. Az internetet átkutatva olyan tanulmányokat és cikkeket gyűjtöttünk össze, amelyek ezekkel a stratégiákkal dolgoztak, miközben a neurális hálózatokat, mélytanulást és mesterséges intelligenciát a lehető legnagyobb mértékben elkerülték. Ismerd meg, hogyan használják a gépi tanulást üzleti rendszerekben, ökológiai alkalmazásokban, pénzügyekben, művészetekben és kultúrában, valamint sok más területen.
|
||||
|
||||

|
||||
|
||||
> Fotó: <a href="https://unsplash.com/@childeye?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Alexis Fauvet</a> az <a href="https://unsplash.com/s/photos/artificial-intelligence?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a> oldalán
|
||||
|
||||
## Lecke
|
||||
|
||||
1. [Gépi tanulás valós alkalmazásai](1-Applications/README.md)
|
||||
2. [Modellek hibakeresése gépi tanulásban a Responsible AI dashboard komponenseivel](2-Debugging-ML-Models/README.md)
|
||||
|
||||
## Köszönetnyilvánítás
|
||||
|
||||
A "Gépi tanulás valós alkalmazásai" című anyagot egy csapat írta, amelynek tagjai többek között [Jen Looper](https://twitter.com/jenlooper) és [Ornella Altunyan](https://twitter.com/ornelladotcom).
|
||||
|
||||
A "Modellek hibakeresése gépi tanulásban a Responsible AI dashboard komponenseivel" című anyagot [Ruth Yakubu](https://twitter.com/ruthieyakubu) írta.
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,23 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "c06b12caf3c901eb3156e3dd5b0aea56",
|
||||
"translation_date": "2025-09-05T15:07:22+00:00",
|
||||
"source_file": "CODE_OF_CONDUCT.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Microsoft Nyílt Forráskódú Magatartási Kódex
|
||||
|
||||
Ez a projekt a [Microsoft Nyílt Forráskódú Magatartási Kódexet](https://opensource.microsoft.com/codeofconduct/) alkalmazza.
|
||||
|
||||
Források:
|
||||
|
||||
- [Microsoft Nyílt Forráskódú Magatartási Kódex](https://opensource.microsoft.com/codeofconduct/)
|
||||
- [Microsoft Magatartási Kódex GYIK](https://opensource.microsoft.com/codeofconduct/faq/)
|
||||
- Kérdések vagy aggályok esetén lépjen kapcsolatba a [opencode@microsoft.com](mailto:opencode@microsoft.com) címen
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,23 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "977ec5266dfd78ad1ce2bd8d46fccbda",
|
||||
"translation_date": "2025-09-05T15:05:19+00:00",
|
||||
"source_file": "CONTRIBUTING.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Hozzájárulás
|
||||
|
||||
Ez a projekt örömmel fogadja a hozzájárulásokat és javaslatokat. A legtöbb hozzájárulás esetében szükséges, hogy elfogadjon egy Hozzájárulói Licencmegállapodást (CLA), amelyben kijelenti, hogy joga van, és ténylegesen megadja nekünk a jogot, hogy felhasználjuk a hozzájárulását. További részletekért látogasson el a https://cla.microsoft.com oldalra.
|
||||
|
||||
> Fontos: amikor szöveget fordít ebben a repóban, kérjük, ügyeljen arra, hogy ne használjon gépi fordítást. A fordításokat a közösség ellenőrzi, ezért csak olyan nyelveken vállaljon fordítást, amelyeken jártas.
|
||||
|
||||
Amikor benyújt egy pull requestet, egy CLA-bot automatikusan meghatározza, hogy szükséges-e CLA-t biztosítania, és ennek megfelelően megjelöli a PR-t (pl. címke, megjegyzés). Egyszerűen kövesse a bot által megadott utasításokat. Ezt csak egyszer kell megtennie az összes CLA-t használó repó esetében.
|
||||
|
||||
Ez a projekt a [Microsoft Nyílt Forráskódú Magatartási Kódexét](https://opensource.microsoft.com/codeofconduct/) alkalmazza. További információért tekintse meg a [Magatartási Kódex GYIK](https://opensource.microsoft.com/codeofconduct/faq/) oldalt, vagy lépjen kapcsolatba a [opencode@microsoft.com](mailto:opencode@microsoft.com) címen bármilyen további kérdéssel vagy megjegyzéssel.
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,178 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "612aef7a03204260e940131b09691977",
|
||||
"translation_date": "2025-09-05T15:00:56+00:00",
|
||||
"source_file": "README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
[](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE)
|
||||
[](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/)
|
||||
[](https://GitHub.com/microsoft/ML-For-Beginners/issues/)
|
||||
[](https://GitHub.com/microsoft/ML-For-Beginners/pulls/)
|
||||
[](http://makeapullrequest.com)
|
||||
|
||||
[](https://GitHub.com/microsoft/ML-For-Beginners/watchers/)
|
||||
[](https://GitHub.com/microsoft/ML-For-Beginners/network/)
|
||||
[](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/)
|
||||
|
||||
### 🌐 Többnyelvű támogatás
|
||||
|
||||
#### Támogatott GitHub Action által (Automatikus és mindig naprakész)
|
||||
|
||||
[French](../fr/README.md) | [Spanish](../es/README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](../ar/README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](../el/README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](../da/README.md) | [Norwegian](../no/README.md) | [Finnish](../fi/README.md) | [Dutch](../nl/README.md) | [Hebrew](../he/README.md) | [Vietnamese](../vi/README.md) | [Indonesian](../id/README.md) | [Malay](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](./README.md) | [Czech](../cs/README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](../bg/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md)
|
||||
|
||||
#### Csatlakozz a közösséghez
|
||||
|
||||
[](https://discord.gg/kzRShWzttr)
|
||||
|
||||
# Gépi tanulás kezdőknek - Tananyag
|
||||
|
||||
> 🌍 Utazz körbe a világon, miközben a gépi tanulást különböző kultúrákon keresztül fedezzük fel 🌍
|
||||
|
||||
A Microsoft Cloud Advocates csapata örömmel kínál egy 12 hetes, 26 leckéből álló tananyagot a **gépi tanulásról**. Ebben a tananyagban megismerheted az úgynevezett **klasszikus gépi tanulást**, elsősorban a Scikit-learn könyvtár használatával, elkerülve a mély tanulást, amelyet a [AI for Beginners tananyagunkban](https://aka.ms/ai4beginners) tárgyalunk. Párosítsd ezeket a leckéket a ['Data Science for Beginners' tananyagunkkal](https://aka.ms/ds4beginners) is!
|
||||
|
||||
Utazz velünk a világ körül, miközben ezeket a klasszikus technikákat alkalmazzuk különböző régiók adataira. Minden lecke tartalmaz előzetes és utólagos kvízeket, írásos útmutatót a lecke elvégzéséhez, megoldást, feladatot és még sok mást. Projektalapú pedagógiai megközelítésünk lehetővé teszi, hogy tanulás közben építs, ami bizonyítottan segíti az új készségek elsajátítását.
|
||||
|
||||
**✍️ Köszönet szerzőinknek** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu és Amy Boyd
|
||||
|
||||
**🎨 Köszönet illusztrátorainknak** Tomomi Imura, Dasani Madipalli és Jen Looper
|
||||
|
||||
**🙏 Külön köszönet 🙏 a Microsoft Student Ambassador szerzőknek, bírálóknak és tartalomhozzájárulóknak**, különösen Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila és Snigdha Agarwal
|
||||
|
||||
**🤩 Extra köszönet a Microsoft Student Ambassadoroknak Eric Wanjau, Jasleen Sondhi és Vidushi Gupta az R leckékért!**
|
||||
|
||||
# Kezdés
|
||||
|
||||
Kövesd az alábbi lépéseket:
|
||||
1. **Forkold a repót**: Kattints az oldal jobb felső sarkában található "Fork" gombra.
|
||||
2. **Klónozd a repót**: `git clone https://github.com/microsoft/ML-For-Beginners.git`
|
||||
|
||||
> [találd meg a kurzushoz kapcsolódó további forrásokat a Microsoft Learn gyűjteményünkben](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum)
|
||||
|
||||
**[Diákok](https://aka.ms/student-page)**, hogy használjátok ezt a tananyagot, forkold az egész repót a saját GitHub fiókodba, és végezd el a gyakorlatokat egyedül vagy csoportban:
|
||||
|
||||
- Kezdd egy előzetes kvízzel.
|
||||
- Olvasd el a leckét, és végezd el a tevékenységeket, megállva és reflektálva minden tudásellenőrzésnél.
|
||||
- Próbáld meg létrehozni a projekteket a leckék megértésével, ahelyett hogy a megoldás kódját futtatnád; bár a kód elérhető a `/solution` mappákban minden projektalapú leckénél.
|
||||
- Töltsd ki az utólagos kvízt.
|
||||
- Teljesítsd a kihívást.
|
||||
- Teljesítsd a feladatot.
|
||||
- Miután befejeztél egy leckecsoportot, látogasd meg a [Vita fórumot](https://github.com/microsoft/ML-For-Beginners/discussions), és "tanulj hangosan" azzal, hogy kitöltöd a megfelelő PAT rubrikát. A 'PAT' egy Haladás Értékelési Eszköz, amely egy rubrika, amit kitöltesz a tanulásod elősegítése érdekében. Mások PAT-jaira is reagálhatsz, hogy együtt tanuljunk.
|
||||
|
||||
> További tanulmányokhoz ajánljuk, hogy kövesd ezeket a [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) modulokat és tanulási útvonalakat.
|
||||
|
||||
**Tanárok**, [néhány javaslatot is mellékeltünk](for-teachers.md) arra vonatkozóan, hogyan használjátok ezt a tananyagot.
|
||||
|
||||
---
|
||||
|
||||
## Videós bemutatók
|
||||
|
||||
Néhány lecke rövid videó formájában is elérhető. Ezeket megtalálhatod a leckékben, vagy a [ML for Beginners lejátszási listán a Microsoft Developer YouTube csatornán](https://aka.ms/ml-beginners-videos), ha az alábbi képre kattintasz.
|
||||
|
||||
[](https://aka.ms/ml-beginners-videos)
|
||||
|
||||
---
|
||||
|
||||
## Ismerd meg a csapatot
|
||||
|
||||
[](https://youtu.be/Tj1XWrDSYJU)
|
||||
|
||||
**Gif készítette** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal)
|
||||
|
||||
> 🎥 Kattints a fenti képre, hogy megnézd a projektet és az alkotókat bemutató videót!
|
||||
|
||||
---
|
||||
|
||||
## Pedagógia
|
||||
|
||||
Két pedagógiai elvet választottunk a tananyag összeállításakor: biztosítani, hogy **projektalapú** legyen, és hogy **gyakori kvízeket** tartalmazzon. Emellett a tananyagnak van egy közös **témája**, amely összefogja az anyagot.
|
||||
|
||||
Azáltal, hogy a tartalom projektekhez kapcsolódik, a folyamat érdekesebbé válik a diákok számára, és a fogalmak jobban rögzülnek. Emellett egy alacsony tétű kvíz az óra előtt a diákot a téma tanulására irányítja, míg egy második kvíz az óra után tovább erősíti a tanultakat. Ez a tananyag rugalmas és szórakoztató, és egészében vagy részleteiben is elvégezhető. A projektek kicsiben kezdődnek, és a 12 hetes ciklus végére egyre összetettebbé válnak. A tananyag tartalmaz egy utószót is a gépi tanulás valós alkalmazásairól, amelyet extra kreditként vagy vitaalapként lehet használni.
|
||||
|
||||
> Találd meg a [Magatartási kódexünket](CODE_OF_CONDUCT.md), [Hozzájárulási](CONTRIBUTING.md) és [Fordítási](TRANSLATIONS.md) irányelveinket. Örömmel fogadjuk az építő jellegű visszajelzéseidet!
|
||||
|
||||
## Minden lecke tartalmaz
|
||||
|
||||
- opcionális sketchnote
|
||||
- opcionális kiegészítő videó
|
||||
- videós bemutató (csak néhány leckénél)
|
||||
- [előzetes kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
- írásos lecke
|
||||
- projektalapú leckéknél lépésről lépésre útmutató a projekt elkészítéséhez
|
||||
- tudásellenőrzések
|
||||
- kihívás
|
||||
- kiegészítő olvasmány
|
||||
- feladat
|
||||
- [utólagos kvíz](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
> **Megjegyzés a nyelvekről**: Ezek a leckék elsősorban Python nyelven íródtak, de sok elérhető R nyelven is. Az R leckék elvégzéséhez menj a `/solution` mappába, és keresd az R leckéket. Ezek `.rmd` kiterjesztést tartalmaznak, amely egy **R Markdown** fájlt jelöl, amely egyszerűen definiálható úgy, mint `kódrészletek` (R vagy más nyelvek) és egy `YAML fejléc` (amely irányítja az outputok formázását, például PDF) beágyazása egy `Markdown dokumentumba`. Ezáltal kiváló szerzői keretet biztosít az adatkutatáshoz, mivel lehetővé teszi, hogy kombináld a kódodat, annak eredményét és a gondolataidat, azáltal hogy Markdownban leírod őket. Továbbá, az R Markdown dokumentumok olyan output formátumokra renderelhetők, mint PDF, HTML vagy Word.
|
||||
|
||||
> **Megjegyzés a kvízekről**: Minden kvíz a [Quiz App mappában](../../quiz-app) található, összesen 52 darab három kérdéses kvízzel. Ezek a leckékből vannak linkelve, de a kvíz alkalmazás helyileg is futtatható; kövesd az utasításokat a `quiz-app` mappában, hogy helyileg futtasd vagy Azure-ra telepítsd.
|
||||
|
||||
| Lecke száma | Téma | Leckecsoport | Tanulási célok | Kapcsolódó lecke | Szerző |
|
||||
| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: |
|
||||
| 01 | Bevezetés a gépi tanulásba | [Bevezetés](1-Introduction/README.md) | Ismerd meg a gépi tanulás alapfogalmait | [Lecke](1-Introduction/1-intro-to-ML/README.md) | Muhammad |
|
||||
| 02 | A gépi tanulás története | [Bevezetés](1-Introduction/README.md) | Ismerd meg a terület történetét | [Lecke](1-Introduction/2-history-of-ML/README.md) | Jen és Amy |
|
||||
| 03 | Méltányosság és gépi tanulás | [Bevezetés](1-Introduction/README.md) | Milyen fontos filozófiai kérdéseket kell figyelembe venni a méltányosság kapcsán, amikor ML modelleket építünk és alkalmazunk? | [Lecke](1-Introduction/3-fairness/README.md) | Tomomi |
|
||||
| 04 | Gépi tanulási technikák | [Bevezetés](1-Introduction/README.md) | Milyen technikákat használnak a gépi tanulás kutatói modellek építéséhez? | [Lecke](1-Introduction/4-techniques-of-ML/README.md) | Chris és Jen |
|
||||
| 05 | Bevezetés a regresszióba | [Regresszió](2-Regression/README.md) | Ismerkedj meg a Python és Scikit-learn használatával regressziós modellekhez |
|
||||
<ul><li>[Python](2-Regression/1-Tools/README.md)</li><li>[R](../../2-Regression/1-Tools/solution/R/lesson_1.html)</li></ul> | <ul><li>Jen</li><li>Eric Wanjau</li></ul> |
|
||||
| 06 | Észak-amerikai tökárak 🎃 | [Regresszió](2-Regression/README.md) | Adatok vizualizálása és tisztítása gépi tanulás előkészítéséhez | <ul><li>[Python](2-Regression/2-Data/README.md)</li><li>[R](../../2-Regression/2-Data/solution/R/lesson_2.html)</li></ul> | <ul><li>Jen</li><li>Eric Wanjau</li></ul> |
|
||||
| 07 | Észak-amerikai tökárak 🎃 | [Regresszió](2-Regression/README.md) | Lineáris és polinomiális regressziós modellek építése | <ul><li>[Python](2-Regression/3-Linear/README.md)</li><li>[R](../../2-Regression/3-Linear/solution/R/lesson_3.html)</li></ul> | <ul><li>Jen és Dmitry</li><li>Eric Wanjau</li></ul> |
|
||||
| 08 | Észak-amerikai tökárak 🎃 | [Regresszió](2-Regression/README.md) | Logisztikus regressziós modell építése | <ul><li>[Python](2-Regression/4-Logistic/README.md) </li><li>[R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)</li></ul> | <ul><li>Jen</li><li>Eric Wanjau</li></ul> |
|
||||
| 09 | Egy webalkalmazás 🔌 | [Webalkalmazás](3-Web-App/README.md) | Építs egy webalkalmazást a betanított modelled használatához | [Python](3-Web-App/1-Web-App/README.md) | Jen |
|
||||
| 10 | Bevezetés az osztályozásba | [Osztályozás](4-Classification/README.md) | Adatok tisztítása, előkészítése és vizualizálása; bevezetés az osztályozásba | <ul><li> [Python](4-Classification/1-Introduction/README.md) </li><li>[R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) | <ul><li>Jen és Cassie</li><li>Eric Wanjau</li></ul> |
|
||||
| 11 | Finom ázsiai és indiai ételek 🍜 | [Osztályozás](4-Classification/README.md) | Bevezetés az osztályozókba | <ul><li> [Python](4-Classification/2-Classifiers-1/README.md)</li><li>[R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) | <ul><li>Jen és Cassie</li><li>Eric Wanjau</li></ul> |
|
||||
| 12 | Finom ázsiai és indiai ételek 🍜 | [Osztályozás](4-Classification/README.md) | További osztályozók | <ul><li> [Python](4-Classification/3-Classifiers-2/README.md)</li><li>[R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) | <ul><li>Jen és Cassie</li><li>Eric Wanjau</li></ul> |
|
||||
| 13 | Finom ázsiai és indiai ételek 🍜 | [Osztályozás](4-Classification/README.md) | Ajánló webalkalmazás építése a modelled használatával | [Python](4-Classification/4-Applied/README.md) | Jen |
|
||||
| 14 | Bevezetés a klaszterezésbe | [Klaszterezés](5-Clustering/README.md) | Adatok tisztítása, előkészítése és vizualizálása; bevezetés a klaszterezésbe | <ul><li> [Python](5-Clustering/1-Visualize/README.md)</li><li>[R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) | <ul><li>Jen</li><li>Eric Wanjau</li></ul> |
|
||||
| 15 | Nigériai zenei ízlések felfedezése 🎧 | [Klaszterezés](5-Clustering/README.md) | A K-Means klaszterezési módszer felfedezése | <ul><li> [Python](5-Clustering/2-K-Means/README.md)</li><li>[R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) | <ul><li>Jen</li><li>Eric Wanjau</li></ul> |
|
||||
| 16 | Bevezetés a természetes nyelvfeldolgozásba ☕️ | [Természetes nyelvfeldolgozás](6-NLP/README.md) | Ismerd meg az NLP alapjait egy egyszerű bot építésével | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen |
|
||||
| 17 | Gyakori NLP feladatok ☕️ | [Természetes nyelvfeldolgozás](6-NLP/README.md) | Mélyítsd el az NLP tudásodat, megértve a nyelvi struktúrákkal kapcsolatos gyakori feladatokat | [Python](6-NLP/2-Tasks/README.md) | Stephen |
|
||||
| 18 | Fordítás és érzelemelemzés ♥️ | [Természetes nyelvfeldolgozás](6-NLP/README.md) | Fordítás és érzelemelemzés Jane Austen műveivel | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen |
|
||||
| 19 | Romantikus európai hotelek ♥️ | [Természetes nyelvfeldolgozás](6-NLP/README.md) | Érzelemelemzés hotelértékelésekkel 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen |
|
||||
| 20 | Romantikus európai hotelek ♥️ | [Természetes nyelvfeldolgozás](6-NLP/README.md) | Érzelemelemzés hotelértékelésekkel 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen |
|
||||
| 21 | Bevezetés az időbeli előrejelzésbe | [Idősorok](7-TimeSeries/README.md) | Bevezetés az időbeli előrejelzésbe | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca |
|
||||
| 22 | ⚡️ Világ energiafelhasználása ⚡️ - időbeli előrejelzés ARIMA-val | [Idősorok](7-TimeSeries/README.md) | Idősorok előrejelzése ARIMA-val | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca |
|
||||
| 23 | ⚡️ Világ energiafelhasználása ⚡️ - időbeli előrejelzés SVR-rel | [Idősorok](7-TimeSeries/README.md) | Idősorok előrejelzése Support Vector Regressorral | [Python](7-TimeSeries/3-SVR/README.md) | Anirban |
|
||||
| 24 | Bevezetés a megerősítéses tanulásba | [Megerősítéses tanulás](8-Reinforcement/README.md) | Bevezetés a megerősítéses tanulásba Q-Learning segítségével | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry |
|
||||
| 25 | Segíts Péternek elkerülni a farkast! 🐺 | [Megerősítéses tanulás](8-Reinforcement/README.md) | Megerősítéses tanulás Gym | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry |
|
||||
| Utószó | Valós gépi tanulási forgatókönyvek és alkalmazások | [ML a gyakorlatban](9-Real-World/README.md) | Érdekes és tanulságos valós alkalmazások a klasszikus gépi tanulás területén | [Lecke](9-Real-World/1-Applications/README.md) | Csapat |
|
||||
| Utószó | Modell hibakeresés gépi tanulásban RAI dashboarddal | [ML a gyakorlatban](9-Real-World/README.md) | Modell hibakeresés gépi tanulásban a Responsible AI dashboard komponenseivel | [Lecke](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu |
|
||||
|
||||
> [találd meg a kurzus további forrásait a Microsoft Learn gyűjteményünkben](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum)
|
||||
|
||||
## Offline hozzáférés
|
||||
|
||||
A dokumentációt offline is futtathatod a [Docsify](https://docsify.js.org/#/) használatával. Forkold ezt a repót, [telepítsd a Docsify-t](https://docsify.js.org/#/quickstart) a helyi gépedre, majd a repó gyökérmappájában írd be: `docsify serve`. A weboldal a localhost 3000-es portján lesz elérhető: `localhost:3000`.
|
||||
|
||||
## PDF-ek
|
||||
|
||||
A tananyag PDF változatát linkekkel [itt találod](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf).
|
||||
|
||||
|
||||
## 🎒 Egyéb kurzusok
|
||||
|
||||
Csapatunk más kurzusokat is készít! Nézd meg:
|
||||
|
||||
- [Generatív AI kezdőknek](https://aka.ms/genai-beginners)
|
||||
- [Generatív AI kezdőknek .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet)
|
||||
- [Generatív AI JavaScripttel](https://github.com/microsoft/generative-ai-with-javascript)
|
||||
- [Generatív AI Java-val](https://github.com/microsoft/Generative-AI-for-beginners-java)
|
||||
- [AI kezdőknek](https://aka.ms/ai-beginners)
|
||||
- [Adattudomány kezdőknek](https://aka.ms/datascience-beginners)
|
||||
- [ML kezdőknek](https://aka.ms/ml-beginners)
|
||||
- [Kiberbiztonság kezdőknek](https://github.com/microsoft/Security-101)
|
||||
- [Webfejlesztés kezdőknek](https://aka.ms/webdev-beginners)
|
||||
- [IoT kezdőknek](https://aka.ms/iot-beginners)
|
||||
- [XR fejlesztés kezdőknek](https://github.com/microsoft/xr-development-for-beginners)
|
||||
- [GitHub Copilot elsajátítása páros programozáshoz](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming)
|
||||
- [GitHub Copilot elsajátítása C#/.NET fejlesztőknek](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers)
|
||||
- [Válaszd ki a saját Copilot kalandodat](https://github.com/microsoft/CopilotAdventures)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,51 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "5e1b8da31aae9cca3d53ad243fa3365a",
|
||||
"translation_date": "2025-09-05T15:05:58+00:00",
|
||||
"source_file": "SECURITY.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
## Biztonság
|
||||
|
||||
A Microsoft komolyan veszi szoftvertermékei és szolgáltatásai biztonságát, beleértve az összes forráskód-tárházat, amelyeket GitHub szervezeteinken keresztül kezelünk, mint például [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin) és [GitHub szervezeteink](https://opensource.microsoft.com/).
|
||||
|
||||
Ha úgy gondolja, hogy biztonsági sebezhetőséget talált bármely Microsoft tulajdonában lévő tárházban, amely megfelel [a Microsoft biztonsági sebezhetőség definíciójának](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), kérjük, jelentse nekünk az alábbiakban leírt módon.
|
||||
|
||||
## Biztonsági problémák jelentése
|
||||
|
||||
**Kérjük, ne jelentsen biztonsági sebezhetőségeket nyilvános GitHub problémákon keresztül.**
|
||||
|
||||
Ehelyett jelentse őket a Microsoft Security Response Center (MSRC) oldalán: [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report).
|
||||
|
||||
Ha inkább bejelentkezés nélkül szeretne jelentést tenni, küldjön e-mailt a [secure@microsoft.com](mailto:secure@microsoft.com) címre. Ha lehetséges, titkosítsa üzenetét PGP kulcsunkkal; töltse le azt a [Microsoft Security Response Center PGP Key oldaláról](https://www.microsoft.com/en-us/msrc/pgp-key-msrc).
|
||||
|
||||
24 órán belül választ kell kapnia. Ha valamilyen okból nem kap választ, kérjük, kövesse nyomon e-mailben, hogy megbizonyosodjon arról, hogy megkaptuk az eredeti üzenetét. További információkért látogasson el a [microsoft.com/msrc](https://www.microsoft.com/msrc) oldalra.
|
||||
|
||||
Kérjük, hogy az alábbiakban felsorolt kért információkat (amennyit csak tud) adja meg, hogy jobban megértsük a lehetséges probléma természetét és terjedelmét:
|
||||
|
||||
* A probléma típusa (pl. puffer túlcsordulás, SQL injekció, cross-site scripting stb.)
|
||||
* Az érintett forrásfájl(ok) teljes elérési útja
|
||||
* Az érintett forráskód helye (tag/ág/commit vagy közvetlen URL)
|
||||
* Bármilyen speciális konfiguráció, amely szükséges a probléma reprodukálásához
|
||||
* Lépésről lépésre bemutatott utasítások a probléma reprodukálásához
|
||||
* Proof-of-concept vagy exploit kód (ha lehetséges)
|
||||
* A probléma hatása, beleértve azt, hogy egy támadó hogyan használhatná ki a problémát
|
||||
|
||||
Ez az információ segít gyorsabban feldolgozni a jelentését.
|
||||
|
||||
Ha hibajutalomért jelent, a részletesebb jelentések hozzájárulhatnak magasabb jutalomhoz. Kérjük, látogasson el a [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) oldalára, ahol további információkat talál az aktív programjainkról.
|
||||
|
||||
## Előnyben részesített nyelvek
|
||||
|
||||
Előnyben részesítjük, ha minden kommunikáció angol nyelven történik.
|
||||
|
||||
## Irányelv
|
||||
|
||||
A Microsoft a [Koordinált sebezhetőség közzététel](https://www.microsoft.com/en-us/msrc/cvd) elvét követi.
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,24 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "872be8bc1b93ef1dd9ac3d6e8f99f6ab",
|
||||
"translation_date": "2025-09-05T15:04:53+00:00",
|
||||
"source_file": "SUPPORT.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Támogatás
|
||||
## Hogyan lehet hibákat jelenteni és segítséget kérni
|
||||
|
||||
Ez a projekt a GitHub Issues-t használja a hibák és funkciókérések nyomon követésére. Kérjük, keresse meg a meglévő hibákat, mielőtt újakat jelentene, hogy elkerülje a duplikációkat. Új hibák esetén jelentse a hibát vagy funkciókérést új Issue-ként.
|
||||
|
||||
Ha segítségre van szüksége, vagy kérdése van a projekt használatával kapcsolatban, nyújtson be egy Issue-t.
|
||||
|
||||
## Microsoft Támogatási Irányelv
|
||||
|
||||
Ennek a tárolónak a támogatása az itt felsorolt erőforrásokra korlátozódik.
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,57 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "68dd06c685f6ce840e0acfa313352e7c",
|
||||
"translation_date": "2025-09-05T15:48:22+00:00",
|
||||
"source_file": "docs/_sidebar.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
- Bevezetés
|
||||
- [Bevezetés a gépi tanulásba](../1-Introduction/1-intro-to-ML/README.md)
|
||||
- [A gépi tanulás története](../1-Introduction/2-history-of-ML/README.md)
|
||||
- [Gépi tanulás és méltányosság](../1-Introduction/3-fairness/README.md)
|
||||
- [A gépi tanulás technikái](../1-Introduction/4-techniques-of-ML/README.md)
|
||||
|
||||
- Regresszió
|
||||
- [A szakma eszközei](../2-Regression/1-Tools/README.md)
|
||||
- [Adatok](../2-Regression/2-Data/README.md)
|
||||
- [Lineáris regresszió](../2-Regression/3-Linear/README.md)
|
||||
- [Logisztikus regresszió](../2-Regression/4-Logistic/README.md)
|
||||
|
||||
- Webalkalmazás készítése
|
||||
- [Webalkalmazás](../3-Web-App/1-Web-App/README.md)
|
||||
|
||||
- Osztályozás
|
||||
- [Bevezetés az osztályozásba](../4-Classification/1-Introduction/README.md)
|
||||
- [Osztályozók 1](../4-Classification/2-Classifiers-1/README.md)
|
||||
- [Osztályozók 2](../4-Classification/3-Classifiers-2/README.md)
|
||||
- [Alkalmazott gépi tanulás](../4-Classification/4-Applied/README.md)
|
||||
|
||||
- Klaszterezés
|
||||
- [Adatok vizualizálása](../5-Clustering/1-Visualize/README.md)
|
||||
- [K-Means](../5-Clustering/2-K-Means/README.md)
|
||||
|
||||
- NLP
|
||||
- [Bevezetés az NLP-be](../6-NLP/1-Introduction-to-NLP/README.md)
|
||||
- [NLP feladatok](../6-NLP/2-Tasks/README.md)
|
||||
- [Fordítás és érzelemelemzés](../6-NLP/3-Translation-Sentiment/README.md)
|
||||
- [Hotel vélemények 1](../6-NLP/4-Hotel-Reviews-1/README.md)
|
||||
- [Hotel vélemények 2](../6-NLP/5-Hotel-Reviews-2/README.md)
|
||||
|
||||
- Idősoros előrejelzés
|
||||
- [Bevezetés az idősoros előrejelzésbe](../7-TimeSeries/1-Introduction/README.md)
|
||||
- [ARIMA](../7-TimeSeries/2-ARIMA/README.md)
|
||||
- [SVR](../7-TimeSeries/3-SVR/README.md)
|
||||
|
||||
- Megerősítéses tanulás
|
||||
- [Q-Learning](../8-Reinforcement/1-QLearning/README.md)
|
||||
- [Gym](../8-Reinforcement/2-Gym/README.md)
|
||||
|
||||
- Gépi tanulás a való életben
|
||||
- [Alkalmazások](../9-Real-World/1-Applications/README.md)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,37 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "b37de02054fa6c0438ede6fabe1fdfb8",
|
||||
"translation_date": "2025-09-05T15:06:46+00:00",
|
||||
"source_file": "for-teachers.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
## Oktatóknak
|
||||
|
||||
Szeretné használni ezt a tananyagot az osztályában? Nyugodtan tegye meg!
|
||||
|
||||
Valójában a GitHub segítségével is használhatja, a GitHub Classroom funkcióval.
|
||||
|
||||
Ehhez forkolja ezt a repót. Minden egyes leckéhez létre kell hoznia egy külön repót, tehát ki kell emelnie minden mappát egy külön repóba. Így a [GitHub Classroom](https://classroom.github.com/classrooms) külön-külön tudja kezelni az egyes leckéket.
|
||||
|
||||
Ezek az [részletes útmutatók](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) segítenek abban, hogyan állítsa be az osztálytermet.
|
||||
|
||||
## A repó használata jelenlegi formájában
|
||||
|
||||
Ha szeretné a repót úgy használni, ahogy most van, GitHub Classroom nélkül, az is lehetséges. Ebben az esetben kommunikálnia kell a diákokkal, hogy melyik leckén dolgozzanak együtt.
|
||||
|
||||
Online formátumban (Zoom, Teams vagy más platform) létrehozhat kisebb csoportokat a kvízekhez, és mentorálhatja a diákokat, hogy felkészüljenek a tanulásra. Ezután meghívhatja őket a kvízekre, és arra kérheti őket, hogy 'issues' formájában adják be válaszaikat egy meghatározott időpontban. Ugyanezt teheti a feladatokkal is, ha azt szeretné, hogy a diákok nyíltan, együttműködve dolgozzanak.
|
||||
|
||||
Ha inkább privát formátumot szeretne, kérje meg a diákokat, hogy forkolják a tananyagot, leckéről leckére, saját privát GitHub repóikba, és adjanak Önnek hozzáférést. Így a kvízeket és feladatokat privát módon tudják elvégezni, és az Ön osztálytermi repóján keresztül issues formájában tudják benyújtani.
|
||||
|
||||
Számos módja van annak, hogy ez működjön egy online osztálytermi formátumban. Kérjük, ossza meg velünk, hogy Önnek mi válik be a legjobban!
|
||||
|
||||
## Kérjük, ossza meg velünk a véleményét!
|
||||
|
||||
Szeretnénk, hogy ez a tananyag az Ön és diákjai számára is jól működjön. Kérjük, ossza meg velünk [visszajelzését](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u).
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,127 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "6d130dffca5db70d7e615f926cb1ad4c",
|
||||
"translation_date": "2025-09-05T16:15:21+00:00",
|
||||
"source_file": "quiz-app/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
# Kvízek
|
||||
|
||||
Ezek a kvízek az ML tananyag előtti és utáni kvízei a https://aka.ms/ml-beginners oldalon.
|
||||
|
||||
## Projekt beállítása
|
||||
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
### Fejlesztéshez való fordítás és gyors újratöltés
|
||||
|
||||
```
|
||||
npm run serve
|
||||
```
|
||||
|
||||
### Fordítás és minimalizálás produkciós környezethez
|
||||
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
|
||||
### Fájlok ellenőrzése és javítása
|
||||
|
||||
```
|
||||
npm run lint
|
||||
```
|
||||
|
||||
### Konfiguráció testreszabása
|
||||
|
||||
Lásd [Konfigurációs Referencia](https://cli.vuejs.org/config/).
|
||||
|
||||
Köszönet: Köszönet az eredeti kvíz alkalmazás verziójáért: https://github.com/arpan45/simple-quiz-vue
|
||||
|
||||
## Azure-ra történő telepítés
|
||||
|
||||
Íme egy lépésről lépésre útmutató, hogy elkezdhesd:
|
||||
|
||||
1. Forkolj egy GitHub repozitóriumot
|
||||
Győződj meg róla, hogy a statikus webalkalmazásod kódja a GitHub repozitóriumodban van. Forkold ezt a repozitóriumot.
|
||||
|
||||
2. Hozz létre egy Azure Statikus Webalkalmazást
|
||||
- Hozz létre egy [Azure fiókot](http://azure.microsoft.com)
|
||||
- Lépj be az [Azure portálra](https://portal.azure.com)
|
||||
- Kattints a „Create a resource” gombra, és keress rá a „Static Web App”-ra.
|
||||
- Kattints a „Create” gombra.
|
||||
|
||||
3. Konfiguráld a Statikus Webalkalmazást
|
||||
- Alapok:
|
||||
- Előfizetés: Válaszd ki az Azure előfizetésedet.
|
||||
- Erőforráscsoport: Hozz létre egy új erőforráscsoportot, vagy használj egy meglévőt.
|
||||
- Név: Adj nevet a statikus webalkalmazásodnak.
|
||||
- Régió: Válaszd ki a felhasználóidhoz legközelebbi régiót.
|
||||
|
||||
- #### Telepítési részletek:
|
||||
- Forrás: Válaszd a „GitHub”-ot.
|
||||
- GitHub fiók: Engedélyezd az Azure számára, hogy hozzáférjen a GitHub fiókodhoz.
|
||||
- Szervezet: Válaszd ki a GitHub szervezetedet.
|
||||
- Repozitórium: Válaszd ki azt a repozitóriumot, amely tartalmazza a statikus webalkalmazásodat.
|
||||
- Ág: Válaszd ki azt az ágat, amelyből telepíteni szeretnél.
|
||||
|
||||
- #### Build részletek:
|
||||
- Build előbeállítások: Válaszd ki azt a keretrendszert, amelyre az alkalmazásod épül (pl. React, Angular, Vue stb.).
|
||||
- Alkalmazás helye: Add meg azt a mappát, amely tartalmazza az alkalmazásod kódját (pl. / ha a gyökérben van).
|
||||
- API helye: Ha van API-d, add meg annak helyét (opcionális).
|
||||
- Kimeneti hely: Add meg azt a mappát, ahol a build kimenet generálódik (pl. build vagy dist).
|
||||
|
||||
4. Áttekintés és létrehozás
|
||||
Tekintsd át a beállításaidat, majd kattints a „Create” gombra. Az Azure létrehozza a szükséges erőforrásokat, és létrehoz egy GitHub Actions munkafolyamatot a repozitóriumodban.
|
||||
|
||||
5. GitHub Actions munkafolyamat
|
||||
Az Azure automatikusan létrehoz egy GitHub Actions munkafolyamat fájlt a repozitóriumodban (.github/workflows/azure-static-web-apps-<name>.yml). Ez a munkafolyamat kezeli a build és telepítési folyamatot.
|
||||
|
||||
6. A telepítés nyomon követése
|
||||
Lépj a GitHub repozitóriumod „Actions” fülére.
|
||||
Látnod kell egy futó munkafolyamatot. Ez a munkafolyamat felépíti és telepíti a statikus webalkalmazásodat az Azure-ra.
|
||||
Amint a munkafolyamat befejeződik, az alkalmazásod élő lesz az Azure által biztosított URL-en.
|
||||
|
||||
### Példa munkafolyamat fájl
|
||||
|
||||
Íme, hogyan nézhet ki egy GitHub Actions munkafolyamat fájl:
|
||||
name: Azure Static Web Apps CI/CD
|
||||
```
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, closed]
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build_and_deploy_job:
|
||||
runs-on: ubuntu-latest
|
||||
name: Build and Deploy Job
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build And Deploy
|
||||
id: builddeploy
|
||||
uses: Azure/static-web-apps-deploy@v1
|
||||
with:
|
||||
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
action: "upload"
|
||||
app_location: "/quiz-app" # App source code path
|
||||
api_location: ""API source code path optional
|
||||
output_location: "dist" #Built app content directory - optional
|
||||
```
|
||||
|
||||
### További források
|
||||
- [Azure Statikus Webalkalmazások Dokumentáció](https://learn.microsoft.com/azure/static-web-apps/getting-started)
|
||||
- [GitHub Actions Dokumentáció](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,21 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "a88d5918c1b9da69a40d917a0840c497",
|
||||
"translation_date": "2025-09-05T16:28:21+00:00",
|
||||
"source_file": "sketchnotes/README.md",
|
||||
"language_code": "hu"
|
||||
}
|
||||
-->
|
||||
Az összes tananyaghoz tartozó sketchnote-ok innen letölthetők.
|
||||
|
||||
🖨 Nyomtatáshoz, nagy felbontású TIFF verziók elérhetők ebben a repóban: [this repo](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff).
|
||||
|
||||
🎨 Készítette: [Tomomi Imura](https://github.com/girliemac) (Twitter: [@girlie_mac](https://twitter.com/girlie_mac))
|
||||
|
||||
[](https://creativecommons.org/licenses/by-sa/4.0/)
|
||||
|
||||
---
|
||||
|
||||
**Felelősség kizárása**:
|
||||
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális, emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
|
@ -0,0 +1,159 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "69389392fa6346e0dfa30f664b7b6fec",
|
||||
"translation_date": "2025-09-05T16:07:43+00:00",
|
||||
"source_file": "1-Introduction/1-intro-to-ML/README.md",
|
||||
"language_code": "ro"
|
||||
}
|
||||
-->
|
||||
# Introducere în învățarea automată
|
||||
|
||||
## [Chestionar înainte de lecție](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
---
|
||||
|
||||
[](https://youtu.be/6mSx_KJxcHI "ML pentru începători - Introducere în Învățarea Automată pentru Începători")
|
||||
|
||||
> 🎥 Click pe imaginea de mai sus pentru un scurt videoclip despre această lecție.
|
||||
|
||||
Bine ai venit la acest curs despre învățarea automată clasică pentru începători! Indiferent dacă ești complet nou în acest subiect sau un practician experimentat în ML care dorește să își reîmprospăteze cunoștințele, suntem bucuroși să te avem alături! Ne dorim să creăm un punct de plecare prietenos pentru studiul tău în ML și am fi încântați să evaluăm, să răspundem și să integrăm [feedback-ul tău](https://github.com/microsoft/ML-For-Beginners/discussions).
|
||||
|
||||
[](https://youtu.be/h0e2HAPTGF4 "Introducere în ML")
|
||||
|
||||
> 🎥 Click pe imaginea de mai sus pentru un videoclip: John Guttag de la MIT introduce învățarea automată
|
||||
|
||||
---
|
||||
## Începerea cu învățarea automată
|
||||
|
||||
Înainte de a începe acest curriculum, trebuie să îți configurezi computerul pentru a putea rula notebook-uri local.
|
||||
|
||||
- **Configurează-ți dispozitivul cu aceste videoclipuri**. Folosește următoarele linkuri pentru a învăța [cum să instalezi Python](https://youtu.be/CXZYvNRIAKM) pe sistemul tău și [cum să configurezi un editor de text](https://youtu.be/EU8eayHWoZg) pentru dezvoltare.
|
||||
- **Învață Python**. Este recomandat să ai o înțelegere de bază a [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), un limbaj de programare util pentru oamenii de știință în domeniul datelor pe care îl folosim în acest curs.
|
||||
- **Învață Node.js și JavaScript**. Vom folosi JavaScript de câteva ori în acest curs pentru a construi aplicații web, așa că va trebui să ai [node](https://nodejs.org) și [npm](https://www.npmjs.com/) instalate, precum și [Visual Studio Code](https://code.visualstudio.com/) disponibil pentru dezvoltarea atât în Python, cât și în JavaScript.
|
||||
- **Creează un cont GitHub**. Deoarece ne-ai găsit aici pe [GitHub](https://github.com), este posibil să ai deja un cont, dar dacă nu, creează unul și apoi clonează acest curriculum pentru a-l folosi pe cont propriu. (Nu ezita să ne dai și o stea 😊)
|
||||
- **Explorează Scikit-learn**. Familiarizează-te cu [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), un set de biblioteci ML pe care le referim în aceste lecții.
|
||||
|
||||
---
|
||||
## Ce este învățarea automată?
|
||||
|
||||
Termenul 'învățare automată' este unul dintre cele mai populare și frecvent utilizate termene din zilele noastre. Există o posibilitate considerabilă ca să fi auzit acest termen cel puțin o dată dacă ai o oarecare familiaritate cu tehnologia, indiferent de domeniul în care lucrezi. Mecanismele învățării automate, însă, sunt un mister pentru majoritatea oamenilor. Pentru un începător în învățarea automată, subiectul poate părea uneori copleșitor. Prin urmare, este important să înțelegem ce este de fapt învățarea automată și să o studiem pas cu pas, prin exemple practice.
|
||||
|
||||
---
|
||||
## Curba hype-ului
|
||||
|
||||

|
||||
|
||||
> Google Trends arată curba recentă de 'hype' a termenului 'învățare automată'
|
||||
|
||||
---
|
||||
## Un univers misterios
|
||||
|
||||
Trăim într-un univers plin de mistere fascinante. Mari oameni de știință precum Stephen Hawking, Albert Einstein și mulți alții și-au dedicat viețile căutării de informații semnificative care să dezvăluie misterele lumii din jurul nostru. Aceasta este condiția umană a învățării: un copil învață lucruri noi și descoperă structura lumii sale an de an pe măsură ce crește.
|
||||
|
||||
---
|
||||
## Creierul copilului
|
||||
|
||||
Creierul și simțurile unui copil percep faptele din mediul înconjurător și învață treptat tiparele ascunse ale vieții, care ajută copilul să creeze reguli logice pentru a identifica tiparele învățate. Procesul de învățare al creierului uman face ca oamenii să fie cele mai sofisticate ființe vii ale acestei lumi. Învățarea continuă prin descoperirea tiparelor ascunse și apoi inovarea pe baza acestor tipare ne permite să ne îmbunătățim constant pe parcursul vieții. Această capacitate de învățare și evoluție este legată de un concept numit [plasticitatea creierului](https://www.simplypsychology.org/brain-plasticity.html). Superficial, putem trasa unele similitudini motivaționale între procesul de învățare al creierului uman și conceptele de învățare automată.
|
||||
|
||||
---
|
||||
## Creierul uman
|
||||
|
||||
[Creierul uman](https://www.livescience.com/29365-human-brain.html) percepe lucruri din lumea reală, procesează informațiile percepute, ia decizii raționale și efectuează anumite acțiuni în funcție de circumstanțe. Acesta este ceea ce numim comportament inteligent. Când programăm o replică a procesului comportamental inteligent într-o mașină, aceasta se numește inteligență artificială (AI).
|
||||
|
||||
---
|
||||
## Un pic de terminologie
|
||||
|
||||
Deși termenii pot fi confundați, învățarea automată (ML) este un subset important al inteligenței artificiale. **ML se ocupă de utilizarea algoritmilor specializați pentru a descoperi informații semnificative și a găsi tipare ascunse din datele percepute pentru a susține procesul de luare a deciziilor raționale**.
|
||||
|
||||
---
|
||||
## AI, ML, Învățare profundă
|
||||
|
||||

|
||||
|
||||
> Un diagramă care arată relațiile dintre AI, ML, învățarea profundă și știința datelor. Infografic de [Jen Looper](https://twitter.com/jenlooper) inspirat de [acest grafic](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining)
|
||||
|
||||
---
|
||||
## Concepte de acoperit
|
||||
|
||||
În acest curriculum, vom acoperi doar conceptele de bază ale învățării automate pe care un începător trebuie să le cunoască. Vom aborda ceea ce numim 'învățare automată clasică', utilizând în principal Scikit-learn, o bibliotecă excelentă pe care mulți studenți o folosesc pentru a învăța elementele de bază. Pentru a înțelege conceptele mai largi ale inteligenței artificiale sau ale învățării profunde, o cunoaștere fundamentală solidă a învățării automate este indispensabilă, și dorim să o oferim aici.
|
||||
|
||||
---
|
||||
## În acest curs vei învăța:
|
||||
|
||||
- conceptele de bază ale învățării automate
|
||||
- istoria ML
|
||||
- ML și echitatea
|
||||
- tehnici de regresie ML
|
||||
- tehnici de clasificare ML
|
||||
- tehnici de grupare ML
|
||||
- procesarea limbajului natural ML
|
||||
- tehnici de prognoză a seriilor temporale ML
|
||||
- învățare prin întărire
|
||||
- aplicații reale pentru ML
|
||||
|
||||
---
|
||||
## Ce nu vom acoperi
|
||||
|
||||
- învățarea profundă
|
||||
- rețele neuronale
|
||||
- AI
|
||||
|
||||
Pentru a oferi o experiență de învățare mai bună, vom evita complexitățile rețelelor neuronale, 'învățarea profundă' - construirea de modele cu multe straturi folosind rețele neuronale - și AI, pe care le vom discuta într-un alt curriculum. De asemenea, vom oferi un curriculum viitor despre știința datelor pentru a ne concentra pe acest aspect al acestui domeniu mai larg.
|
||||
|
||||
---
|
||||
## De ce să studiezi învățarea automată?
|
||||
|
||||
Învățarea automată, din perspectiva sistemelor, este definită ca crearea de sisteme automate care pot învăța tipare ascunse din date pentru a ajuta la luarea deciziilor inteligente.
|
||||
|
||||
Această motivație este vag inspirată de modul în care creierul uman învață anumite lucruri pe baza datelor pe care le percepe din lumea exterioară.
|
||||
|
||||
✅ Gândește-te un minut de ce o afacere ar dori să folosească strategii de învățare automată în loc să creeze un motor bazat pe reguli codificate manual.
|
||||
|
||||
---
|
||||
## Aplicații ale învățării automate
|
||||
|
||||
Aplicațiile învățării automate sunt acum aproape peste tot și sunt la fel de omniprezente ca datele care circulă în societățile noastre, generate de telefoanele noastre inteligente, dispozitivele conectate și alte sisteme. Având în vedere potențialul imens al algoritmilor de învățare automată de ultimă generație, cercetătorii au explorat capacitatea lor de a rezolva probleme multidimensionale și multidisciplinare din viața reală cu rezultate pozitive remarcabile.
|
||||
|
||||
---
|
||||
## Exemple de ML aplicat
|
||||
|
||||
**Poți folosi învățarea automată în multe moduri**:
|
||||
|
||||
- Pentru a prezice probabilitatea unei boli pe baza istoricului medical sau a rapoartelor unui pacient.
|
||||
- Pentru a utiliza datele meteorologice pentru a prezice evenimente meteorologice.
|
||||
- Pentru a înțelege sentimentul unui text.
|
||||
- Pentru a detecta știrile false și a opri răspândirea propagandei.
|
||||
|
||||
Finanțe, economie, știința pământului, explorarea spațiului, ingineria biomedicală, știința cognitivă și chiar domenii din științele umaniste au adaptat învățarea automată pentru a rezolva problemele grele de procesare a datelor din domeniul lor.
|
||||
|
||||
---
|
||||
## Concluzie
|
||||
|
||||
Învățarea automată automatizează procesul de descoperire a tiparelor prin găsirea de informații semnificative din datele reale sau generate. S-a dovedit a fi extrem de valoroasă în aplicații de afaceri, sănătate și financiare, printre altele.
|
||||
|
||||
În viitorul apropiat, înțelegerea elementelor de bază ale învățării automate va deveni o necesitate pentru oamenii din orice domeniu datorită adoptării sale pe scară largă.
|
||||
|
||||
---
|
||||
# 🚀 Provocare
|
||||
|
||||
Desenează, pe hârtie sau folosind o aplicație online precum [Excalidraw](https://excalidraw.com/), înțelegerea ta despre diferențele dintre AI, ML, învățarea profundă și știința datelor. Adaugă câteva idei despre problemele pe care fiecare dintre aceste tehnici le rezolvă bine.
|
||||
|
||||
# [Chestionar după lecție](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
---
|
||||
# Recapitulare & Studiu individual
|
||||
|
||||
Pentru a afla mai multe despre cum poți lucra cu algoritmi ML în cloud, urmează acest [Parcurs de învățare](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott).
|
||||
|
||||
Urmează un [Parcurs de învățare](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) despre elementele de bază ale ML.
|
||||
|
||||
---
|
||||
# Temă
|
||||
|
||||
[Începe să lucrezi](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Declinare de responsabilitate**:
|
||||
Acest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși ne străduim să asigurăm acuratețea, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa natală ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri.
|
@ -0,0 +1,23 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "4c4698044bb8af52cfb6388a4ee0e53b",
|
||||
"translation_date": "2025-09-05T16:08:33+00:00",
|
||||
"source_file": "1-Introduction/1-intro-to-ML/assignment.md",
|
||||
"language_code": "ro"
|
||||
}
|
||||
-->
|
||||
# Începe și pornește
|
||||
|
||||
## Instrucțiuni
|
||||
|
||||
În această sarcină fără notare, ar trebui să îți reîmprospătezi cunoștințele de Python și să îți configurezi mediul astfel încât să poți rula notebook-uri.
|
||||
|
||||
Urmează acest [Parcurs de Învățare Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), apoi configurează-ți sistemele parcurgând aceste videoclipuri introductive:
|
||||
|
||||
https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6
|
||||
|
||||
---
|
||||
|
||||
**Declinare de responsabilitate**:
|
||||
Acest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși ne străduim să asigurăm acuratețea, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa natală ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri.
|
@ -0,0 +1,164 @@
|
||||
<!--
|
||||
CO_OP_TRANSLATOR_METADATA:
|
||||
{
|
||||
"original_hash": "6a05fec147e734c3e6bfa54505648e2b",
|
||||
"translation_date": "2025-09-05T16:10:41+00:00",
|
||||
"source_file": "1-Introduction/2-history-of-ML/README.md",
|
||||
"language_code": "ro"
|
||||
}
|
||||
-->
|
||||
# Istoria învățării automate
|
||||
|
||||

|
||||
> Schiță realizată de [Tomomi Imura](https://www.twitter.com/girlie_mac)
|
||||
|
||||
## [Chestionar înainte de lecție](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
---
|
||||
|
||||
[](https://youtu.be/N6wxM4wZ7V0 "ML pentru începători - Istoria învățării automate")
|
||||
|
||||
> 🎥 Click pe imaginea de mai sus pentru un scurt videoclip despre această lecție.
|
||||
|
||||
În această lecție, vom parcurge principalele momente din istoria învățării automate și a inteligenței artificiale.
|
||||
|
||||
Istoria inteligenței artificiale (IA) ca domeniu este strâns legată de istoria învățării automate, deoarece algoritmii și progresele computaționale care stau la baza ML au contribuit la dezvoltarea IA. Este util să ne amintim că, deși aceste domenii ca arii distincte de cercetare au început să se cristalizeze în anii 1950, descoperiri importante [algoritmice, statistice, matematice, computaționale și tehnice](https://wikipedia.org/wiki/Timeline_of_machine_learning) au precedat și s-au suprapus cu această perioadă. De fapt, oamenii au reflectat asupra acestor întrebări de [sute de ani](https://wikipedia.org/wiki/History_of_artificial_intelligence): acest articol discută fundamentele intelectuale istorice ale ideii de 'mașină care gândește'.
|
||||
|
||||
---
|
||||
## Descoperiri notabile
|
||||
|
||||
- 1763, 1812 [Teorema lui Bayes](https://wikipedia.org/wiki/Bayes%27_theorem) și predecesorii săi. Această teoremă și aplicațiile sale stau la baza inferenței, descriind probabilitatea unui eveniment pe baza cunoștințelor anterioare.
|
||||
- 1805 [Teoria celor mai mici pătrate](https://wikipedia.org/wiki/Least_squares) de matematicianul francez Adrien-Marie Legendre. Această teorie, pe care o veți învăța în unitatea noastră despre regresie, ajută la ajustarea datelor.
|
||||
- 1913 [Lanțurile Markov](https://wikipedia.org/wiki/Markov_chain), numite după matematicianul rus Andrey Markov, sunt utilizate pentru a descrie o secvență de evenimente posibile bazate pe o stare anterioară.
|
||||
- 1957 [Perceptronul](https://wikipedia.org/wiki/Perceptron) este un tip de clasificator liniar inventat de psihologul american Frank Rosenblatt, care stă la baza progreselor în învățarea profundă.
|
||||
|
||||
---
|
||||
|
||||
- 1967 [Cel mai apropiat vecin](https://wikipedia.org/wiki/Nearest_neighbor) este un algoritm inițial conceput pentru a cartografia rute. În contextul ML, este utilizat pentru a detecta modele.
|
||||
- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) este utilizat pentru a antrena [rețele neuronale feedforward](https://wikipedia.org/wiki/Feedforward_neural_network).
|
||||
- 1982 [Rețele neuronale recurente](https://wikipedia.org/wiki/Recurrent_neural_network) sunt rețele neuronale artificiale derivate din rețelele neuronale feedforward care creează grafice temporale.
|
||||
|
||||
✅ Faceți puțină cercetare. Ce alte date se remarcă ca fiind esențiale în istoria ML și IA?
|
||||
|
||||
---
|
||||
## 1950: Mașini care gândesc
|
||||
|
||||
Alan Turing, o persoană cu adevărat remarcabilă, votat [de public în 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) drept cel mai mare om de știință al secolului XX, este creditat cu punerea bazelor conceptului de 'mașină care poate gândi'. El s-a confruntat cu sceptici și cu propria nevoie de dovezi empirice ale acestui concept, în parte prin crearea [Testului Turing](https://www.bbc.com/news/technology-18475646), pe care îl veți explora în lecțiile noastre despre NLP.
|
||||
|
||||
---
|
||||
## 1956: Proiectul de cercetare de vară de la Dartmouth
|
||||
|
||||
"Proiectul de cercetare de vară de la Dartmouth despre inteligența artificială a fost un eveniment seminal pentru inteligența artificială ca domeniu," și aici a fost inventat termenul 'inteligență artificială' ([sursa](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)).
|
||||
|
||||
> Fiecare aspect al învățării sau orice altă caracteristică a inteligenței poate fi, în principiu, descris atât de precis încât o mașină poate fi construită pentru a o simula.
|
||||
|
||||
---
|
||||
|
||||
Cercetătorul principal, profesorul de matematică John McCarthy, spera "să procedeze pe baza conjecturii că fiecare aspect al învățării sau orice altă caracteristică a inteligenței poate fi, în principiu, descris atât de precis încât o mașină poate fi construită pentru a o simula." Participanții au inclus o altă personalitate marcantă din domeniu, Marvin Minsky.
|
||||
|
||||
Atelierul este creditat cu inițierea și încurajarea mai multor discuții, inclusiv "ascensiunea metodelor simbolice, sistemele axate pe domenii limitate (sisteme expert timpurii) și sistemele deductive versus sistemele inductive." ([sursa](https://wikipedia.org/wiki/Dartmouth_workshop)).
|
||||
|
||||
---
|
||||
## 1956 - 1974: "Anii de aur"
|
||||
|
||||
Din anii 1950 până la mijlocul anilor '70, optimismul era ridicat în speranța că IA ar putea rezolva multe probleme. În 1967, Marvin Minsky afirma cu încredere că "Într-o generație ... problema creării 'inteligenței artificiale' va fi substanțial rezolvată." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall)
|
||||
|
||||
Cercetarea în procesarea limbajului natural a înflorit, căutarea a fost rafinată și făcută mai puternică, iar conceptul de 'micro-lumi' a fost creat, unde sarcini simple erau realizate folosind instrucțiuni în limbaj simplu.
|
||||
|
||||
---
|
||||
|
||||
Cercetarea era bine finanțată de agențiile guvernamentale, s-au făcut progrese în calcul și algoritmi, iar prototipuri de mașini inteligente au fost construite. Unele dintre aceste mașini includ:
|
||||
|
||||
* [Shakey robotul](https://wikipedia.org/wiki/Shakey_the_robot), care putea să se deplaseze și să decidă cum să îndeplinească sarcini 'inteligent'.
|
||||
|
||||

|
||||
> Shakey în 1972
|
||||
|
||||
---
|
||||
|
||||
* Eliza, un 'chatterbot' timpuriu, putea conversa cu oamenii și acționa ca un 'terapeut' primitiv. Veți învăța mai multe despre Eliza în lecțiile despre NLP.
|
||||
|
||||

|
||||
> O versiune a Eliza, un chatbot
|
||||
|
||||
---
|
||||
|
||||
* "Blocks world" era un exemplu de micro-lume unde blocurile puteau fi stivuite și sortate, iar experimentele în învățarea mașinilor să ia decizii puteau fi testate. Progresele realizate cu biblioteci precum [SHRDLU](https://wikipedia.org/wiki/SHRDLU) au ajutat la propulsarea procesării limbajului.
|
||||
|
||||
[](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world cu SHRDLU")
|
||||
|
||||
> 🎥 Click pe imaginea de mai sus pentru un videoclip: Blocks world cu SHRDLU
|
||||
|
||||
---
|
||||
## 1974 - 1980: "Iarna IA"
|
||||
|
||||
Până la mijlocul anilor 1970, devenise evident că complexitatea creării 'mașinilor inteligente' fusese subestimată și că promisiunea sa, având în vedere puterea de calcul disponibilă, fusese exagerată. Finanțarea s-a redus și încrederea în domeniu a încetinit. Unele probleme care au afectat încrederea includ:
|
||||
---
|
||||
- **Limitări**. Puterea de calcul era prea limitată.
|
||||
- **Explozia combinatorică**. Numărul de parametri necesari pentru antrenare creștea exponențial pe măsură ce se cerea mai mult de la computere, fără o evoluție paralelă a puterii și capacității de calcul.
|
||||
- **Lipsa de date**. Lipsa datelor a împiedicat procesul de testare, dezvoltare și rafinare a algoritmilor.
|
||||
- **Punem întrebările corecte?**. Însăși întrebările care erau puse au început să fie puse sub semnul întrebării. Cercetătorii au început să primească critici cu privire la abordările lor:
|
||||
- Testele Turing au fost puse sub semnul întrebării prin mijloace, printre alte idei, ale 'teoriei camerei chineze', care susținea că "programarea unui computer digital poate face să pară că înțelege limbajul, dar nu poate produce o înțelegere reală." ([sursa](https://plato.stanford.edu/entries/chinese-room/))
|
||||
- Etica introducerii inteligențelor artificiale, cum ar fi "terapeutul" ELIZA, în societate a fost contestată.
|
||||
|
||||
---
|
||||
|
||||
În același timp, diverse școli de gândire IA au început să se formeze. S-a stabilit o dihotomie între practicile ["scruffy" vs. "neat IA"](https://wikipedia.org/wiki/Neats_and_scruffies). Laboratoarele _scruffy_ ajustau programele ore întregi până obțineau rezultatele dorite. Laboratoarele _neat_ "se concentrau pe logică și rezolvarea formală a problemelor". ELIZA și SHRDLU erau sisteme _scruffy_ bine cunoscute. În anii 1980, pe măsură ce a apărut cererea de a face sistemele ML reproducibile, abordarea _neat_ a preluat treptat prim-planul, deoarece rezultatele sale sunt mai explicabile.
|
||||
|
||||
---
|
||||
## Sistemele expert din anii 1980
|
||||
|
||||
Pe măsură ce domeniul a crescut, beneficiul său pentru afaceri a devenit mai clar, iar în anii 1980 la fel și proliferarea 'sistemelor expert'. "Sistemele expert au fost printre primele forme cu adevărat de succes ale software-ului de inteligență artificială (IA)." ([sursa](https://wikipedia.org/wiki/Expert_system)).
|
||||
|
||||
Acest tip de sistem este de fapt _hibrid_, constând parțial dintr-un motor de reguli care definește cerințele de afaceri și un motor de inferență care folosește sistemul de reguli pentru a deduce noi fapte.
|
||||
|
||||
Această eră a văzut, de asemenea, o atenție sporită acordată rețelelor neuronale.
|
||||
|
||||
---
|
||||
## 1987 - 1993: Răcirea IA
|
||||
|
||||
Proliferarea hardware-ului specializat pentru sistemele expert a avut efectul nefericit de a deveni prea specializat. Ascensiunea computerelor personale a concurat cu aceste sisteme mari, specializate și centralizate. Democratizarea calculului începuse și, în cele din urmă, a deschis calea pentru explozia modernă a datelor mari.
|
||||
|
||||
---
|
||||
## 1993 - 2011
|
||||
|
||||
Această epocă a marcat o nouă eră pentru ML și IA, care au reușit să rezolve unele dintre problemele cauzate anterior de lipsa datelor și a puterii de calcul. Cantitatea de date a început să crească rapid și să devină mai accesibilă, în bine și în rău, mai ales odată cu apariția smartphone-ului în jurul anului 2007. Puterea de calcul a crescut exponențial, iar algoritmii au evoluat în paralel. Domeniul a început să câștige maturitate pe măsură ce zilele libere ale trecutului au început să se cristalizeze într-o adevărată disciplină.
|
||||
|
||||
---
|
||||
## Acum
|
||||
|
||||
Astăzi, învățarea automată și IA ating aproape fiecare parte a vieților noastre. Această eră necesită o înțelegere atentă a riscurilor și efectelor potențiale ale acestor algoritmi asupra vieților umane. După cum a afirmat Brad Smith de la Microsoft, "Tehnologia informației ridică probleme care ating esența protecțiilor fundamentale ale drepturilor omului, cum ar fi confidențialitatea și libertatea de exprimare. Aceste probleme sporesc responsabilitatea companiilor de tehnologie care creează aceste produse. În opinia noastră, ele cer, de asemenea, reglementări guvernamentale bine gândite și dezvoltarea unor norme privind utilizările acceptabile" ([sursa](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)).
|
||||
|
||||
---
|
||||
|
||||
Rămâne de văzut ce ne rezervă viitorul, dar este important să înțelegem aceste sisteme computerizate și software-ul și algoritmii pe care le rulează. Sperăm că acest curriculum vă va ajuta să obțineți o înțelegere mai bună, astfel încât să puteți decide singuri.
|
||||
|
||||
[](https://www.youtube.com/watch?v=mTtDfKgLm54 "Istoria învățării profunde")
|
||||
> 🎥 Click pe imaginea de mai sus pentru un videoclip: Yann LeCun discută despre istoria învățării profunde în această prelegere
|
||||
|
||||
---
|
||||
## 🚀Provocare
|
||||
|
||||
Explorați unul dintre aceste momente istorice și aflați mai multe despre oamenii din spatele lor. Există personaje fascinante, iar nicio descoperire științifică nu a fost creată într-un vid cultural. Ce descoperiți?
|
||||
|
||||
## [Chestionar după lecție](https://ff-quizzes.netlify.app/en/ml/)
|
||||
|
||||
---
|
||||
## Recapitulare și studiu individual
|
||||
|
||||
Iată câteva materiale de urmărit și ascultat:
|
||||
|
||||
[Acest podcast în care Amy Boyd discută evoluția IA](http://runasradio.com/Shows/Show/739)
|
||||
|
||||
[](https://www.youtube.com/watch?v=EJt3_bFYKss "Istoria IA de Amy Boyd")
|
||||
|
||||
---
|
||||
|
||||
## Temă
|
||||
|
||||
[Crearea unei cronologii](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**Declinare de responsabilitate**:
|
||||
Acest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși ne străduim să asigurăm acuratețea, vă rugăm să rețineți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa natală ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri.
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue