🌐 Update translations via Co-op Translator

pull/858/head
leestott 2 weeks ago committed by GitHub
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/)
---
[![Gépi tanulás kezdőknek - Bevezetés a gépi tanulásba](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](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).
[![Bevezetés a gépi tanulásba](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](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
![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png)
> 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
![AI, ML, deep learning, data science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png)
> 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
![A gépi tanulás történetének összefoglalása sketchnote-ban](../../../../sketchnotes/ml-history.png)
> 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/)
---
[![Gépi tanulás kezdőknek - A gépi tanulás története](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](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, egy intelligens robot](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg)
> 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 bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png)
> 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.
[![blocks world SHRDLU-val](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](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.
[![A mélytanulás története](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](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)
[![Az MI története Amy Boyd által](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](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,143 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
"translation_date": "2025-09-05T15:59:53+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "hu"
}
-->
# Gépi tanulási megoldások építése felelős AI-val
![A felelős AI összefoglalása a gépi tanulásban egy sketchnote-ban](../../../../sketchnotes/ml-fairness.png)
> 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/)
## Bevezetés
Ebben a tananyagban elkezdjük felfedezni, hogyan hat a gépi tanulás a mindennapi életünkre. Már most is rendszerek és modellek vesznek részt napi döntéshozatali feladatokban, például egészségügyi diagnózisokban, hitelkérelmek jóváhagyásában vagy csalások észlelésében. Ezért fontos, hogy ezek a modellek megbízható eredményeket nyújtsanak. Ahogy bármely szoftveralkalmazás, az AI rendszerek is elmaradhatnak az elvárásoktól, vagy nemkívánatos eredményt hozhatnak. Ezért elengedhetetlen, hogy megértsük és magyarázni tudjuk egy AI modell viselkedését.
Képzeljük el, mi történik, ha az adatok, amelyeket ezeknek a modelleknek az építéséhez használunk, bizonyos demográfiai csoportokat nem tartalmaznak, például faji, nemi, politikai nézetek, vallás, vagy aránytalanul képviselik ezeket. Mi történik, ha a modell kimenete egyes demográfiai csoportokat előnyben részesít? Mi a következmény az alkalmazásra nézve? Továbbá, mi történik, ha a modell káros hatást gyakorol, és árt az embereknek? Ki felelős az AI rendszerek viselkedéséért? Ezeket a kérdéseket fogjuk megvizsgálni ebben a tananyagban.
Ebben a leckében:
- Felhívjuk a figyelmet a gépi tanulásban való méltányosság fontosságára és a méltányossággal kapcsolatos károkra.
- Megismerkedünk azzal a gyakorlattal, hogy a szélsőséges eseteket és szokatlan forgatókönyveket vizsgáljuk a megbízhatóság és biztonság érdekében.
- Megértjük, miért fontos mindenkit felhatalmazni inkluzív rendszerek tervezésével.
- Felfedezzük, milyen létfontosságú a személyes adatok és az emberek biztonságának védelme.
- Megértjük, miért fontos az "üvegdoboz" megközelítés az AI modellek viselkedésének magyarázatában.
- Tudatosítjuk, hogy az elszámoltathatóság elengedhetetlen az AI rendszerekbe vetett bizalom kiépítéséhez.
## Előfeltétel
Előfeltételként kérjük, végezze el a "Felelős AI alapelvei" tanulási útvonalat, és nézze meg az alábbi videót a témáról:
Tudjon meg többet a felelős AI-ról ezen a [tanulási útvonalon](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
[![Microsoft megközelítése a felelős AI-hoz](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoft megközelítése a felelős AI-hoz")
> 🎥 Kattintson a fenti képre a videóért: Microsoft megközelítése a felelős AI-hoz
## Méltányosság
Az AI rendszereknek mindenkit méltányosan kell kezelniük, és el kell kerülniük, hogy hasonló csoportokat különböző módon érintsenek. Például, amikor az AI rendszerek orvosi kezelési tanácsokat, hitelkérelmeket vagy foglalkoztatási ajánlásokat nyújtanak, ugyanazokat az ajánlásokat kell tenniük mindenki számára, akik hasonló tünetekkel, pénzügyi helyzettel vagy szakmai képesítéssel rendelkeznek. Mindannyian örökölt előítéleteket hordozunk magunkban, amelyek befolyásolják döntéseinket és cselekedeteinket. Ezek az előítéletek megjelenhetnek az adatokban, amelyeket az AI rendszerek képzéséhez használunk. Az ilyen manipuláció néha akaratlanul történik. Gyakran nehéz tudatosan felismerni, mikor vezetünk be előítéletet az adatokba.
**„Méltánytalanság”** olyan negatív hatásokat vagy „károkat” foglal magában, amelyek egy csoportot érintenek, például faji, nemi, életkori vagy fogyatékossági státusz alapján. A méltányossággal kapcsolatos főbb károk a következők:
- **Elosztás**, ha például egy nem vagy etnikum előnyben részesül egy másikkal szemben.
- **Szolgáltatás minősége**. Ha az adatokat egy konkrét forgatókönyvre képezzük, de a valóság sokkal összetettebb, az gyenge teljesítményű szolgáltatáshoz vezet. Például egy kézmosó adagoló, amely nem érzékeli a sötét bőrű embereket. [Referencia](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Becsmérlés**. Valami vagy valaki igazságtalan kritizálása és címkézése. Például egy képfelismerő technológia hírhedten gorillának címkézte a sötét bőrű emberek képeit.
- **Túl- vagy alulreprezentáció**. Az a gondolat, hogy egy bizonyos csoportot nem látunk egy bizonyos szakmában, és minden szolgáltatás vagy funkció, amely ezt tovább erősíti, hozzájárul a kárhoz.
- **Sztereotipizálás**. Egy adott csoportot előre meghatározott attribútumokkal társítani. Például egy angol és török közötti nyelvi fordítórendszer pontatlanságokat mutathat a nemekhez kapcsolódó sztereotip asszociációk miatt.
![Fordítás törökre](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png)
> Fordítás törökre
![Fordítás vissza angolra](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png)
> Fordítás vissza angolra
Az AI rendszerek tervezése és tesztelése során biztosítanunk kell, hogy az AI méltányos legyen, és ne legyen programozva előítéletes vagy diszkriminatív döntések meghozatalára, amelyeket az emberek számára is tiltanak. Az AI és gépi tanulás méltányosságának garantálása továbbra is összetett társadalmi-technikai kihívás.
### Megbízhatóság és biztonság
Az AI rendszereknek megbízhatónak, biztonságosnak és következetesnek kell lenniük normál és váratlan körülmények között. Fontos tudni, hogyan viselkednek az AI rendszerek különböző helyzetekben, különösen szélsőséges esetekben. Az AI megoldások építésekor jelentős figyelmet kell fordítani arra, hogyan kezeljük az AI megoldások által tapasztalt különféle körülményeket. Például egy önvezető autónak az emberek biztonságát kell elsődleges prioritásként kezelnie. Ennek eredményeként az autót működtető AI-nak figyelembe kell vennie az összes lehetséges forgatókönyvet, amelyet az autó találhat, például éjszaka, viharok vagy hóviharok, gyerekek, akik átszaladnak az úton, háziállatok, útépítések stb. Az AI rendszer megbízható és biztonságos kezelése széles körülmények között tükrözi az adatkutató vagy AI fejlesztő által a rendszer tervezése vagy tesztelése során figyelembe vett előrelátás szintjét.
> [🎥 Kattintson ide a videóért: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### Inkluzivitás
Az AI rendszereket úgy kell megtervezni, hogy mindenkit bevonjanak és felhatalmazzanak. Az AI rendszerek tervezése és megvalósítása során az adatkutatók és AI fejlesztők azonosítják és kezelik a rendszerben lévő potenciális akadályokat, amelyek akaratlanul kizárhatnak embereket. Például világszerte 1 milliárd ember él fogyatékossággal. Az AI fejlődésével könnyebben hozzáférhetnek információkhoz és lehetőségekhez a mindennapi életükben. Az akadályok kezelésével lehetőséget teremtünk az innovációra és az AI termékek fejlesztésére, amelyek jobb élményeket nyújtanak mindenki számára.
> [🎥 Kattintson ide a videóért: inkluzivitás az AI-ban](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### Biztonság és adatvédelem
Az AI rendszereknek biztonságosnak kell lenniük, és tiszteletben kell tartaniuk az emberek magánéletét. Az emberek kevésbé bíznak azokban a rendszerekben, amelyek veszélyeztetik a magánéletüket, információikat vagy életüket. A gépi tanulási modellek képzésekor az adatokra támaszkodunk a legjobb eredmények elérése érdekében. Ennek során figyelembe kell venni az adatok eredetét és integritását. Például, az adatok felhasználói beküldésűek vagy nyilvánosan elérhetők voltak? Továbbá, az adatokkal való munka során elengedhetetlen olyan AI rendszerek fejlesztése, amelyek képesek megvédeni a bizalmas információkat és ellenállni a támadásoknak. Ahogy az AI egyre elterjedtebbé válik, a magánélet védelme és a fontos személyes és üzleti információk biztonságának megőrzése egyre kritikusabbá és összetettebbé válik. Az adatvédelem és adatbiztonság kérdései különösen nagy figyelmet igényelnek az AI esetében, mivel az adatokhoz való hozzáférés elengedhetetlen az AI rendszerek számára, hogy pontos és megalapozott előrejelzéseket és döntéseket hozzanak az emberekről.
> [🎥 Kattintson ide a videóért: biztonság az AI-ban](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Az iparág jelentős előrelépéseket tett az adatvédelem és biztonság terén, amelyet jelentősen ösztönöztek olyan szabályozások, mint a GDPR (Általános Adatvédelmi Rendelet).
- Az AI rendszerekkel azonban el kell ismernünk a feszültséget a személyes adatok szükségessége és a magánélet védelme között.
- Ahogy az internethez kapcsolt számítógépek születésével, az AI-val kapcsolatos biztonsági problémák száma is jelentősen megnőtt.
- Ugyanakkor az AI-t a biztonság javítására is használjuk. Például a legtöbb modern víruskereső szkennert AI-alapú heurisztikák vezérlik.
- Biztosítanunk kell, hogy az adatkutatási folyamataink harmonikusan illeszkedjenek a legújabb adatvédelmi és biztonsági gyakorlatokhoz.
### Átláthatóság
Az AI rendszereknek érthetőnek kell lenniük. Az átláthatóság kulcsfontosságú része az AI rendszerek és azok összetevőinek viselkedésének magyarázata. Az AI rendszerek megértésének javítása megköveteli, hogy az érintettek megértsék, hogyan és miért működnek, hogy azonosítani tudják a lehetséges teljesítményproblémákat, biztonsági és adatvédelmi aggályokat, előítéleteket, kizáró gyakorlatokat vagy nem szándékos eredményeket. Úgy gondoljuk, hogy azoknak, akik AI rendszereket használnak, őszintének és nyíltnak kell lenniük arról, hogy mikor, miért és hogyan döntenek azok alkalmazása mellett. Valamint a rendszerek korlátairól. Például, ha egy bank AI rendszert használ a fogyasztói hiteldöntések támogatására, fontos megvizsgálni az eredményeket, és megérteni, hogy mely adatok befolyásolják a rendszer ajánlásait. A kormányok elkezdték szabályozni az AI-t az iparágakban, így az adatkutatóknak és szervezeteknek magyarázatot kell adniuk arra, hogy az AI rendszer megfelel-e a szabályozási követelményeknek, különösen, ha nem kívánatos eredmény születik.
> [🎥 Kattintson ide a videóért: átláthatóság az AI-ban](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Mivel az AI rendszerek nagyon összetettek, nehéz megérteni, hogyan működnek és értelmezni az eredményeket.
- Ez a megértés hiánya befolyásolja, hogyan kezelik, üzemeltetik és dokumentálják ezeket a rendszereket.
- Ez a megértés hiánya még fontosabb módon befolyásolja azokat a döntéseket, amelyeket ezeknek a rendszereknek az eredményei alapján hoznak.
### Elszámoltathatóság
Azoknak, akik AI rendszereket terveznek és telepítenek, felelősséget kell vállalniuk rendszereik működéséért. Az elszámoltathatóság szükségessége különösen fontos az érzékeny technológiák, például az arcfelismerés esetében. Az utóbbi időben egyre nagyobb igény mutatkozik az arcfelismerő technológia iránt, különösen a bűnüldöző szervezetek részéről, akik látják a technológia lehetőségeit például eltűnt gyermekek megtalálásában. Azonban ezek a technológiák potenciálisan veszélyeztethetik az állampolgárok alapvető szabadságjogait, például az egyének folyamatos megfigyelésének lehetővé tételével. Ezért az adatkutatóknak és szervezeteknek felelősséget kell vállalniuk AI rendszerük egyénekre vagy társadalomra gyakorolt hatásáért.
[![Vezető AI kutató figyelmeztet a tömeges megfigyelés veszélyeire arcfelismeréssel](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft megközelítése a felelős AI-hoz")
> 🎥 Kattintson a fenti képre a videóért: Figyelmeztetés a tömeges megfigyelés veszélyeire arcfelismeréssel
Végső soron az egyik legnagyobb kérdés generációnk számára, mint az első generáció, amely AI-t hoz a társadalomba, az, hogyan biztosíthatjuk, hogy a számítógépek továbbra is elszámoltathatók maradjanak az emberek számára, és hogyan biztosíthatjuk, hogy a számítógépeket tervező emberek elszámoltathatók maradjanak mindenki más számára.
## Hatásvizsgálat
Mielőtt gépi tanulási modellt képeznénk, fontos hatásvizsgálatot végezni, hogy megértsük az AI rendszer célját; mi a tervezett felhasználás; hol lesz telepítve; és kik fognak interakcióba lépni a rendszerrel. Ezek segítenek a rendszer értékelését végzőknek vagy tesztelőknek, hogy tudják, milyen tényezőket kell figyelembe venniük a lehetséges kockázatok és várható következmények azonosításakor.
A hatásvizsgálat során az alábbi területekre kell összpontosítani:
* **Kedvezőtlen hatás az egyénekre**. Fontos tudatában lenni minden korlátozásnak vagy követelménynek, nem támogatott használatnak vagy ismert korlátozásnak, amelyek akadályozhatják a rendszer teljesítményét, hogy biztosítsuk, hogy a rendszer ne okozzon kárt az egyéneknek.
* **Adatigények**. Az adatok felhasználásának módj
Nézd meg ezt a workshopot, hogy mélyebben elmerülj a témákban:
- A felelős mesterséges intelligencia nyomában: Elvek gyakorlati alkalmazása Besmira Nushi, Mehrnoosh Sameki és Amit Sharma előadásában
[![Responsible AI Toolbox: Nyílt forráskódú keretrendszer a felelős mesterséges intelligencia építéséhez](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Nyílt forráskódú keretrendszer a felelős mesterséges intelligencia építéséhez")
> 🎥 Kattints a fenti képre a videóért: RAI Toolbox: Nyílt forráskódú keretrendszer a felelős mesterséges intelligencia építéséhez Besmira Nushi, Mehrnoosh Sameki és Amit Sharma előadásában
Olvasd el továbbá:
- Microsoft RAI erőforrásközpontja: [Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Microsoft FATE kutatócsoportja: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
RAI Toolbox:
- [Responsible AI Toolbox GitHub repository](https://github.com/microsoft/responsible-ai-toolbox)
Olvass az Azure Machine Learning eszközeiről, amelyek a méltányosság biztosítását szolgálják:
- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
## Feladat
[Ismerd meg a RAI Toolboxot](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": "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/)
[![Gépi tanulás kezdőknek - Gépi tanulás technikái](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](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.
![túlillesztett modell](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png)
> 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!
![globe](../../../1-Introduction/images/globe.jpg)
> 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ázlat a regressziókról](../../../../sketchnotes/ml-regression.png)
> 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
[![ML kezdőknek - Eszközök beállítása gépi tanulási modellek építéséhez](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](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.
>
> [![Python beállítása a Visual Studio Code-ban](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](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.
[![ML kezdőknek - Jupyter Notebookok beállítása regressziós modellek építéséhez](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](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
```
![VS Code egy megnyitott notebookkal](../../../../2-Regression/1-Tools/images/notebook.jpg)
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.
[![ML kezdőknek - Az első lineáris regressziós projekted Python-ban](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](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
![Adatvizualizációs infografika](../../../../2-Regression/2-Data/images/data-visualization.png)
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.
[![ML kezdőknek - Hogyan elemezzünk és tisztítsunk egy adathalmazt](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](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.
[![ML kezdőknek - Hogyan vizualizáljuk az adatokat Matplotlib segítségével](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](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()
```
![Egy szórásdiagram, amely az ár és hónap közötti kapcsolatot mutatja](../../../../2-Regression/2-Data/images/scatterplot.png)
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")
```
![Egy oszlopdiagram, amely az ár és hónap közötti kapcsolatot mutatja](../../../../2-Regression/2-Data/images/barchart.png)
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,371 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "40e64f004f3cb50aa1d8661672d3cd92",
"translation_date": "2025-09-05T15:09:53+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "hu"
}
-->
# Készítsünk regressziós modellt Scikit-learn segítségével: négyféle regresszió
![Lineáris vs polinomiális regresszió infografika](../../../../2-Regression/3-Linear/images/linear-polynomial.png)
> 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/3-Linear/solution/R/lesson_3.html)
### Bevezetés
Eddig megismerkedtél azzal, hogy mi is az a regresszió, például a tökárak adatain keresztül, amelyeket ebben a leckében fogunk használni. A Matplotlib segítségével vizualizáltad is az adatokat.
Most készen állsz arra, hogy mélyebben belemerülj a gépi tanulás regressziós technikáiba. Bár a vizualizáció segít az adatok megértésében, a gépi tanulás valódi ereje a _modellek tanításában_ rejlik. A modelleket történelmi adatokon tanítjuk, hogy automatikusan felismerjék az adatok közötti összefüggéseket, és lehetővé tegyék az előrejelzést olyan új adatokra, amelyeket a modell korábban nem látott.
Ebben a leckében többet fogsz megtudni kétféle regresszióról: _egyszerű lineáris regresszióról_ és _polinomiális regresszióról_, valamint az ezek mögött álló matematikáról. Ezek a modellek lehetővé teszik számunkra, hogy különböző bemeneti adatok alapján előre jelezzük a tökárakat.
[![Gépi tanulás kezdőknek - A lineáris regresszió megértése](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "Gépi tanulás kezdőknek - A lineáris regresszió megértése")
> 🎥 Kattints a fenti képre egy rövid videós összefoglalóért a lineáris regresszióról.
> Ebben a tananyagban minimális matematikai ismereteket feltételezünk, és igyekszünk hozzáférhetővé tenni a különböző területekről érkező diákok számára. Figyelj a jegyzetekre, 🧮 matematikai hívásokra, diagramokra és más tanulási eszközökre, amelyek segítik a megértést.
### Előfeltétel
Mostanra már ismerned kell a tökadatok szerkezetét, amelyeket vizsgálunk. Ezek az adatok előre betöltve és megtisztítva találhatók meg ennek a leckének a _notebook.ipynb_ fájljában. A fájlban a tökárak bushelre vetítve jelennek meg egy új adatkeretben. Győződj meg róla, hogy ezeket a notebookokat futtatni tudod a Visual Studio Code kerneljeiben.
### Felkészülés
Emlékeztetőül: ezeket az adatokat azért töltöd be, hogy kérdéseket tegyél fel velük kapcsolatban.
- Mikor érdemes tököt vásárolni?
- Milyen árat várhatok egy doboz miniatűr tök esetében?
- Érdemes fél bushel kosárban vagy 1 1/9 bushel dobozban vásárolni őket?
Folytassuk az adatok vizsgálatát.
Az előző leckében létrehoztál egy Pandas adatkeretet, és feltöltötted az eredeti adatkészlet egy részével, standardizálva az árakat bushelre vetítve. Ezzel azonban csak körülbelül 400 adatpontot tudtál összegyűjteni, és csak az őszi hónapokra vonatkozóan.
Nézd meg az adatokat, amelyeket előre betöltöttünk ennek a leckének a notebookjában. Az adatok előre betöltve vannak, és egy kezdeti szórásdiagramot is készítettünk, amely hónap adatokat mutat. Talán egy kicsit részletesebb képet kaphatunk az adatok természetéről, ha tovább tisztítjuk őket.
## Egy lineáris regressziós vonal
Ahogy az 1. leckében megtanultad, a lineáris regresszió célja, hogy egy vonalat rajzoljunk, amely:
- **Megmutatja a változók közötti kapcsolatot**. Megmutatja a változók közötti összefüggést.
- **Előrejelzéseket készít**. Pontos előrejelzéseket készít arról, hogy egy új adatpont hol helyezkedne el a vonalhoz képest.
A **Legkisebb négyzetek regressziója** általában ezt a fajta vonalat rajzolja. A "legkisebb négyzetek" kifejezés azt jelenti, hogy a regressziós vonal körüli összes adatpontot négyzetre emeljük, majd összeadjuk. Ideális esetben ez az összeg a lehető legkisebb, mivel alacsony hibaszámot, vagyis `legkisebb négyzeteket` szeretnénk.
Ezt azért tesszük, mert olyan vonalat szeretnénk modellezni, amelynek a legkisebb kumulatív távolsága van az összes adatponttól. Az értékeket négyzetre emeljük, mielőtt összeadnánk őket, mivel az irány helyett a nagyságuk érdekel minket.
> **🧮 Mutasd a matematikát**
>
> Ez a vonal, amelyet _legjobb illeszkedés vonalának_ nevezünk, [egy egyenlettel](https://en.wikipedia.org/wiki/Simple_linear_regression) fejezhető ki:
>
> ```
> Y = a + bX
> ```
>
> `X` az 'magyarázó változó'. `Y` a 'függő változó'. A vonal meredeksége `b`, és `a` az y-metszet, amely arra utal, hogy `Y` értéke mennyi, amikor `X = 0`.
>
>![a meredekség kiszámítása](../../../../2-Regression/3-Linear/images/slope.png)
>
> Először számítsd ki a meredekséget `b`. Infografika: [Jen Looper](https://twitter.com/jenlooper)
>
> Más szavakkal, és utalva a tökadatok eredeti kérdésére: "jósoljuk meg a tök árát bushelre vetítve hónap szerint", `X` az árra, `Y` pedig az eladási hónapra utalna.
>
>![az egyenlet kiegészítése](../../../../2-Regression/3-Linear/images/calculation.png)
>
> Számítsd ki `Y` értékét. Ha körülbelül 4 dollárt fizetsz, akkor április van! Infografika: [Jen Looper](https://twitter.com/jenlooper)
>
> Az egyenlet kiszámításához szükséges matematika megmutatja a vonal meredekségét, amely az y-metszettől is függ, vagyis attól, hogy `Y` hol helyezkedik el, amikor `X = 0`.
>
> Megfigyelheted az értékek kiszámításának módszerét a [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) weboldalon. Látogasd meg a [Legkisebb négyzetek kalkulátort](https://www.mathsisfun.com/data/least-squares-calculator.html), hogy láthasd, hogyan befolyásolják a számok értékei a vonalat.
## Korreláció
Egy másik fontos fogalom a **Korrelációs együttható** az adott X és Y változók között. Egy szórásdiagram segítségével gyorsan vizualizálhatod ezt az együtthatót. Ha az adatpontok szépen egy vonalban helyezkednek el, akkor magas korrelációról beszélünk, de ha az adatpontok szétszórtan helyezkednek el X és Y között, akkor alacsony korrelációról van szó.
Egy jó lineáris regressziós modell olyan, amelynek magas (1-hez közelebb álló, mint 0-hoz) Korrelációs együtthatója van a Legkisebb négyzetek regressziós módszerével és egy regressziós vonallal.
✅ Futtasd a leckéhez tartozó notebookot, és nézd meg a Hónap és Ár szórásdiagramot. Az adatok, amelyek a Hónap és Ár közötti kapcsolatot mutatják a tökeladások esetében, vizuális értelmezésed szerint magas vagy alacsony korrelációval rendelkeznek? Változik ez, ha finomabb mértéket használsz a `Hónap` helyett, például *az év napját* (azaz az év eleje óta eltelt napok száma)?
Az alábbi kódban feltételezzük, hogy megtisztítottuk az adatokat, és egy `new_pumpkins` nevű adatkeretet kaptunk, amely hasonló az alábbihoz:
ID | Hónap | ÉvNapja | Fajta | Város | Csomagolás | Alacsony ár | Magas ár | Ár
---|-------|---------|-------|-------|------------|-------------|----------|-----
70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel kartonok | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel kartonok | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel kartonok | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel kartonok | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel kartonok | 15.0 | 15.0 | 13.636364
> Az adatok tisztításához szükséges kód megtalálható a [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb) fájlban. Ugyanazokat a tisztítási lépéseket hajtottuk végre, mint az előző leckében, és kiszámítottuk az `ÉvNapja` oszlopot az alábbi kifejezés segítségével:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
Most, hogy megértetted a lineáris regresszió mögötti matematikát, hozzunk létre egy regressziós modellt, hogy megnézzük, meg tudjuk-e jósolni, melyik tökcsomagolás kínálja a legjobb árakat. Valaki, aki tököt vásárol egy ünnepi tökfolt számára, szeretné optimalizálni a tökcsomagok vásárlását.
## Korreláció keresése
[![Gépi tanulás kezdőknek - Korreláció keresése: A lineáris regresszió kulcsa](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "Gépi tanulás kezdőknek - Korreláció keresése: A lineáris regresszió kulcsa")
> 🎥 Kattints a fenti képre egy rövid videós összefoglalóért a korrelációról.
Az előző leckéből valószínűleg láttad, hogy az átlagár különböző hónapokra így néz ki:
<img alt="Átlagár hónaponként" src="../2-Data/images/barchart.png" width="50%"/>
Ez arra utal, hogy lehet némi korreláció, és megpróbálhatunk egy lineáris regressziós modellt tanítani, hogy megjósoljuk a `Hónap` és `Ár`, vagy az `ÉvNapja` és `Ár` közötti kapcsolatot. Íme egy szórásdiagram, amely az utóbbi kapcsolatot mutatja:
<img alt="Szórásdiagram az Ár és az ÉvNapja között" src="images/scatter-dayofyear.png" width="50%" />
Nézzük meg, van-e korreláció a `corr` függvény segítségével:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
Úgy tűnik, hogy a korreláció elég kicsi, -0.15 a `Hónap` és -0.17 az `ÉvNapja` esetében, de lehet, hogy van egy másik fontos kapcsolat. Úgy tűnik, hogy az árak különböző csoportjai a tökfajtákhoz kapcsolódnak. Ennek a hipotézisnek a megerősítéséhez ábrázoljuk minden tökkategóriát különböző színnel. Az `ax` paraméter átadásával a `scatter` ábrázolási függvénynek az összes pontot ugyanazon a grafikonon ábrázolhatjuk:
```python
ax=None
colors = ['red','blue','green','yellow']
for i,var in enumerate(new_pumpkins['Variety'].unique()):
df = new_pumpkins[new_pumpkins['Variety']==var]
ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
```
<img alt="Szórásdiagram az Ár és az ÉvNapja között" src="images/scatter-dayofyear-color.png" width="50%" />
Vizsgálatunk azt sugallja, hogy a fajta nagyobb hatással van az árakra, mint az eladási dátum. Ezt egy oszlopdiagramon is láthatjuk:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="Oszlopdiagram az ár és a fajta között" src="images/price-by-variety.png" width="50%" />
Most koncentráljunk egyetlen tökfajtára, a 'pie type'-ra, és nézzük meg, milyen hatással van a dátum az árra:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="Szórásdiagram az Ár és az ÉvNapja között" src="images/pie-pumpkins-scatter.png" width="50%" />
Ha most kiszámítjuk az `Ár` és az `ÉvNapja` közötti korrelációt a `corr` függvény segítségével, körülbelül `-0.27` értéket kapunk - ami azt jelenti, hogy érdemes egy prediktív modellt tanítani.
> Mielőtt lineáris regressziós modellt tanítanánk, fontos megbizonyosodni arról, hogy az adataink tiszták. A lineáris regresszió nem működik jól hiányzó értékekkel, ezért érdemes megszabadulni az üres celláktól:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
Egy másik megközelítés az lenne, hogy az üres értékeket az adott oszlop átlagértékeivel töltjük ki.
## Egyszerű lineáris regresszió
[![Gépi tanulás kezdőknek - Lineáris és polinomiális regresszió Scikit-learn segítségével](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "Gépi tanulás kezdőknek - Lineáris és polinomiális regresszió Scikit-learn segítségével")
> 🎥 Kattints a fenti képre egy rövid videós összefoglalóért a lineáris és polinomiális regresszióról.
A lineáris regressziós modellünk tanításához a **Scikit-learn** könyvtárat fogjuk használni.
```python
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
Először szétválasztjuk a bemeneti értékeket (jellemzők) és a várt kimenetet (címke) külön numpy tömbökbe:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Figyeld meg, hogy a bemeneti adatokat `reshape`-el kellett átalakítanunk, hogy a Lineáris Regresszió csomag helyesen értelmezze. A Lineáris Regresszió 2D-tömböt vár bemenetként, ahol a tömb minden sora a bemeneti jellemzők vektorának felel meg. Ebben az esetben, mivel csak egy bemenetünk van, egy N×1 alakú tömbre van szükségünk, ahol N az adatkészlet mérete.
Ezután az adatokat szét kell osztanunk tanító és teszt adatkészletekre, hogy a modellünket validálni tudjuk a tanítás után:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
Végül a tényleges Lineáris Regressziós modell tanítása mindössze két kódsort igényel. Meghatározzuk a `LinearRegression` objektumot, és az adatainkra illesztjük a `fit` metódus segítségével:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
A `LinearRegression` objektum a `fit`-elés után tartalmazza a regresszió összes együtthatóját, amelyeket a `.coef_` tulajdonságon keresztül érhetünk el. Ebben az esetben csak egy együttható van, amelynek értéke
Hibánk körülbelül 2 pontnál van, ami ~17%. Nem túl jó. Egy másik mutató a modell minőségére a **determinizációs együttható**, amelyet így lehet kiszámítani:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
Ha az érték 0, az azt jelenti, hogy a modell nem veszi figyelembe a bemeneti adatokat, és úgy működik, mint a *legrosszabb lineáris előrejelző*, amely egyszerűen az eredmény átlagértéke. Az 1-es érték azt jelenti, hogy tökéletesen meg tudjuk jósolni az összes várt kimenetet. Esetünkben az együttható körülbelül 0.06, ami elég alacsony.
A tesztadatokat a regressziós vonallal együtt is ábrázolhatjuk, hogy jobban lássuk, hogyan működik a regresszió a mi esetünkben:
```python
plt.scatter(X_test,y_test)
plt.plot(X_test,pred)
```
<img alt="Lineáris regresszió" src="images/linear-results.png" width="50%" />
## Polinomiális regresszió
A lineáris regresszió egy másik típusa a polinomiális regresszió. Bár néha van lineáris kapcsolat a változók között például minél nagyobb a tök térfogata, annál magasabb az ára , néha ezek a kapcsolatok nem ábrázolhatók síkként vagy egyenes vonalként.
✅ Itt van [néhány példa](https://online.stat.psu.edu/stat501/lesson/9/9.8) olyan adatokra, amelyekhez polinomiális regressziót lehet használni.
Nézd meg újra a dátum és az ár közötti kapcsolatot. Úgy tűnik, hogy ezt a szórásdiagramot feltétlenül egy egyenes vonallal kellene elemezni? Nem ingadozhatnak az árak? Ebben az esetben megpróbálhatod a polinomiális regressziót.
✅ A polinomok olyan matematikai kifejezések, amelyek egy vagy több változót és együtthatót tartalmazhatnak.
A polinomiális regresszió egy görbe vonalat hoz létre, amely jobban illeszkedik a nemlineáris adatokhoz. Esetünkben, ha egy négyzetes `DayOfYear` változót is hozzáadunk a bemeneti adatokhoz, akkor egy parabola görbével tudjuk illeszteni az adatainkat, amelynek minimuma az év egy bizonyos pontján lesz.
A Scikit-learn tartalmaz egy hasznos [pipeline API-t](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline), amely lehetővé teszi az adatfeldolgozás különböző lépéseinek összekapcsolását. A **pipeline** egy **becslők** láncolata. Esetünkben egy olyan pipeline-t hozunk létre, amely először polinomiális jellemzőket ad a modellhez, majd elvégzi a regressziót:
```python
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
A `PolynomialFeatures(2)` használata azt jelenti, hogy a bemeneti adatokból minden másodfokú polinomot beillesztünk. Esetünkben ez csak a `DayOfYear`<sup>2</sup>-t jelenti, de ha két bemeneti változónk van, X és Y, akkor ez hozzáadja X<sup>2</sup>-t, XY-t és Y<sup>2</sup>-t. Magasabb fokú polinomokat is használhatunk, ha szeretnénk.
A pipeline-t ugyanúgy használhatjuk, mint az eredeti `LinearRegression` objektumot, azaz `fit`-elhetjük a pipeline-t, majd a `predict` segítségével megkaphatjuk az előrejelzési eredményeket. Íme a grafikon, amely a tesztadatokat és az approximációs görbét mutatja:
<img alt="Polinomiális regresszió" src="images/poly-results.png" width="50%" />
A polinomiális regresszió használatával kissé alacsonyabb MSE-t és magasabb determinizációs együtthatót érhetünk el, de nem jelentősen. Figyelembe kell vennünk más jellemzőket is!
> Láthatod, hogy a tökök legalacsonyabb árai valahol Halloween környékén figyelhetők meg. Hogyan magyaráznád ezt?
🎃 Gratulálok, most létrehoztál egy modellt, amely segíthet a pite tökök árának előrejelzésében. Valószínűleg ugyanezt az eljárást megismételheted az összes tökfajtára, de ez elég fárasztó lenne. Most tanuljuk meg, hogyan vegyük figyelembe a tökfajtákat a modellünkben!
## Kategorikus jellemzők
Az ideális világban szeretnénk képesek lenni előre jelezni az árakat különböző tökfajtákra ugyanazzal a modellel. Azonban a `Variety` oszlop kissé eltér az olyan oszlopoktól, mint a `Month`, mert nem numerikus értékeket tartalmaz. Az ilyen oszlopokat **kategorikus** oszlopoknak nevezzük.
[![ML kezdőknek - Kategorikus jellemzők előrejelzése lineáris regresszióval](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML kezdőknek - Kategorikus jellemzők előrejelzése lineáris regresszióval")
> 🎥 Kattints a fenti képre egy rövid videós áttekintésért a kategorikus jellemzők használatáról.
Itt láthatod, hogyan függ az átlagár a fajtától:
<img alt="Átlagár fajtánként" src="images/price-by-variety.png" width="50%" />
Ahhoz, hogy figyelembe vegyük a fajtát, először numerikus formára kell átalakítanunk, vagyis **kódolnunk** kell. Többféle módon tehetjük ezt meg:
* Az egyszerű **numerikus kódolás** egy táblázatot készít a különböző fajtákról, majd a fajta nevét egy indexszel helyettesíti a táblázatban. Ez nem a legjobb ötlet a lineáris regresszióhoz, mert a lineáris regresszió az index tényleges numerikus értékét veszi figyelembe, és hozzáadja az eredményhez, megszorozva egy együtthatóval. Esetünkben az indexszám és az ár közötti kapcsolat egyértelműen nem lineáris, még akkor sem, ha biztosítjuk, hogy az indexek valamilyen specifikus sorrendben legyenek.
* A **one-hot kódolás** a `Variety` oszlopot 4 különböző oszlopra cseréli, egyet minden fajtához. Minden oszlop `1`-et tartalmaz, ha az adott sor egy adott fajtához tartozik, és `0`-t, ha nem. Ez azt jelenti, hogy a lineáris regresszióban négy együttható lesz, egy-egy minden tökfajtához, amely felelős az adott fajta "kezdő árának" (vagy inkább "további árának").
Az alábbi kód megmutatja, hogyan kódolhatjuk one-hot módszerrel a fajtát:
```python
pd.get_dummies(new_pumpkins['Variety'])
```
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
----|-----------|-----------|--------------------------|----------
70 | 0 | 0 | 0 | 1
71 | 0 | 0 | 0 | 1
... | ... | ... | ... | ...
1738 | 0 | 1 | 0 | 0
1739 | 0 | 1 | 0 | 0
1740 | 0 | 1 | 0 | 0
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
Ahhoz, hogy lineáris regressziót tanítsunk one-hot kódolt fajta bemeneti adatokkal, csak helyesen kell inicializálnunk az `X` és `y` adatokat:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
A többi kód ugyanaz, mint amit korábban használtunk a lineáris regresszió tanításához. Ha kipróbálod, látni fogod, hogy az átlagos négyzetes hiba körülbelül ugyanaz, de sokkal magasabb determinizációs együtthatót kapunk (~77%). Ahhoz, hogy még pontosabb előrejelzéseket kapjunk, több kategorikus jellemzőt is figyelembe vehetünk, valamint numerikus jellemzőket, mint például a `Month` vagy a `DayOfYear`. Egy nagy jellemzőtömb létrehozásához használhatjuk a `join`-t:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
```
Itt figyelembe vesszük a `City` és a `Package` típusát is, ami 2.84-es MSE-t (10%) és 0.94-es determinizációs együtthatót eredményez!
## Mindent összefoglalva
A legjobb modell létrehozásához használhatjuk a fenti példából származó kombinált (one-hot kódolt kategorikus + numerikus) adatokat polinomiális regresszióval együtt. Íme a teljes kód a kényelmed érdekében:
```python
# set up training data
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# make train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# setup and train the pipeline
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# predict results for test data
pred = pipeline.predict(X_test)
# calculate MSE and determination
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
Ez közel 97%-os determinizációs együtthatót és MSE=2.23 (~8%-os előrejelzési hiba) eredményez.
| Modell | MSE | Determinizáció |
|-------|-----|---------------|
| `DayOfYear` Lineáris | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polinomiális | 2.73 (17.0%) | 0.08 |
| `Variety` Lineáris | 5.24 (19.7%) | 0.77 |
| Minden jellemző Lineáris | 2.84 (10.5%) | 0.94 |
| Minden jellemző Polinomiális | 2.23 (8.25%) | 0.97 |
🏆 Szép munka! Egyetlen leckében négy regressziós modellt hoztál létre, és a modell minőségét 97%-ra javítottad. A regresszióról szóló utolsó részben a logisztikus regresszióval fogsz megismerkedni, amely kategóriák meghatározására szolgál.
---
## 🚀Kihívás
Tesztelj több különböző változót ebben a notebookban, hogy lásd, hogyan függ össze a korreláció a modell pontosságával.
## [Utólagos kvíz](https://ff-quizzes.netlify.app/en/ml/)
## Áttekintés és önálló tanulás
Ebben a leckében a lineáris regresszióról tanultunk. Vannak más fontos regressziós technikák is. Olvass a Stepwise, Ridge, Lasso és Elasticnet technikákról. Egy jó kurzus, amelyet érdemes tanulmányozni, a [Stanford Statistical Learning kurzus](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning).
## Feladat
[Építs egy modellt](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": "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
![Logisztikus vs. lineáris regresszió infografika](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png)
## [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.
[![ML kezdőknek - A logisztikus regresszió megértése gépi tanulási osztályozáshoz](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](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_.
![Tök osztályozási modell](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png)
> 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).
![Multinomiális vs ordinális regresszió](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png)
### 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.
[![ML kezdőknek - Adatok elemzése és előkészítése logisztikus regresszióhoz](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](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,
)
```
![Vizualizált adatok rácsa](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png)
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}")
```
![Vizualizált adatok kategóriális diagramja](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png)
### 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)
```
![Vizualizált adatok swarm diagramja](../../../../2-Regression/4-Logistic/images/swarm_2.png)
**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:
>
> ![logisztikus függvény](../../../../2-Regression/4-Logistic/images/sigmoid.png)
>
> 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.
[![ML kezdőknek - Logisztikus regresszió az adatok osztályozásához](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](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
[![ML kezdőknek - A logisztikus regresszió teljesítményének elemzése ROC görbékkel](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](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:
![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png)
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!
![jack-o-lanterns](../../../2-Regression/images/jack-o-lanterns.jpg)
> 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
[![Bevezetés a regresszióba](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](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.
[![ML kezdőknek - Bevezetés a regressziós modellekbe gépi tanuláshoz](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](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.
![UFO Parkolás](../../../3-Web-App/images/ufo.jpg)
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!
![csak egy csipet!](../../../../4-Classification/1-Introduction/images/pinch.png)
> Ü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_.
[![Bevezetés az osztályozásba](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](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 osztályozás](../../../../4-Classification/1-Introduction/images/binary-multiclass.png)
> 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?
[![Őrült rejtélyes kosarak](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](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()
```
![konyhai adatok eloszlása](../../../../4-Classification/1-Introduction/images/cuisine-dist.png)
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()
```
![thai](../../../../4-Classification/1-Introduction/images/thai.png)
1. Ugyanezt tedd meg a japán adatokkal:
```python
japanese_ingredient_df = create_ingredient_df(japanese_df)
japanese_ingredient_df.head(10).plot.barh()
```
![japán](../../../../4-Classification/1-Introduction/images/japanese.png)
1. Most a kínai összetevők:
```python
chinese_ingredient_df = create_ingredient_df(chinese_df)
chinese_ingredient_df.head(10).plot.barh()
```
![kínai](../../../../4-Classification/1-Introduction/images/chinese.png)
1. Ábrázold az indiai összetevőket:
```python
indian_ingredient_df = create_ingredient_df(indian_df)
indian_ingredient_df.head(10).plot.barh()
```
![indiai](../../../../4-Classification/1-Introduction/images/indian.png)
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()
```
![koreai](../../../../4-Classification/1-Introduction/images/korean.png)
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,253 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "1a6e9e46b34a2e559fbbfc1f95397c7b",
"translation_date": "2025-09-05T16:17:35+00:00",
"source_file": "4-Classification/2-Classifiers-1/README.md",
"language_code": "hu"
}
-->
# Konyhai osztályozók 1
Ebben a leckében az előző leckében elmentett, kiegyensúlyozott és tiszta adatokkal teli adatállományt fogod használni, amely a különböző konyhákról szól.
Ezt az adatállományt különféle osztályozókkal fogod használni, hogy _egy adott nemzeti konyhát megjósolj egy összetevőcsoport alapján_. Eközben többet megtudhatsz arról, hogyan lehet algoritmusokat alkalmazni osztályozási feladatokhoz.
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
# Felkészülés
Feltételezve, hogy befejezted az [1. leckét](../1-Introduction/README.md), győződj meg róla, hogy egy _cleaned_cuisines.csv_ fájl létezik a gyökér `/data` mappában ehhez a négy leckéhez.
## Gyakorlat - egy nemzeti konyha megjóslása
1. Dolgozz ebben a lecke _notebook.ipynb_ mappájában, és importáld a fájlt a Pandas könyvtárral együtt:
```python
import pandas as pd
cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv")
cuisines_df.head()
```
Az adatok így néznek ki:
| | 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 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
1. Most importálj több könyvtárat:
```python
from sklearn.linear_model import LogisticRegression
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
from sklearn.svm import SVC
import numpy as np
```
1. Oszd fel az X és y koordinátákat két adatkeretre a tanításhoz. A `cuisine` lehet a címkéket tartalmazó adatkeret:
```python
cuisines_label_df = cuisines_df['cuisine']
cuisines_label_df.head()
```
Ez így fog kinézni:
```output
0 indian
1 indian
2 indian
3 indian
4 indian
Name: cuisine, dtype: object
```
1. Dobd el az `Unnamed: 0` és a `cuisine` oszlopokat a `drop()` hívásával. A többi adatot mentsd el tanítható jellemzőként:
```python
cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)
cuisines_feature_df.head()
```
A jellemzők így néznek ki:
| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini |
| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
Most készen állsz arra, hogy betanítsd a modelledet!
## Osztályozó kiválasztása
Most, hogy az adataid tiszták és készen állnak a tanításra, el kell döntened, melyik algoritmust használod a feladathoz.
A Scikit-learn a felügyelt tanulás kategóriájába sorolja az osztályozást, és ebben a kategóriában számos módszert találsz az osztályozáshoz. [A választék](https://scikit-learn.org/stable/supervised_learning.html) elsőre meglehetősen zavarba ejtő. Az alábbi módszerek mind tartalmaznak osztályozási technikákat:
- Lineáris modellek
- Támogató vektorgépek
- Stochasztikus gradiens csökkenés
- Legközelebbi szomszédok
- Gauss-folyamatok
- Döntési fák
- Együttes módszerek (szavazó osztályozó)
- Többosztályos és többkimenetes algoritmusok (többosztályos és többcímkés osztályozás, többosztályos-többkimenetes osztályozás)
> Az adatok osztályozására [neurális hálózatokat is használhatsz](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), de ez a lecke keretein kívül esik.
### Melyik osztályozót válasszuk?
Tehát, melyik osztályozót válasszuk? Gyakran az a módszer, hogy több algoritmust kipróbálunk, és keresünk egy jó eredményt. A Scikit-learn kínál egy [összehasonlítást](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) egy létrehozott adatállományon, amely összehasonlítja a KNeighbors, SVC két módját, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB és QuadraticDiscriminationAnalysis algoritmusokat, és vizualizálja az eredményeket:
![osztályozók összehasonlítása](../../../../4-Classification/2-Classifiers-1/images/comparison.png)
> Diagramok a Scikit-learn dokumentációjából
> Az AutoML elegánsan megoldja ezt a problémát azáltal, hogy ezeket az összehasonlításokat a felhőben futtatja, lehetővé téve, hogy kiválaszd a legjobb algoritmust az adataidhoz. Próbáld ki [itt](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott)
### Egy jobb megközelítés
Egy jobb módszer, mint a vad találgatás, az, hogy követjük az ötleteket ezen letölthető [ML Cheat Sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) alapján. Itt felfedezzük, hogy a többosztályos problémánkhoz van néhány választási lehetőség:
![cheatsheet többosztályos problémákhoz](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png)
> A Microsoft Algoritmus Cheat Sheet egy szakasza, amely részletezi a többosztályos osztályozási lehetőségeket
✅ Töltsd le ezt a cheat sheetet, nyomtasd ki, és tedd ki a faladra!
### Érvelés
Nézzük meg, hogy az adott korlátok alapján milyen megközelítéseket választhatunk:
- **A neurális hálózatok túl nehezek**. Tekintve, hogy az adatállományunk tiszta, de minimális, és hogy a tanítást helyben, notebookokon keresztül végezzük, a neurális hálózatok túl nehézkesek ehhez a feladathoz.
- **Nincs kétosztályos osztályozó**. Nem használunk kétosztályos osztályozót, így az egy-vs-minden kizárható.
- **Döntési fa vagy logisztikus regresszió működhet**. Egy döntési fa működhet, vagy logisztikus regresszió többosztályos adatokhoz.
- **Többosztályos Boosted Decision Trees más problémát old meg**. A többosztályos Boosted Decision Tree leginkább nemparaméteres feladatokhoz alkalmas, például rangsorok létrehozására, így számunkra nem hasznos.
### Scikit-learn használata
A Scikit-learn-t fogjuk használni az adataink elemzésére. Azonban számos módja van annak, hogy logisztikus regressziót használjunk a Scikit-learn-ben. Nézd meg a [paramétereket](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression), amelyeket megadhatsz.
Lényegében két fontos paraméter van - `multi_class` és `solver` -, amelyeket meg kell határoznunk, amikor arra kérjük a Scikit-learn-t, hogy végezzen logisztikus regressziót. A `multi_class` érték egy bizonyos viselkedést alkalmaz. A solver értéke az algoritmus, amelyet használni kell. Nem minden solver párosítható minden `multi_class` értékkel.
A dokumentáció szerint a többosztályos esetben a tanítási algoritmus:
- **Az egy-vs-minden (OvR) sémát használja**, ha a `multi_class` opció `ovr`-re van állítva
- **A keresztentrópia veszteséget használja**, ha a `multi_class` opció `multinomial`-ra van állítva. (Jelenleg a `multinomial` opciót csak az lbfgs, sag, saga és newton-cg solvers támogatják.)
> 🎓 A 'séma' itt lehet 'ovr' (egy-vs-minden) vagy 'multinomial'. Mivel a logisztikus regresszió valójában bináris osztályozás támogatására lett tervezve, ezek a sémák lehetővé teszik, hogy jobban kezelje a többosztályos osztályozási feladatokat. [forrás](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/)
> 🎓 A 'solver' úgy van definiálva, mint "az algoritmus, amelyet az optimalizálási problémában használni kell". [forrás](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression).
A Scikit-learn ezt a táblázatot kínálja, hogy megmagyarázza, hogyan kezelik a solvers a különböző kihívásokat, amelyeket a különböző adatstruktúrák jelentenek:
![solvers](../../../../4-Classification/2-Classifiers-1/images/solvers.png)
## Gyakorlat - az adatok felosztása
Koncentráljunk a logisztikus regresszióra az első tanítási próbánk során, mivel nemrég tanultál róla egy korábbi leckében.
Oszd fel az adataidat tanítási és tesztelési csoportokra a `train_test_split()` hívásával:
```python
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
```
## Gyakorlat - logisztikus regresszió alkalmazása
Mivel a többosztályos esetet használod, ki kell választanod, hogy milyen _sémát_ és milyen _solvert_ állíts be. Használj LogisticRegression-t többosztályos beállítással és a **liblinear** solverrel a tanításhoz.
1. Hozz létre egy logisztikus regressziót, ahol a multi_class `ovr`-re van állítva, és a solver `liblinear`-re:
```python
lr = LogisticRegression(multi_class='ovr',solver='liblinear')
model = lr.fit(X_train, np.ravel(y_train))
accuracy = model.score(X_test, y_test)
print ("Accuracy is {}".format(accuracy))
```
✅ Próbálj ki egy másik solvert, például `lbfgs`, amelyet gyakran alapértelmezettként állítanak be
> Megjegyzés: Használja a Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) függvényt az adatok lapításához, amikor szükséges.
A pontosság **80%** felett jó!
1. Ezt a modellt működés közben láthatod, ha tesztelsz egy adat sort (#50):
```python
print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}')
print(f'cuisine: {y_test.iloc[50]}')
```
Az eredmény ki van nyomtatva:
```output
ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object')
cuisine: indian
```
✅ Próbálj ki egy másik sor számot, és ellenőrizd az eredményeket.
1. Mélyebbre ásva ellenőrizheted ennek az előrejelzésnek a pontosságát:
```python
test= X_test.iloc[50].values.reshape(-1, 1).T
proba = model.predict_proba(test)
classes = model.classes_
resultdf = pd.DataFrame(data=proba, columns=classes)
topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])
topPrediction.head()
```
Az eredmény ki van nyomtatva - az indiai konyha a legjobb tippje, jó valószínűséggel:
| | 0 |
| -------: | -------: |
| indian | 0.715851 |
| chinese | 0.229475 |
| japanese | 0.029763 |
| korean | 0.017277 |
| thai | 0.007634 |
✅ Meg tudod magyarázni, miért gondolja a modell, hogy ez biztosan indiai konyha?
1. Szerezz több részletet egy osztályozási jelentés kinyomtatásával, ahogy a regressziós leckékben tetted:
```python
y_pred = model.predict(X_test)
print(classification_report(y_test,y_pred))
```
| | pontosság | visszahívás | f1-érték | támogatás |
| ------------ | --------- | ----------- | -------- | --------- |
| chinese | 0.73 | 0.71 | 0.72 | 229 |
| indian | 0.91 | 0.93 | 0.92 | 254 |
| japanese | 0.70 | 0.75 | 0.72 | 220 |
| korean | 0.86 | 0.76 | 0.81 | 242 |
| thai | 0.79 | 0.85 | 0.82 | 254 |
| pontosság | 0.80 | 1199 | | |
| makro átlag | 0.80 | 0.80 | 0.80 | 1199 |
| súlyozott átlag | 0.80 | 0.80 | 0.80 | 1199 |
## 🚀Kihívás
Ebben a leckében a megtisztított adataidat használtad egy gépi tanulási modell felépítéséhez, amely képes nemzeti konyhát előre jelezni egy sor összetevő alapján. Szánj időt arra, hogy átnézd a Scikit-learn által kínált számos lehetőséget az adatok osztályozására. Áss mélyebbre a 'solver' fogalmába, hogy megértsd, mi zajlik a háttérben.
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
## Áttekintés és önálló tanulás
Áss egy kicsit mélyebbre a logisztikus regresszió matematikájában [ebben a leckében](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf)
## Feladat
[Tanulmányozd a solvereket](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": "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:
![ML térkép a Scikit-learn-től](../../../../4-Classification/3-Classifiers-2/images/map.png)
> 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!
[![Webalkalmazás bemutatása](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](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:
![Netron vizualizáció](../../../../4-Classification/4-Applied/images/netron.png)
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:
![összetevő webalkalmazás](../../../../4-Classification/4-Applied/images/web-app.png)
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.
![Thai ételárus](../../../4-Classification/images/thai-food.jpg)
> 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.
[![No One Like You by PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](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.
[![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](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.
>
![Sík vs Nem sík geometria Infografika](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png)
> 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.
![Hierarchikus klaszterezés Infografika](../../../../5-Clustering/1-Visualize/images/hierarchical.png)
> 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.
![Centroid klaszterezés Infografika](../../../../5-Clustering/1-Visualize/images/centroid.png)
> 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')
```
![legnépszerűbb](../../../../5-Clustering/1-Visualize/images/popular.png)
✅ 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:
![legnépszerűbb](../../../../5-Clustering/1-Visualize/images/all-genres.png)
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)
```
![korrelációk](../../../../5-Clustering/1-Visualize/images/correlation.png)
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:
![eloszlás](../../../../5-Clustering/1-Visualize/images/distribution.png)
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
![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png)
Á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.
![voronoi diagram](../../../../5-Clustering/2-K-Means/images/voronoi.png)
> 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.
![outliers](../../../../5-Clustering/2-K-Means/images/boxplots.png)
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**!
![elbow method](../../../../5-Clustering/2-K-Means/images/elbow.png)
## 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.
![clusters](../../../../5-Clustering/2-K-Means/images/clusters.png)
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:
![problem models](../../../../5-Clustering/2-K-Means/images/problems.png)
> 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!
![Egy lemezjátszó](../../../5-Clustering/images/turntable.jpg)
> 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.
![megértés](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png)
> 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.
[![Beszélgetés Elizával](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](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.
![tokenizáció](../../../../6-NLP/2-Tasks/images/tokenization.png)
> 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.
![szavak beágyazása](../../../../6-NLP/2-Tasks/images/embedding.png)
> "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.
![elemzés](../../../../6-NLP/2-Tasks/images/parse.png)
> 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-gramok csúszó ablak](../../../../6-NLP/2-Tasks/images/n-grams.gif)
> 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,190 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "be03c8182982b87ced155e4e9d1438e8",
"translation_date": "2025-09-05T17:03:02+00:00",
"source_file": "6-NLP/3-Translation-Sentiment/README.md",
"language_code": "hu"
}
-->
# Fordítás és érzelemelemzés gépi tanulással
Az előző leckékben megtanultad, hogyan készíts egy alap botot a `TextBlob` segítségével, amely egy olyan könyvtár, amely gépi tanulást alkalmaz a háttérben alapvető természetes nyelvi feldolgozási (NLP) feladatok, például főnévi kifejezések kinyerése érdekében. A számítógépes nyelvészet másik fontos kihívása egy mondat pontos _fordítása_ egyik beszélt vagy írott nyelvről a másikra.
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
A fordítás egy nagyon nehéz probléma, amelyet tovább bonyolít az a tény, hogy több ezer nyelv létezik, és mindegyiknek nagyon eltérő nyelvtani szabályai lehetnek. Az egyik megközelítés az, hogy az egyik nyelv, például az angol formális nyelvtani szabályait egy nyelvtől független struktúrává alakítjuk, majd visszafordítjuk egy másik nyelvre. Ez a megközelítés a következő lépéseket jelenti:
1. **Azonosítás**. Azonosítsd vagy címkézd fel a bemeneti nyelv szavait főnevekként, igékként stb.
2. **Fordítás létrehozása**. Készíts közvetlen fordítást minden szóról a célnyelv formátumában.
### Példa mondat, angolról írre
Angol nyelven a _I feel happy_ mondat három szóból áll, a következő sorrendben:
- **alany** (I)
- **ige** (feel)
- **melléknév** (happy)
Az ír nyelvben azonban ugyanaz a mondat nagyon eltérő nyelvtani szerkezettel rendelkezik az érzelmek, mint "*happy*" vagy "*sad*" úgy vannak kifejezve, mintha *rajtad lennének*.
Az angol `I feel happy` kifejezés írül `Tá athas orm`. Egy *szó szerinti* fordítás így hangzana: `Happy is upon me`.
Egy ír anyanyelvű, aki angolra fordít, azt mondaná, hogy `I feel happy`, nem pedig `Happy is upon me`, mert érti a mondat jelentését, még akkor is, ha a szavak és a mondatszerkezet eltérőek.
Az ír mondat formális sorrendje:
- **ige** (Tá vagy is)
- **melléknév** (athas, vagy happy)
- **alany** (orm, vagy upon me)
## Fordítás
Egy naiv fordítóprogram csak a szavakat fordítaná le, figyelmen kívül hagyva a mondatszerkezetet.
✅ Ha felnőttként tanultál második (vagy harmadik vagy több) nyelvet, valószínűleg úgy kezdtél, hogy anyanyelveden gondolkodtál, majd fejben szó szerint lefordítottad a fogalmat a második nyelvre, és kimondtad a fordítást. Ez hasonló ahhoz, amit a naiv fordítóprogramok csinálnak. Fontos túllépni ezen a fázison, hogy elérjük a folyékonyságot!
A naiv fordítás rossz (és néha mulatságos) félrefordításokhoz vezet: `I feel happy` szó szerint `Mise bhraitheann athas`-ként fordítódik írre. Ez azt jelenti (szó szerint), hogy `me feel happy`, és nem egy érvényes ír mondat. Annak ellenére, hogy az angol és az ír két szomszédos szigeten beszélt nyelv, nagyon különbözőek, eltérő nyelvtani szerkezettel.
> Nézhetsz néhány videót az ír nyelvi hagyományokról, például [ezt](https://www.youtube.com/watch?v=mRIaLSdRMMs)
### Gépi tanulási megközelítések
Eddig a természetes nyelvi feldolgozás formális szabályok szerinti megközelítéséről tanultál. Egy másik megközelítés az, hogy figyelmen kívül hagyjuk a szavak jelentését, és _helyette gépi tanulással mintákat észlelünk_. Ez működhet fordítás esetén, ha sok szöveg (egy *korpusz*) vagy szövegek (*korpuszok*) állnak rendelkezésre az eredeti és a célnyelven.
Például vegyük Jane Austen 1813-ban írt híres angol regényét, a *Büszkeség és balítélet*-et. Ha megnézed a könyvet angolul és annak emberi fordítását *franciául*, észlelhetsz olyan kifejezéseket, amelyek _idiomatikusan_ fordítódnak egyik nyelvről a másikra. Ezt hamarosan meg is teszed.
Például, amikor az angol `I have no money` kifejezés szó szerint franciára fordítódik, az `Je n'ai pas de monnaie` lesz. A "monnaie" egy trükkös francia 'hamis rokon', mivel a 'money' és a 'monnaie' nem szinonimák. Egy jobb fordítás, amelyet egy ember készítene, az `Je n'ai pas d'argent`, mert ez jobban közvetíti azt a jelentést, hogy nincs pénzed (nem pedig 'aprópénz', ami a 'monnaie' jelentése).
![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png)
> Kép: [Jen Looper](https://twitter.com/jenlooper)
Ha egy gépi tanulási modellnek elegendő emberi fordítása van, amelyre modellt építhet, javíthatja a fordítások pontosságát azáltal, hogy azonosítja a korábban szakértő emberi beszélők által fordított szövegekben gyakori mintákat.
### Gyakorlat - fordítás
Használhatod a `TextBlob`-ot mondatok fordítására. Próbáld ki a **Büszkeség és balítélet** híres első mondatát:
```python
from textblob import TextBlob
blob = TextBlob(
"It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!"
)
print(blob.translate(to="fr"))
```
A `TextBlob` elég jól teljesít a fordításban: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!".
Érvelhetünk azzal, hogy a TextBlob fordítása sokkal pontosabb, mint a könyv 1932-es francia fordítása V. Leconte és Ch. Pressoir által:
"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles."
Ebben az esetben a gépi tanulással támogatott fordítás jobb munkát végez, mint az emberi fordító, aki szükségtelenül szavakat ad az eredeti szerző szájába a 'tisztázás' érdekében.
> Mi történik itt, és miért olyan jó a TextBlob a fordításban? Nos, a háttérben a Google Translate-et használja, amely egy kifinomult mesterséges intelligencia, amely képes több millió kifejezést elemezni, hogy előre jelezze a legjobb szövegeket az adott feladathoz. Itt semmi manuális nincs, és internetkapcsolatra van szükséged a `blob.translate` használatához.
✅ Próbálj ki néhány további mondatot. Melyik jobb, a gépi tanulás vagy az emberi fordítás? Milyen esetekben?
## Érzelemelemzés
Egy másik terület, ahol a gépi tanulás nagyon jól működhet, az érzelemelemzés. Egy nem gépi tanulási megközelítés az, hogy azonosítjuk a 'pozitív' és 'negatív' szavakat és kifejezéseket. Ezután egy új szöveg esetében kiszámítjuk a pozitív, negatív és semleges szavak összértékét, hogy meghatározzuk az általános érzelmet.
Ez a megközelítés könnyen becsapható, ahogy azt a Marvin feladatban láthattad a mondat `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` egy szarkasztikus, negatív érzelmű mondat, de az egyszerű algoritmus a 'great', 'wonderful', 'glad' szavakat pozitívként, míg a 'waste', 'lost' és 'dark' szavakat negatívként érzékeli. Az összesített érzelem ezeknek az ellentmondásos szavaknak köszönhetően torzul.
✅ Állj meg egy pillanatra, és gondold át, hogyan közvetítjük a szarkazmust emberi beszélőként. A hanghordozás nagy szerepet játszik. Próbáld meg különböző módon kimondani a "Well, that film was awesome" mondatot, hogy felfedezd, hogyan közvetíti a hangod a jelentést.
### Gépi tanulási megközelítések
A gépi tanulási megközelítés az lenne, hogy manuálisan gyűjtünk negatív és pozitív szövegeket tweeteket, filmkritikákat, vagy bármit, ahol az ember adott egy pontszámot *és* egy írott véleményt. Ezután NLP technikákat alkalmazhatunk a véleményekre és pontszámokra, hogy minták jelenjenek meg (például a pozitív filmkritikákban gyakrabban szerepel az 'Oscar worthy' kifejezés, mint a negatív kritikákban, vagy a pozitív étteremkritikákban gyakrabban szerepel a 'gourmet', mint a 'disgusting').
> ⚖️ **Példa**: Ha egy politikus irodájában dolgoznál, és egy új törvényt vitatnának meg, a választók támogató vagy ellenző e-maileket írhatnának az irodának az adott új törvénnyel kapcsolatban. Tegyük fel, hogy az a feladatod, hogy elolvasd az e-maileket, és két kupacba sorold őket, *támogató* és *ellenző*. Ha sok e-mail érkezne, túlterheltnek érezhetnéd magad, hogy mindet elolvasd. Nem lenne jó, ha egy bot elolvashatná őket helyetted, megértené, és megmondaná, melyik kupacba tartozik az egyes e-mailek?
>
> Egy módja ennek elérésére a gépi tanulás használata. A modellt az *ellenző* e-mailek egy részével és a *támogató* e-mailek egy részével képeznéd ki. A modell hajlamos lenne bizonyos kifejezéseket és szavakat az ellenző vagy támogató oldalhoz társítani, *de nem értené a tartalmat*, csak azt, hogy bizonyos szavak és minták nagyobb valószínűséggel jelennek meg egy *ellenző* vagy *támogató* e-mailben. Tesztelhetnéd néhány olyan e-maillel, amelyet nem használtál a modell képzésére, és megnézhetnéd, hogy ugyanarra a következtetésre jut-e, mint te. Ezután, ha elégedett lennél a modell pontosságával, feldolgozhatnád a jövőbeli e-maileket anélkül, hogy mindegyiket el kellene olvasnod.
✅ Ez a folyamat hasonlít olyan folyamatokra, amelyeket korábbi leckékben használtál?
## Gyakorlat - érzelmi mondatok
Az érzelmeket *polaritással* mérik -1-től 1-ig, ahol -1 a legnegatívabb érzelem, és 1 a legpozitívabb. Az érzelmeket továbbá 0 - 1 skálán mérik objektivitás (0) és szubjektivitás (1) szerint.
Nézd meg újra Jane Austen *Büszkeség és balítélet* című művét. A szöveg elérhető itt: [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Az alábbi minta egy rövid programot mutat be, amely elemzi a könyv első és utolsó mondatának érzelmi polaritását és szubjektivitás/objektivitás pontszámát.
A következő feladatban használd a fent leírt `TextBlob` könyvtárat az `érzelem` meghatározására (nem kell saját érzelemkalkulátort írnod).
```python
from textblob import TextBlob
quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife."""
quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them."""
sentiment1 = TextBlob(quote1).sentiment
sentiment2 = TextBlob(quote2).sentiment
print(quote1 + " has a sentiment of " + str(sentiment1))
print(quote2 + " has a sentiment of " + str(sentiment2))
```
A következő kimenetet látod:
```output
It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146)
Darcy, as well as Elizabeth, really loved them; and they were
both ever sensible of the warmest gratitude towards the persons
who, by bringing her into Derbyshire, had been the means of
uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8)
```
## Kihívás - érzelmi polaritás ellenőrzése
A feladatod az, hogy érzelmi polaritás alapján meghatározd, hogy a *Büszkeség és balítélet* több abszolút pozitív mondatot tartalmaz-e, mint abszolút negatívat. Ehhez a feladathoz feltételezheted, hogy az 1 vagy -1 polaritás pontszám abszolút pozitív vagy negatív.
**Lépések:**
1. Töltsd le a [Büszkeség és balítélet](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) egy példányát a Project Gutenbergről .txt fájlként. Távolítsd el a metaadatokat a fájl elejéről és végéről, hogy csak az eredeti szöveg maradjon.
2. Nyisd meg a fájlt Pythonban, és sztringként olvasd ki a tartalmát.
3. Hozz létre egy TextBlob-ot a könyv sztringjéből.
4. Elemezd a könyv minden mondatát egy ciklusban.
1. Ha a polaritás 1 vagy -1, tárold a mondatot egy pozitív vagy negatív üzeneteket tartalmazó tömbben vagy listában.
5. A végén külön-külön nyomtasd ki az összes pozitív és negatív mondatot, valamint azok számát.
Itt találsz egy mintát [megoldásként](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb).
✅ Tudásellenőrzés
1. Az érzelem a mondatban használt szavakon alapul, de a kód *érti* a szavakat?
2. Gondolod, hogy az érzelmi polaritás pontos, vagy más szavakkal, *egyetértesz* a pontszámokkal?
1. Különösen egyetértesz vagy nem értesz egyet az alábbi mondatok abszolút **pozitív** polaritásával?
* “What an excellent father you have, girls!” said she, when the door was shut.
* “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect.
* How wonderfully these sort of things occur!
* I have the greatest dislike in the world to that sort of thing.
* Charlotte is an excellent manager, I dare say.
* “This is delightful indeed!
* I am so happy!
* Your idea of the ponies is delightful.
2. A következő 3 mondat abszolút pozitív érzelmi pontszámot kapott, de alapos olvasás után nem pozitív mondatok. Miért gondolta az érzelemelemzés, hogy pozitív mondatok?
* Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power.
* If I could but see you as happy!
* Our distress, my dear Lizzy, is very great.
3. Egyetértesz vagy nem értesz egyet az alábbi mondatok abszolút **negatív** polaritásával?
- Everybody is disgusted with his pride.
- “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful.
- The pause was to Elizabeths feelings dreadful.
- It would be dreadful!
✅ Jane Austen bármely rajongója megérti, hogy gyakran használja könyveit az angol regency társadalom nevetségesebb aspektusainak kritikájára. Elizabeth Bennett, a *Büszkeség és balítélet* főszereplője, éles társadalmi megfigyelő (mint az író), és nyelve gyakran erősen árnyalt. Még Mr. Darcy (a történet szerelmi érdeklődése) is megjegyzi Elizabeth játékos és szurkálódó nyelvhasználatát: "I have had the pleasure of your acquaintance long enough to know that you find great enjoyment in occasionally professing opinions which in fact are
Számos módja van annak, hogy szövegből érzelmeket vonjunk ki. Gondolj az üzleti alkalmazásokra, amelyek ezt a technikát használhatják. Gondolj arra is, hogyan sülhet el rosszul. Olvass többet kifinomult, vállalati szintű rendszerekről, amelyek érzelmeket elemeznek, például az [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott) szolgáltatásról. Tesztelj néhány mondatot a Büszkeség és balítéletből, és nézd meg, hogy képes-e érzékelni a finom árnyalatokat.
## Feladat
[Poétikai szabadsá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,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,38 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "1eb379dc2d0c9940b320732d16083778",
"translation_date": "2025-09-05T16:49:22+00:00",
"source_file": "6-NLP/README.md",
"language_code": "hu"
}
-->
# Bevezetés a természetes nyelvfeldolgozásba
A természetes nyelvfeldolgozás (NLP) egy számítógépes program képessége arra, hogy megértse az emberi nyelvet, ahogyan azt beszélik és írják ezt nevezzük természetes nyelvnek. Ez a mesterséges intelligencia (AI) egyik összetevője. Az NLP több mint 50 éve létezik, és a nyelvészet területén gyökerezik. Az egész terület célja, hogy segítse a gépeket az emberi nyelv megértésében és feldolgozásában. Ezután olyan feladatok elvégzésére használható, mint például a helyesírás-ellenőrzés vagy a gépi fordítás. Számos valós alkalmazása van különböző területeken, például orvosi kutatásban, keresőmotorokban és üzleti intelligenciában.
## Regionális téma: Európai nyelvek és irodalom, valamint romantikus szállodák Európában ❤️
A tananyag ezen részében megismerkedhetsz a gépi tanulás egyik legelterjedtebb alkalmazásával: a természetes nyelvfeldolgozással (NLP). A számítógépes nyelvészetből származó mesterséges intelligencia ezen kategóriája hidat képez az emberek és gépek között hang- vagy szöveges kommunikáció révén.
Ezekben a leckékben megtanuljuk az NLP alapjait, kis beszélgető botok építésével, hogy megértsük, hogyan segíti a gépi tanulás ezeknek a beszélgetéseknek az egyre "okosabbá" tételét. Időutazást teszel, és beszélgetsz Elizabeth Bennett-tel és Mr. Darcy-val Jane Austen klasszikus regényéből, a **Büszkeség és balítéletből**, amely 1813-ban jelent meg. Ezután tovább mélyíted tudásodat az érzelemelemzésről európai szállodai vélemények alapján.
![Büszkeség és balítélet könyv és tea](../../../6-NLP/images/p&p.jpg)
> Fotó: <a href="https://unsplash.com/@elaineh?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Elaine Howlin</a> az <a href="https://unsplash.com/s/photos/pride-and-prejudice?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a> oldalán
## Leckék
1. [Bevezetés a természetes nyelvfeldolgozásba](1-Introduction-to-NLP/README.md)
2. [Gyakori NLP feladatok és technikák](2-Tasks/README.md)
3. [Fordítás és érzelemelemzés gépi tanulással](3-Translation-Sentiment/README.md)
4. [Adatok előkészítése](4-Hotel-Reviews-1/README.md)
5. [NLTK az érzelemelemzéshez](5-Hotel-Reviews-2/README.md)
## Köszönetnyilvánítás
Ezeket a természetes nyelvfeldolgozási leckéket ☕-val írta [Stephen Howell](https://twitter.com/Howell_MSFT)
---
**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": "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
![Idősorok összefoglalása egy vázlatrajzban](../../../../sketchnotes/ml-timeseries.png)
> 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.
[![Bevezetés az idősoros előrejelzésbe](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](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?
![Játékon belüli pénzköltés](../../../../7-TimeSeries/1-Introduction/images/currency.png)
## 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()
```
![energia grafikon](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png)
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()
```
![július](../../../../7-TimeSeries/1-Introduction/images/july-2014.png)
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.
[![Bevezetés az ARIMA-ba](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](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()
```
![képzési és tesztelési adatok](../../../../7-TimeSeries/2-ARIMA/images/train-test.png)
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()
```
![eredeti](../../../../7-TimeSeries/2-ARIMA/images/original.png)
> Az eredeti adatok
![skálázott](../../../../7-TimeSeries/2-ARIMA/images/scaled.png)
> 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**
>
> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png)
>
> 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()
```
![idősor modell](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png)
🏆 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()
```
![teljes adatok](../../../../7-TimeSeries/3-SVR/images/full-data.png)
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()
```
![képzési és tesztelési adatok](../../../../7-TimeSeries/3-SVR/images/train-test.png)
### 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()
```
![képzési adatok előrejelzése](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png)
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()
```
![tesztelési adatok előrejelzése](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png)
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()
```
![teljes adatok előrejelzése](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png)
```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.
![elektromos hálózat](../../../7-TimeSeries/images/electric-grid.jpg)
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
![A gépi tanulás megerősítésének összefoglalása egy sketchnote-ban](../../../../sketchnotes/ml-reinforcement.png)
> 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.
[![Bevezetés a megerősítéses tanulásba](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](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:
![Péter környezete](../../../../8-Reinforcement/1-QLearning/images/environment.png)
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:
![Péter véletlenszerű sétája](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif)
## 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)`.
![Péter környezete](../../../../8-Reinforcement/1-QLearning/images/env_init.png)
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,347 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
"translation_date": "2025-09-05T16:45:21+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "hu"
}
-->
# CartPole Gördeszkázás
Az előző leckében megoldott probléma talán játékszerűnek tűnhet, és nem igazán alkalmazhatónak a valós életben. Ez azonban nem így van, mivel sok valós probléma is hasonló helyzetet mutat például sakk vagy Go játék közben. Ezek hasonlóak, mert van egy táblánk adott szabályokkal és egy **diszkrét állapot**.
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
## Bevezetés
Ebben a leckében ugyanazokat az elveket alkalmazzuk a Q-Learning során egy **folytonos állapotú** problémára, azaz egy olyan állapotra, amelyet egy vagy több valós szám határoz meg. A következő problémával foglalkozunk:
> **Probléma**: Ha Péter el akar menekülni a farkas elől, gyorsabban kell tudnia mozogni. Megnézzük, hogyan tanulhat meg Péter gördeszkázni, különösen egyensúlyozni, a Q-Learning segítségével.
![A nagy szökés!](../../../../8-Reinforcement/2-Gym/images/escape.png)
> Péter és barátai kreatívak lesznek, hogy elmeneküljenek a farkas elől! Kép: [Jen Looper](https://twitter.com/jenlooper)
Egy egyszerűsített egyensúlyozási problémát fogunk használni, amelyet **CartPole** problémának neveznek. A CartPole világában van egy vízszintes csúszka, amely balra vagy jobbra mozoghat, és a cél az, hogy egy függőleges rudat egyensúlyban tartsunk a csúszka tetején.
## Előfeltételek
Ebben a leckében az **OpenAI Gym** nevű könyvtárat fogjuk használni különböző **környezetek** szimulálására. A lecke kódját futtathatod helyben (például Visual Studio Code-ban), ebben az esetben a szimuláció egy új ablakban nyílik meg. Ha online futtatod a kódot, néhány módosítást kell végezned, ahogy azt [itt](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) leírták.
## OpenAI Gym
Az előző leckében a játék szabályait és az állapotot a saját magunk által definiált `Board` osztály határozta meg. Itt egy speciális **szimulációs környezetet** fogunk használni, amely szimulálja az egyensúlyozó rúd mögötti fizikát. Az egyik legnépszerűbb szimulációs környezet a megerősítéses tanulási algoritmusokhoz a [Gym](https://gym.openai.com/), amelyet az [OpenAI](https://openai.com/) tart fenn. Ezzel a Gymmel különböző **környezeteket** hozhatunk létre, a CartPole szimulációtól kezdve az Atari játékokig.
> **Megjegyzés**: Az OpenAI Gym által elérhető egyéb környezeteket [itt](https://gym.openai.com/envs/#classic_control) találod.
Először telepítsük a Gymet és importáljuk a szükséges könyvtárakat (kódblokk 1):
```python
import sys
!{sys.executable} -m pip install gym
import gym
import matplotlib.pyplot as plt
import numpy as np
import random
```
## Gyakorlat - CartPole környezet inicializálása
Ahhoz, hogy a CartPole egyensúlyozási problémával dolgozzunk, inicializálnunk kell a megfelelő környezetet. Minden környezethez tartozik:
- **Megfigyelési tér**, amely meghatározza az információ szerkezetét, amelyet a környezettől kapunk. A CartPole problémában a rúd helyzetét, sebességét és néhány más értéket kapunk.
- **Akciótér**, amely meghatározza a lehetséges akciókat. Esetünkben az akciótér diszkrét, és két akcióból áll - **balra** és **jobbra**. (kódblokk 2)
1. Az inicializáláshoz írd be a következő kódot:
```python
env = gym.make("CartPole-v1")
print(env.action_space)
print(env.observation_space)
print(env.action_space.sample())
```
Ahhoz, hogy lássuk, hogyan működik a környezet, futtassunk egy rövid szimulációt 100 lépésig. Minden lépésnél megadunk egy akciót, amelyet végre kell hajtani ebben a szimulációban véletlenszerűen választunk egy akciót az `action_space`-ből.
1. Futtasd az alábbi kódot, és nézd meg, mi történik.
✅ Ne feledd, hogy ezt a kódot helyi Python telepítésen futtatni előnyösebb! (kódblokk 3)
```python
env.reset()
for i in range(100):
env.render()
env.step(env.action_space.sample())
env.close()
```
Valami hasonlót kell látnod, mint ez a kép:
![nem egyensúlyozó CartPole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
1. A szimuláció során megfigyeléseket kell kapnunk, hogy eldönthessük, hogyan cselekedjünk. Valójában a step függvény visszaadja az aktuális megfigyeléseket, egy jutalomfüggvényt és egy done jelzőt, amely jelzi, hogy van-e értelme folytatni a szimulációt: (kódblokk 4)
```python
env.reset()
done = False
while not done:
env.render()
obs, rew, done, info = env.step(env.action_space.sample())
print(f"{obs} -> {rew}")
env.close()
```
A notebook kimenetében valami ilyesmit fogsz látni:
```text
[ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0
[ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0
[ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0
[ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0
[ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0
...
[ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0
[ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0
```
A szimuláció minden lépésénél visszaadott megfigyelési vektor a következő értékeket tartalmazza:
- A kocsi helyzete
- A kocsi sebessége
- A rúd szöge
- A rúd forgási sebessége
1. Szerezd meg ezeknek a számoknak a minimum és maximum értékét: (kódblokk 5)
```python
print(env.observation_space.low)
print(env.observation_space.high)
```
Azt is észreveheted, hogy a jutalomérték minden szimulációs lépésnél mindig 1. Ennek oka, hogy célunk minél tovább életben maradni, azaz a rudat ésszerűen függőleges helyzetben tartani a lehető leghosszabb ideig.
✅ Valójában a CartPole szimulációt akkor tekintjük megoldottnak, ha sikerül 195 átlagos jutalmat elérni 100 egymást követő próbálkozás során.
## Állapot diszkretizálása
A Q-Learning során létre kell hoznunk egy Q-táblát, amely meghatározza, mit kell tenni minden állapotban. Ehhez az állapotnak **diszkrétnek** kell lennie, pontosabban véges számú diszkrét értéket kell tartalmaznia. Ezért valahogy **diszkretizálnunk** kell a megfigyeléseinket, és azokat egy véges állapothalmazhoz kell hozzárendelni.
Néhány módon megtehetjük ezt:
- **Felosztás bin-ekre**. Ha ismerjük egy adott érték intervallumát, feloszthatjuk ezt az intervallumot egy bizonyos számú **binre**, majd az értéket lecserélhetjük arra a bin számra, amelyhez tartozik. Ez a numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) metódusával végezhető el. Ebben az esetben pontosan ismerni fogjuk az állapot méretét, mivel az a digitalizáláshoz kiválasztott bin-ek számától függ.
✅ Használhatunk lineáris interpolációt, hogy az értékeket egy véges intervallumra (például -20-tól 20-ig) hozzuk, majd a számokat kerekítéssel egész számokká alakíthatjuk. Ez valamivel kevesebb kontrollt ad az állapot méretére, különösen, ha nem ismerjük a bemeneti értékek pontos tartományait. Például esetünkben 4 értékből 2-nek nincs felső/alsó határa, ami végtelen számú állapotot eredményezhet.
Példánkban a második megközelítést fogjuk alkalmazni. Ahogy később észreveheted, a meghatározatlan felső/alsó határok ellenére ezek az értékek ritkán vesznek fel bizonyos véges intervallumokon kívüli értékeket, így azok az állapotok, amelyek szélsőséges értékeket tartalmaznak, nagyon ritkák lesznek.
1. Íme egy függvény, amely a modellünk megfigyelését veszi, és egy 4 egész értékű tuple-t állít elő: (kódblokk 6)
```python
def discretize(x):
return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int))
```
1. Nézzük meg egy másik diszkretizálási módszert bin-ek használatával: (kódblokk 7)
```python
def create_bins(i,num):
return np.arange(num+1)*(i[1]-i[0])/num+i[0]
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
nbins = [20,20,10,10] # number of bins for each parameter
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
1. Most futtassunk egy rövid szimulációt, és figyeljük meg ezeket a diszkrét környezeti értékeket. Nyugodtan próbáld ki a `discretize` és `discretize_bins` függvényeket, és nézd meg, van-e különbség.
✅ A `discretize_bins` a bin számát adja vissza, amely 0-alapú. Így a bemeneti változó körüli értékek esetén 0 körül az intervallum közepéből (10) ad vissza számot. A `discretize` esetében nem törődtünk a kimeneti értékek tartományával, lehetővé téve, hogy negatívak legyenek, így az állapotértékek nem tolódnak el, és 0 megfelel 0-nak. (kódblokk 8)
```python
env.reset()
done = False
while not done:
#env.render()
obs, rew, done, info = env.step(env.action_space.sample())
#print(discretize_bins(obs))
print(discretize(obs))
env.close()
```
✅ Kommenteld ki az env.render-rel kezdődő sort, ha látni szeretnéd, hogyan hajtja végre a környezet. Ellenkező esetben a háttérben is futtathatod, ami gyorsabb. Ezt a "láthatatlan" végrehajtást fogjuk használni a Q-Learning folyamat során.
## A Q-tábla szerkezete
Az előző leckében az állapot egy egyszerű számpár volt 0-tól 8-ig, így kényelmes volt a Q-táblát egy 8x8x2 alakú numpy tensorral ábrázolni. Ha bin-ek diszkretizálását használjuk, az állapotvektor mérete is ismert, így ugyanazt a megközelítést alkalmazhatjuk, és az állapotot egy 20x20x10x10x2 alakú tömbbel ábrázolhatjuk (itt 2 az akciótér dimenziója, az első dimenziók pedig az egyes paraméterekhez kiválasztott bin-ek számát jelölik a megfigyelési térben).
Azonban néha a megfigyelési tér pontos dimenziói nem ismertek. A `discretize` függvény esetében soha nem lehetünk biztosak abban, hogy az állapot bizonyos határokon belül marad, mivel néhány eredeti érték nincs korlátozva. Ezért kissé eltérő megközelítést alkalmazunk, és a Q-táblát szótárként ábrázoljuk.
1. Használjuk az *(állapot, akció)* párost a szótár kulcsaként, és az érték a Q-tábla bejegyzésének értékét jelöli. (kódblokk 9)
```python
Q = {}
actions = (0,1)
def qvalues(state):
return [Q.get((state,a),0) for a in actions]
```
Itt definiálunk egy `qvalues()` függvényt is, amely visszaadja a Q-tábla értékeinek listáját egy adott állapothoz, amely az összes lehetséges akcióhoz tartozik. Ha a bejegyzés nem szerepel a Q-táblában, alapértelmezés szerint 0-t adunk vissza.
## Kezdjük a Q-Learninget
Most készen állunk arra, hogy megtanítsuk Pétert egyensúlyozni!
1. Először állítsunk be néhány hiperparamétert: (kódblokk 10)
```python
# hyperparameters
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
Itt az `alpha` a **tanulási ráta**, amely meghatározza, hogy milyen mértékben kell módosítanunk a Q-tábla aktuális értékeit minden lépésnél. Az előző leckében 1-ről indultunk, majd a tanulás során csökkentettük az `alpha` értékét. Ebben a példában egyszerűség kedvéért állandó értéken tartjuk, de később kísérletezhetsz az `alpha` értékek módosításával.
A `gamma` a **diszkontfaktor**, amely megmutatja, hogy milyen mértékben kell előnyben részesítenünk a jövőbeli jutalmat a jelenlegi jutalommal szemben.
Az `epsilon` az **exploráció/hasznosítás tényező**, amely meghatározza, hogy az explorációt vagy a hasznosítást kell-e előnyben részesítenünk. Algoritmusunkban az esetek `epsilon` százalékában a következő akciót a Q-tábla értékei alapján választjuk ki, a fennmaradó esetekben pedig véletlenszerű akciót hajtunk végre. Ez lehetővé teszi számunkra, hogy felfedezzük a keresési tér olyan területeit, amelyeket korábban nem láttunk.
✅ Az egyensúlyozás szempontjából véletlenszerű akció választása (exploráció) olyan, mintha véletlenszerű ütést kapnánk rossz irányba, és a rúdnak meg kell tanulnia, hogyan állítsa vissza az egyensúlyt ezekből a "hibákból".
### Az algoritmus fejlesztése
Két fejlesztést is végezhetünk az előző lecke algoritmusán:
- **Átlagos kumulatív jutalom kiszámítása** több szimuláció során. 5000 iterációnként kinyomtatjuk az előrehaladást, és az átlagos kumulatív jutalmat számítjuk ki ezen időszak alatt. Ez azt jelenti, hogy ha több mint 195 pontot érünk el, akkor a problémát megoldottnak tekinthetjük, még a szükségesnél is jobb minőségben.
- **Maximális átlagos kumulatív eredmény kiszámítása**, `Qmax`, és elmentjük a Q-táblát, amely ehhez az eredményhez tartozik. Amikor futtatod a tanulást, észre fogod venni, hogy néha az átlagos kumulatív eredmény csökkenni kezd, és meg akarjuk őrizni a Q-tábla azon értékeit, amelyek a legjobb modellhez tartoznak a tanulás során.
1. Gyűjtsd össze az összes kumulatív jutalmat minden szimulációnál a `rewards` vektorban további ábrázoláshoz. (kódblokk 11)
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
Qmax = 0
cum_rewards = []
rewards = []
for epoch in range(100000):
obs = env.reset()
done = False
cum_reward=0
# == do the simulation ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# exploitation - chose the action according to Q-Table probabilities
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# exploration - randomly chose the action
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
cum_reward+=rew
ns = discretize(obs)
Q[(s,a)] = (1 - alpha) * Q.get((s,a),0) + alpha * (rew + gamma * max(qvalues(ns)))
cum_rewards.append(cum_reward)
rewards.append(cum_reward)
# == Periodically print results and calculate average reward ==
if epoch%5000==0:
print(f"{epoch}: {np.average(cum_rewards)}, alpha={alpha}, epsilon={epsilon}")
if np.average(cum_rewards) > Qmax:
Qmax = np.average(cum_rewards)
Qbest = Q
cum_rewards=[]
```
A következőket figyelheted meg az eredményekből:
- **Közel a célhoz**. Nagyon közel vagyunk ahhoz, hogy elérjük a 195 kumulatív jutalmat 100+ egymást követő szimuláció futtatása során, vagy akár el is érhettük! Még ha kisebb számokat kapunk is, nem tudhatjuk biztosan, mert 5000 futtatás átlagát számítjuk, és a hivatalos kritériumhoz csak 100 futtatás szükséges.
- **A jutalom csökkenni kezd**. Néha a jutalom csökkenni kezd, ami azt jelenti, hogy "tönkretehetjük" a Q-táblában már megtanult értékeket olyanokkal, amelyek rosszabbá teszik a helyzetet.
Ez a megfigyelés egyértelműbben látható, ha ábrázoljuk a tanulási folyamatot.
## A tanulási folyamat ábrázolása
A tanulás során az iterációk során összegyűjtöttük a kumulatív jutalom értékét a `rewards` vektorba. Így néz ki, amikor ábrázoljuk az iterációk száma ellenében:
```python
plt.plot(rewards)
```
![nyers előrehaladás](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png)
Ebből a grafikonból nem lehet semmit megállapítani, mivel a sztochasztikus tanulási folyamat természetéből adódóan a tanulási szakaszok hossza nagyon változó. Hogy értelmesebbé tegyük ezt a grafikont, kiszámíthatjuk a **futó átlagot** egy sor kísérlet során, mondjuk 100. Ezt kényelmesen elvégezhetjük az `np.convolve` segítségével: (kódblokk 12)
```python
def running_average(x,window):
return np.convolve(x,np.ones(window)/window,mode='valid')
plt.plot(running_average(rewards,100))
```
![tanulási folyamat](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png)
## Hiperparaméterek változtatása
A tanulás stabilabbá tétele érdekében érdemes
> **Feladat 1**: Játssz a hiperparaméterek értékeivel, és nézd meg, hogy el tudsz-e érni magasabb kumulatív jutalmat. Sikerül 195 fölé jutnod?
> **2. feladat**: Ahhoz, hogy hivatalosan megoldjuk a problémát, 195-ös átlagos jutalmat kell elérni 100 egymást követő futtatás során. Mérd ezt az edzés alatt, és győződj meg róla, hogy hivatalosan megoldottad a problémát!
## Az eredmény megtekintése működés közben
Érdekes lenne látni, hogyan viselkedik a betanított modell. Futtassuk le a szimulációt, és kövessük ugyanazt az akcióválasztási stratégiát, mint az edzés során, a Q-táblában lévő valószínűségi eloszlás alapján mintázva: (kód blokk 13)
```python
obs = env.reset()
done = False
while not done:
s = discretize(obs)
env.render()
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
obs,_,done,_ = env.step(a)
env.close()
```
Valami ilyesmit kellene látnod:
![egy egyensúlyozó cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
---
## 🚀Kihívás
> **3. feladat**: Itt a Q-tábla végső verzióját használtuk, ami lehet, hogy nem a legjobb. Ne feledd, hogy a legjobban teljesítő Q-táblát elmentettük a `Qbest` változóba! Próbáld ki ugyanazt a példát a legjobban teljesítő Q-táblával, úgy, hogy átmásolod a `Qbest`-et a `Q`-ba, és nézd meg, észreveszel-e különbséget.
> **4. feladat**: Itt nem a legjobb akciót választottuk minden lépésnél, hanem a megfelelő valószínűségi eloszlás alapján mintáztunk. Ésszerűbb lenne mindig a legjobb akciót választani, amelynek a legmagasabb Q-tábla értéke van? Ezt megteheted az `np.argmax` függvény használatával, amely megadja a legmagasabb Q-tábla értékhez tartozó akció számát. Valósítsd meg ezt a stratégiát, és nézd meg, javítja-e az egyensúlyozást.
## [Utó-előadás kvíz](https://ff-quizzes.netlify.app/en/ml/)
## Feladat
[Edz egy Mountain Car modellt](assignment.md)
## Összegzés
Mostanra megtanultuk, hogyan lehet ügynököket betanítani arra, hogy jó eredményeket érjenek el pusztán azáltal, hogy egy jutalomfüggvényt biztosítunk számukra, amely meghatározza a játék kívánt állapotát, és lehetőséget adunk nekik arra, hogy intelligensen feltérképezzék a keresési teret. Sikeresen alkalmaztuk a Q-Learning algoritmust diszkrét és folytonos környezetek esetében, de diszkrét akciókkal.
Fontos tanulmányozni azokat a helyzeteket is, ahol az akcióállapot szintén folytonos, és amikor a megfigyelési tér sokkal összetettebb, például az Atari játék képernyőjének képe. Ezekben a problémákban gyakran erősebb gépi tanulási technikákra, például neurális hálókra van szükség ahhoz, hogy jó eredményeket érjünk el. Ezek a fejlettebb témák a következő, haladó AI kurzusunk tárgyát képezik.
---
**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,67 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "20ca019012b1725de956681d036d8b18",
"translation_date": "2025-09-05T16:35:31+00:00",
"source_file": "8-Reinforcement/README.md",
"language_code": "hu"
}
-->
# Bevezetés a megerősítéses tanulásba
A megerősítéses tanulás, azaz RL, a gépi tanulás egyik alapvető paradigmájának számít, a felügyelt tanulás és a nem felügyelt tanulás mellett. Az RL a döntésekről szól: helyes döntések meghozatala vagy legalább tanulás a hibákból.
Képzeld el, hogy van egy szimulált környezeted, például a tőzsde. Mi történik, ha bevezetsz egy adott szabályozást? Pozitív vagy negatív hatása lesz? Ha valami negatív történik, akkor ezt _negatív megerősítésként_ kell értelmezned, tanulnod kell belőle, és változtatnod kell az irányon. Ha pozitív eredményt érünk el, akkor arra kell építenünk, _pozitív megerősítésként_.
![Péter és a farkas](../../../8-Reinforcement/images/peter.png)
> Péternek és barátainak menekülniük kell az éhes farkas elől! Kép: [Jen Looper](https://twitter.com/jenlooper)
## Regionális téma: Péter és a farkas (Oroszország)
A [Péter és a farkas](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) egy zenés mese, amelyet egy orosz zeneszerző, [Szergej Prokofjev](https://en.wikipedia.org/wiki/Sergei_Prokofiev) írt. A történet egy fiatal pionírról, Péterről szól, aki bátran kimegy az erdő tisztására, hogy üldözze a farkast. Ebben a részben gépi tanulási algoritmusokat fogunk tanítani, amelyek segítenek Péternek:
- **Felfedezni** a környező területet és optimális navigációs térképet készíteni.
- **Megtanulni** gördeszkázni és egyensúlyozni rajta, hogy gyorsabban tudjon közlekedni.
[![Péter és a farkas](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM)
> 🎥 Kattints a fenti képre, hogy meghallgasd Prokofjev Péter és a farkas című művét.
## Megerősítéses tanulás
Az előző részekben két gépi tanulási problémát láttál:
- **Felügyelt tanulás**, ahol vannak adataink, amelyek mintamegoldásokat javasolnak az általunk megoldani kívánt problémára. A [klasszifikáció](../4-Classification/README.md) és a [regresszió](../2-Regression/README.md) felügyelt tanulási feladatok.
- **Nem felügyelt tanulás**, ahol nincsenek címkézett tanulási adatok. A nem felügyelt tanulás fő példája a [klaszterezés](../5-Clustering/README.md).
Ebben a részben egy új tanulási problémát mutatunk be, amely nem igényel címkézett tanulási adatokat. Az ilyen problémák több típusa létezik:
- **[Félig felügyelt tanulás](https://wikipedia.org/wiki/Semi-supervised_learning)**, ahol rengeteg címkézetlen adat áll rendelkezésre, amelyet felhasználhatunk a modell előzetes betanítására.
- **[Megerősítéses tanulás](https://wikipedia.org/wiki/Reinforcement_learning)**, amelyben egy ügynök kísérletek végrehajtásával tanulja meg, hogyan viselkedjen egy szimulált környezetben.
### Példa - számítógépes játék
Tegyük fel, hogy meg akarod tanítani a számítógépet egy játék, például sakk vagy [Super Mario](https://wikipedia.org/wiki/Super_Mario) játszására. Ahhoz, hogy a számítógép játszani tudjon, meg kell tanítanunk neki, hogy minden játékállapotban megjósolja, melyik lépést tegye meg. Bár ez elsőre klasszifikációs problémának tűnhet, valójában nem az mivel nincs olyan adatbázisunk, amely állapotokat és hozzájuk tartozó lépéseket tartalmazna. Bár lehet, hogy van némi adatunk, például meglévő sakkjátszmák vagy Super Mario játékosok felvételei, valószínű, hogy ezek az adatok nem fedik le eléggé a lehetséges állapotok nagy számát.
Ahelyett, hogy meglévő játékadatokat keresnénk, a **megerősítéses tanulás** (RL) azon az ötleten alapul, hogy *a számítógépet sokszor játszatjuk*, és megfigyeljük az eredményt. Így a megerősítéses tanulás alkalmazásához két dologra van szükségünk:
- **Egy környezetre** és **egy szimulátorra**, amely lehetővé teszi, hogy sokszor játszunk. Ez a szimulátor határozza meg az összes játékszabályt, valamint a lehetséges állapotokat és lépéseket.
- **Egy jutalomfüggvényre**, amely megmondja, mennyire teljesítettünk jól minden lépés vagy játék során.
A fő különbség a többi gépi tanulási típus és az RL között az, hogy az RL-ben általában nem tudjuk, hogy nyerünk vagy veszítünk, amíg be nem fejezzük a játékot. Ezért nem mondhatjuk meg, hogy egy bizonyos lépés önmagában jó-e vagy sem csak a játék végén kapunk jutalmat. A célunk olyan algoritmusok tervezése, amelyek lehetővé teszik, hogy bizonytalan körülmények között is modelleket tanítsunk. Megismerkedünk egy RL algoritmussal, amelyet **Q-learningnek** hívnak.
## Leckék
1. [Bevezetés a megerősítéses tanulásba és a Q-Learningbe](1-QLearning/README.md)
2. [Egy gym szimulációs környezet használata](2-Gym/README.md)
## Köszönetnyilvánítás
"A megerősítéses tanulás bevezetése" ♥️-vel készült [Dmitry Soshnikov](http://soshnikov.com) által.
---
**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,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
![A gépi tanulás összefoglalása a való világban egy sketchnote-ban](../../../../sketchnotes/ml-realworld.png)
> 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,159 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "df2b538e8fbb3e91cf0419ae2f858675",
"translation_date": "2025-09-05T15:54:19+00:00",
"source_file": "9-Real-World/2-Debugging-ML-Models/README.md",
"language_code": "hu"
}
-->
# Utószó: Modellhibakeresés gépi tanulásban a Responsible AI dashboard komponenseivel
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ml/)
## Bevezetés
A gépi tanulás hatással van mindennapi életünkre. Az AI egyre inkább megjelenik olyan rendszerekben, amelyek alapvetően befolyásolják az egyéneket és a társadalmat, például az egészségügyben, pénzügyekben, oktatásban és foglalkoztatásban. Például rendszerek és modellek vesznek részt napi döntéshozatali feladatokban, mint például egészségügyi diagnózisok vagy csalások észlelése. Az AI fejlődése és gyors elterjedése azonban új társadalmi elvárásokkal és növekvő szabályozással találkozik. Gyakran látjuk, hogy az AI rendszerek nem felelnek meg az elvárásoknak, új kihívásokat vetnek fel, és a kormányok elkezdik szabályozni az AI megoldásokat. Ezért fontos, hogy ezeket a modelleket elemezzük, hogy mindenki számára igazságos, megbízható, befogadó, átlátható és felelősségteljes eredményeket biztosítsanak.
Ebben a tananyagban gyakorlati eszközöket mutatunk be, amelyekkel megvizsgálható, hogy egy modell rendelkezik-e felelősségteljes AI problémákkal. A hagyományos gépi tanulási hibakeresési technikák általában kvantitatív számításokon alapulnak, mint például az összesített pontosság vagy az átlagos hibaveszteség. Gondoljunk bele, mi történik, ha az adatok, amelyeket a modellek építéséhez használunk, bizonyos demográfiai csoportokat nem tartalmaznak, például faji, nemi, politikai nézetek vagy vallási csoportokat, vagy aránytalanul képviselik ezeket. Mi történik akkor, ha a modell kimenete egyes demográfiai csoportokat előnyben részesít? Ez túl- vagy alulképviseletet eredményezhet az érzékeny jellemzőcsoportokban, ami igazságossági, befogadási vagy megbízhatósági problémákat okozhat. Továbbá, a gépi tanulási modelleket gyakran "fekete dobozként" kezelik, ami megnehezíti annak megértését és magyarázatát, hogy mi vezérli a modell előrejelzéseit. Ezek mind olyan kihívások, amelyekkel az adatkutatók és AI fejlesztők szembesülnek, ha nincsenek megfelelő eszközeik a modellek igazságosságának vagy megbízhatóságának hibakeresésére és értékelésére.
Ebben a leckében megtanulhatod, hogyan végezz hibakeresést a modelleken az alábbiak segítségével:
- **Hibaelemzés**: azonosítsd, hogy az adateloszlás mely részeinél magas a modell hibaaránya.
- **Modelláttekintés**: végezz összehasonlító elemzést különböző adatcsoportok között, hogy felfedezd a modell teljesítménymutatóiban lévő eltéréseket.
- **Adatelemzés**: vizsgáld meg, hol lehet túl- vagy alulképviselet az adataidban, ami a modellt egy demográfiai csoport előnyben részesítésére késztetheti egy másikkal szemben.
- **Jellemzők fontossága**: értsd meg, mely jellemzők befolyásolják a modell előrejelzéseit globális vagy lokális szinten.
## Előfeltétel
Előfeltételként kérjük, tekintsd át a [Felelősségteljes AI eszközök fejlesztőknek](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) című anyagot.
> ![Gif a felelősségteljes AI eszközökről](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif)
## Hibaelemzés
A hagyományos modellteljesítmény-mutatók, amelyeket a pontosság mérésére használnak, többnyire helyes és helytelen előrejelzések alapján végzett számítások. Például egy modell, amely 89%-ban pontos, és 0,001 hibaveszteséggel rendelkezik, jó teljesítményűnek tekinthető. Azonban a hibák gyakran nem oszlanak el egyenletesen az alapul szolgáló adathalmazban. Lehet, hogy 89%-os pontossági eredményt kapsz, de felfedezed, hogy az adatok bizonyos régióiban a modell 42%-ban hibázik. Az ilyen hibaminták következményei bizonyos adatcsoportokkal igazságossági vagy megbízhatósági problémákhoz vezethetnek. Fontos megérteni, hogy a modell hol teljesít jól vagy rosszul. Azok az adatrégiók, ahol a modell pontatlanságai magasak, fontos demográfiai csoportok lehetnek.
![Modellek hibáinak elemzése és hibakeresése](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png)
A RAI dashboard Hibaelemzés komponense megmutatja, hogyan oszlanak el a modellhibák különböző csoportok között egy fa vizualizáció segítségével. Ez hasznos annak azonosításában, hogy mely jellemzők vagy területek okoznak magas hibaarányt az adathalmazban. Azáltal, hogy látod, honnan származnak a modell pontatlanságai, elkezdheted vizsgálni a gyökérokokat. Adatcsoportokat is létrehozhatsz az elemzéshez. Ezek az adatcsoportok segítenek a hibakeresési folyamatban annak meghatározásában, hogy miért teljesít jól a modell az egyik csoportban, de hibázik a másikban.
![Hibaelemzés](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png)
A fa térkép vizuális jelzői segítenek gyorsabban megtalálni a problémás területeket. Például minél sötétebb piros színű egy fa csomópont, annál magasabb a hibaarány.
A hőtérkép egy másik vizualizációs funkció, amelyet a felhasználók használhatnak a hibaarány vizsgálatára egy vagy két jellemző alapján, hogy megtalálják a modellhibák hozzájáruló tényezőit az egész adathalmazban vagy csoportokban.
![Hibaelemzés hőtérkép](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png)
Használj hibaelemzést, ha:
* Mélyebb megértést szeretnél szerezni arról, hogyan oszlanak el a modellhibák az adathalmazon és több bemeneti és jellemző dimenzión keresztül.
* Fel szeretnéd bontani az összesített teljesítménymutatókat, hogy automatikusan felfedezd a hibás csoportokat, és célzott enyhítési lépéseket tegyél.
## Modelláttekintés
Egy gépi tanulási modell teljesítményének értékelése átfogó megértést igényel a viselkedéséről. Ez több mutató, például hibaarány, pontosság, visszahívás, precizitás vagy MAE (átlagos abszolút hiba) áttekintésével érhető el, hogy feltárjuk a teljesítménymutatók közötti eltéréseket. Egy mutató lehet, hogy kiválóan néz ki, de egy másik mutatóban pontatlanságok derülhetnek ki. Ezenkívül a mutatók összehasonlítása az egész adathalmazon vagy csoportokon belül segít rávilágítani arra, hogy a modell hol teljesít jól vagy rosszul. Ez különösen fontos annak megértésében, hogy a modell hogyan teljesít érzékeny és nem érzékeny jellemzők között (pl. beteg faja, neme vagy életkora), hogy feltárjuk a modell esetleges igazságtalanságait. Például, ha felfedezzük, hogy a modell hibásabb egy érzékeny jellemzőket tartalmazó csoportban, az igazságtalanságot jelezhet.
A RAI dashboard Modelláttekintés komponense nemcsak az adatreprezentáció teljesítménymutatóinak elemzésében segít egy csoportban, hanem lehetőséget ad a modell viselkedésének összehasonlítására különböző csoportok között.
![Adathalmaz csoportok - modelláttekintés a RAI dashboardon](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png)
A komponens jellemző-alapú elemzési funkciója lehetővé teszi a felhasználók számára, hogy szűkítsék az adatcsoportokat egy adott jellemzőn belül, hogy anomáliákat azonosítsanak részletes szinten. Például a dashboard beépített intelligenciával automatikusan generál csoportokat egy felhasználó által kiválasztott jellemző alapján (pl. *"time_in_hospital < 3"* vagy *"time_in_hospital >= 7"*). Ez lehetővé teszi a felhasználó számára, hogy egy adott jellemzőt elkülönítsen egy nagyobb adatcsoportból, hogy lássa, ez-e a kulcsfontosságú tényező a modell hibás eredményeiben.
![Jellemző csoportok - modelláttekintés a RAI dashboardon](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png)
A Modelláttekintés komponens két osztályú eltérési mutatót támogat:
**Eltérés a modell teljesítményében**: Ezek a mutatók kiszámítják az eltérést (különbséget) a kiválasztott teljesítménymutató értékei között az adatcsoportokban. Néhány példa:
* Pontossági arány eltérése
* Hibaarány eltérése
* Precizitás eltérése
* Visszahívás eltérése
* Átlagos abszolút hiba (MAE) eltérése
**Eltérés a kiválasztási arányban**: Ez a mutató tartalmazza a kiválasztási arány (kedvező előrejelzés) különbségét az adatcsoportok között. Példa erre a hiteljóváhagyási arány eltérése. A kiválasztási arány azt jelenti, hogy az egyes osztályok adatpontjainak hány százalékát osztályozzák 1-nek (bináris osztályozásban) vagy az előrejelzési értékek eloszlását (regresszióban).
## Adatelemzés
> "Ha elég sokáig kínozod az adatokat, bármit bevallanak" - Ronald Coase
Ez az állítás szélsőségesen hangzik, de igaz, hogy az adatok manipulálhatók bármilyen következtetés támogatására. Az ilyen manipuláció néha akaratlanul történik. Emberek vagyunk, és mindannyian rendelkezünk előítéletekkel, amelyeket gyakran nehéz tudatosan felismerni, amikor adatokat torzítunk. Az igazságosság biztosítása az AI-ban és a gépi tanulásban továbbra is összetett kihívás.
Az adatok nagy vakfoltot jelentenek a hagyományos modellteljesítmény-mutatók számára. Lehet, hogy magas pontossági eredményeket kapsz, de ez nem mindig tükrözi az adathalmazban lévő alapvető adatelfogultságot. Például, ha egy vállalat alkalmazottainak adathalmazában az ügyvezető pozíciókban 27% nő és 73% férfi van, egy álláshirdetési AI modell, amelyet ezen adatok alapján képeztek, valószínűleg főként férfi közönséget céloz meg vezetői pozíciókra. Az adatokban lévő egyensúlyhiány a modell előrejelzését egy nem előnyben részesítésére késztette. Ez igazságossági problémát tár fel, ahol nemi elfogultság van az AI modellben.
A RAI dashboard Adatelemzés komponense segít azonosítani azokat a területeket, ahol túl- vagy alulképviselet van az adathalmazban. Segít a felhasználóknak diagnosztizálni azokat a hibák és igazságossági problémák gyökérokait, amelyeket az adatok egyensúlyhiánya vagy egy adott adatcsoport hiánya okoz. Ez lehetőséget ad a felhasználóknak arra, hogy vizualizálják az adathalmazokat előrejelzett és valós eredmények, hibacsoportok és konkrét jellemzők alapján. Néha egy alulképviselt adatcsoport felfedezése azt is feltárhatja, hogy a modell nem tanul jól, ezért magas a pontatlanság. Egy adatelfogultsággal rendelkező modell nemcsak igazságossági problémát jelent, hanem azt is mutatja, hogy a modell nem befogadó vagy megbízható.
![Adatelemzés komponens a RAI dashboardon](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png)
Használj adatelemzést, ha:
* Felfedezni szeretnéd az adathalmaz statisztikáit különböző szűrők kiválasztásával, hogy az adatokat különböző dimenziókra (más néven csoportokra) bontsd.
* Megérteni szeretnéd az adathalmaz eloszlását különböző csoportok és jellemzőcsoportok között.
* Meghatározni szeretnéd, hogy az igazságossággal, hibaelemzéssel és ok-okozati összefüggésekkel kapcsolatos megállapításaid (amelyeket más dashboard komponensekből származtattál) az adathalmaz eloszlásának eredményei-e.
* Eldönteni, hogy mely területeken gyűjts több adatot, hogy enyhítsd azokat a hibákat, amelyek reprezentációs problémákból, címkezajból, jellemzőzajból, címkeelfogultságból és hasonló tényezőkből származnak.
## Modellérthetőség
A gépi tanulási modellek gyakran "fekete dobozként" működnek. Nehéz megérteni, hogy mely kulcsfontosságú adatjellemzők vezérlik a modell előrejelzéseit. Fontos, hogy átláthatóságot biztosítsunk arra vonatkozóan, hogy miért hoz egy modell bizonyos előrejelzést. Például, ha egy AI rendszer azt jósolja, hogy egy cukorbeteg páciensnél fennáll a kockázata annak, hogy 30 napon belül visszakerül a kórházba, akkor képesnek kell lennie arra, hogy támogató adatokat nyújtson, amelyek az előrejelzéséhez vezettek. A támogató adatjelzők átláthatóságot biztosítanak, hogy segítsenek az orvosoknak vagy kórházaknak jól informált döntéseket hozni. Ezenkívül az, hogy megmagyarázható, miért hozott egy modell előrejelzést egy adott páciens esetében, lehetővé teszi az egészségügyi szabályozásokkal való megfelelést. Amikor gépi tanulási modelleket használsz olyan módon, amely hatással van az emberek életére, elengedhetetlen megérteni és megmagyarázni, mi befolyásolja a modell viselkedését. A modell magyarázhatósága és érthetősége segít választ adni az alábbi helyzetekben:
* Modellhibakeresés: Miért követte el a modell ezt a hibát? Hogyan javíthatom a modellemet?
* Ember-AI együttműködés: Hogyan érthetem meg és bízhatok a modell döntéseiben?
* Szabályozási megfelelés: Megfelel-e a modellem a jogi követelményeknek?
A RAI dashboard Jellemzők fontossága komponense segít hibakeresésben és átfogó megértést nyújt arról, hogyan hoz egy modell előrejelzéseket. Ez egy hasznos eszköz gépi tanulási szakemberek és döntéshozók számára, hogy megmagyarázzák és bizonyítékot mutassanak arra, hogy mely jellemzők befolyásolják a modell viselkedését a szabályozási megfelelés érdekében. A felhasználók globális és lokális magyarázatokat is felfedezhetnek, hogy érvényesítsék, mely jellemzők vezérlik a modell előrejelzéseit. A globális magyarázatok felsorolják azokat a legfontosabb j
- **Túl- vagy alulreprezentáció**. Az elképzelés az, hogy egy bizonyos csoport nem jelenik meg egy adott szakmában, és bármely szolgáltatás vagy funkció, amely ezt tovább erősíti, káros hatást gyakorol.
### Azure RAI dashboard
Az [Azure RAI dashboard](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) nyílt forráskódú eszközökre épül, amelyeket vezető akadémiai intézmények és szervezetek, köztük a Microsoft fejlesztettek ki. Ezek az eszközök segítik az adatkutatókat és AI fejlesztőket abban, hogy jobban megértsék a modellek viselkedését, és hogy felfedezzék és enyhítsék az AI modellek nem kívánt problémáit.
- Ismerd meg, hogyan használhatod a különböző komponenseket az RAI dashboard [dokumentációjának](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) átnézésével.
- Nézd meg néhány RAI dashboard [példa notebookot](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks), amelyek segítenek felelősségteljesebb AI forgatókönyvek hibakeresésében az Azure Machine Learning-ben.
---
## 🚀 Kihívás
Annak érdekében, hogy statisztikai vagy adatbeli torzítások már eleve ne kerüljenek bevezetésre, a következőket kell tennünk:
- biztosítsuk, hogy a rendszereken dolgozó emberek különböző háttérrel és nézőpontokkal rendelkezzenek
- fektessünk be olyan adathalmazokba, amelyek tükrözik társadalmunk sokszínűségét
- fejlesszünk jobb módszereket a torzítások észlelésére és kijavítására, amikor azok előfordulnak
Gondolj valós életbeli helyzetekre, ahol az igazságtalanság nyilvánvaló a modellek építése és használata során. Mit kellene még figyelembe vennünk?
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ml/)
## Áttekintés és önálló tanulás
Ebben a leckében megismerkedtél néhány gyakorlati eszközzel, amelyek segítenek a felelősségteljes AI beépítésében a gépi tanulásba.
Nézd meg ezt a workshopot, hogy mélyebben elmerülj a témákban:
- Responsible AI Dashboard: Egyablakos megoldás a felelősségteljes AI gyakorlati alkalmazásához, előadók: Besmira Nushi és Mehrnoosh Sameki
[![Responsible AI Dashboard: Egyablakos megoldás a felelősségteljes AI gyakorlati alkalmazásához](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Responsible AI Dashboard: Egyablakos megoldás a felelősségteljes AI gyakorlati alkalmazásához")
> 🎥 Kattints a fenti képre a videóért: Responsible AI Dashboard: Egyablakos megoldás a felelősségteljes AI gyakorlati alkalmazásához, előadók: Besmira Nushi és Mehrnoosh Sameki
Használd az alábbi anyagokat, hogy többet megtudj a felelősségteljes AI-ról és arról, hogyan építhetsz megbízhatóbb modelleket:
- Microsoft RAI dashboard eszközei ML modellek hibakereséséhez: [Responsible AI tools resources](https://aka.ms/rai-dashboard)
- Fedezd fel a Responsible AI eszköztárat: [Github](https://github.com/microsoft/responsible-ai-toolbox)
- Microsoft RAI erőforrásközpontja: [Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Microsoft FATE kutatócsoportja: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
## Feladat
[Ismerd meg az RAI dashboardot](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": "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.
![sakk](../../../9-Real-World/images/chess.jpg)
> 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"
}
-->
[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE)
[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/)
[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/)
[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/)
[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/)
[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](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
[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](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.
[![ML for beginners banner](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos)
---
## Ismerd meg a csapatot
[![Promo video](../../images/ml.gif)](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,114 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
"translation_date": "2025-09-05T16:31:25+00:00",
"source_file": "sketchnotes/LICENSE.md",
"language_code": "hu"
}
-->
Attribution-ShareAlike 4.0 Nemzetközi
=======================================================================
A Creative Commons Corporation ("Creative Commons") nem ügyvédi iroda, és nem nyújt jogi szolgáltatásokat vagy jogi tanácsadást. A Creative Commons nyilvános licencének terjesztése nem hoz létre ügyvéd-ügyfél vagy más kapcsolatot. A Creative Commons licencét és kapcsolódó információit "ahogy van" alapon teszi elérhetővé. A Creative Commons nem vállal garanciát licencére, a licenc feltételei szerint engedélyezett anyagokra vagy bármely kapcsolódó információra vonatkozóan. A Creative Commons a lehető legteljesebb mértékben elhárít minden felelősséget az ezek használatából eredő károkért.
Creative Commons nyilvános licencek használata
A Creative Commons nyilvános licencek egy szabványos feltételrendszert biztosítanak, amelyet az alkotók és más jogtulajdonosok használhatnak szerzői jogvédelem alatt álló eredeti művek és más anyagok megosztására, valamint bizonyos jogokra, amelyeket az alábbi nyilvános licenc határoz meg. Az alábbi megfontolások csak tájékoztató jellegűek, nem kimerítőek, és nem képezik részét a licencünknek.
Megfontolások licencadók számára: Nyilvános licencünk azok számára készült, akik jogosultak engedélyt adni a nyilvánosságnak az anyagok olyan módon történő használatára, amelyet egyébként a szerzői jog és bizonyos más jogok korlátoznának. Licencünk visszavonhatatlan. A licencadóknak el kell olvasniuk és meg kell érteniük a választott licenc feltételeit, mielőtt alkalmaznák azt. A licencadóknak biztosítaniuk kell minden szükséges jogot, mielőtt alkalmaznák licencünket, hogy a nyilvánosság az elvárásoknak megfelelően újra felhasználhassa az anyagot. A licencadóknak egyértelműen meg kell jelölniük minden olyan anyagot, amely nem tartozik a licenc hatálya alá. Ez magában foglalja más CC-licencelt anyagokat, vagy olyan anyagokat, amelyek kivétel vagy korlátozás alá esnek a szerzői jogban. További megfontolások licencadók számára:
wiki.creativecommons.org/Considerations_for_licensors
Megfontolások a nyilvánosság számára: A nyilvános licencünk használatával a licencadó engedélyt ad a nyilvánosságnak az engedélyezett anyag meghatározott feltételek és körülmények szerinti használatára. Ha a licencadó engedélye valamilyen okból nem szükséges például egy alkalmazandó kivétel vagy korlátozás miatt a szerzői jogban , akkor az ilyen használatot nem szabályozza a licenc. Licencünk csak a szerzői jog és bizonyos más jogok alapján ad engedélyeket, amelyeket a licencadó jogosult megadni. Az engedélyezett anyag használata más okokból továbbra is korlátozott lehet, például azért, mert másoknak szerzői joguk vagy más jogaik vannak az anyagban. A licencadó különleges kéréseket tehet, például kérheti, hogy minden módosítást jelöljenek meg vagy írjanak le. Bár licencünk nem követeli meg ezeket, ajánlott tiszteletben tartani az ilyen kéréseket, ha ésszerűek. További megfontolások a nyilvánosság számára:
wiki.creativecommons.org/Considerations_for_licensees
=======================================================================
Creative Commons Attribution-ShareAlike 4.0 Nemzetközi Nyilvános Licenc
Az Engedélyezett Jogok (lent meghatározva) gyakorlásával Ön elfogadja és beleegyezik a Creative Commons Attribution-ShareAlike 4.0 Nemzetközi Nyilvános Licenc ("Nyilvános Licenc") feltételeibe. Amennyiben ez a Nyilvános Licenc szerződésként értelmezhető, az Engedélyezett Jogokat az Ön ezen feltételek elfogadásáért kapja, és a Licencadó az anyag elérhetővé tételével kapott előnyökért biztosítja Önnek ezeket a jogokat.
1. szakasz Fogalommeghatározások.
a. Adaptált Anyag olyan szerzői jog és hasonló jogok által védett anyag, amely az Engedélyezett Anyagból származik vagy arra épül, és amelyben az Engedélyezett Anyagot lefordítják, átalakítják, elrendezik, átalakítják vagy más módon módosítják oly módon, hogy az a Licencadó szerzői jog és hasonló jogok szerinti engedélyét igényli. E Nyilvános Licenc céljából, ha az Engedélyezett Anyag zenei mű, előadás vagy hangfelvétel, az Adaptált Anyag mindig létrejön, ha az Engedélyezett Anyagot időben szinkronizálják egy mozgóképpel.
b. Adapter Licenc az a licenc, amelyet Ön alkalmaz a szerzői jog és hasonló jogok alapján az Ön hozzájárulásaira az Adaptált Anyagban, e Nyilvános Licenc feltételeinek megfelelően.
c. BY-SA Kompatibilis Licenc olyan licenc, amelyet a creativecommons.org/compatiblelicenses oldalon sorolnak fel, és amelyet a Creative Commons lényegében e Nyilvános Licenc egyenértékűjének tekint.
d. Szerzői jog és hasonló jogok a szerzői jog és/vagy a szerzői joghoz szorosan kapcsolódó hasonló jogok, beleértve, de nem kizárólagosan, az előadói jogokat, sugárzási jogokat, hangfelvételi jogokat és az egyedi adatbázis-jogokat, függetlenül attól, hogy a jogokat hogyan címkézik vagy kategorizálják. E Nyilvános Licenc céljából azokat a jogokat, amelyeket a 2. szakasz (b)(1)-(2) határoz meg, nem tekintjük szerzői jog és hasonló jogoknak.
e. Hatékony Technológiai Intézkedések azok az intézkedések, amelyeket megfelelő hatóság hiányában nem lehet megkerülni a WIPO Szerzői Jogi Egyezmény 1996. december 20-án elfogadott 11. cikkének és/vagy hasonló nemzetközi megállapodásoknak megfelelő törvények alapján.
f. Kivételek és korlátozások olyan jogi fogalmak, mint a méltányos használat, méltányos kezelés és/vagy bármely más kivétel vagy korlátozás a szerzői jog és hasonló jogok alkalmazásában, amelyek az Ön Engedélyezett Anyag használatára vonatkoznak.
g. Licenc Elemei a Creative Commons Nyilvános Licenc nevében felsorolt licenc attribútumok. E Nyilvános Licenc Licenc Elemei az Attribution és a ShareAlike.
h. Engedélyezett Anyag az a művészeti vagy irodalmi alkotás, adatbázis vagy más anyag, amelyre a Licencadó alkalmazta e Nyilvános Licencet.
i. Engedélyezett Jogok azok a jogok, amelyeket Ön e Nyilvános Licenc feltételei szerint kap, és amelyek korlátozódnak az Ön Engedélyezett Anyag használatára vonatkozó szerzői jog és hasonló jogokra, amelyeket a Licencadó jogosult engedélyezni.
j. Licencadó az a személy(ek) vagy szervezet(ek), akik e Nyilvános Licenc alapján jogokat biztosítanak.
k. Megosztás az anyag nyilvánosság számára történő elérhetővé tétele bármilyen módon vagy folyamatban, amely engedélyt igényel az Engedélyezett Jogok alapján, például reprodukció, nyilvános megjelenítés, nyilvános előadás, terjesztés, közvetítés, kommunikáció vagy importálás, valamint az anyag nyilvánosság számára történő elérhetővé tétele oly módon, hogy a nyilvánosság tagjai egyénileg választott helyről és időben hozzáférhessenek az anyaghoz.
l. Egyedi Adatbázis-Jogok olyan jogok, amelyek nem szerzői jogból származnak, és amelyek az Európai Parlament és a Tanács 1996. március 11-i 96/9/EK irányelvéből erednek az adatbázisok jogi védelméről, módosítva és/vagy utódjogszabályokkal, valamint más lényegében egyenértékű jogok bárhol a világon.
m. Ön az a személy vagy szervezet, amely e Nyilvános Licenc alapján gyakorolja az Engedélyezett Jogokat. Az Önnek megfelelő jelentése van.
Jogok, majd az adatbázis, amelyben Önnek Sui Generis Adatbázis Jogai vannak (de nem az egyes tartalmai), Adaptált Anyagnak minősül,
beleértve a 3(b) szakasz céljait; és
c. Be kell tartania a 3(a) szakasz feltételeit, ha megosztja az adatbázis teljes vagy jelentős részét.
A félreértések elkerülése végett, ez a 4. szakasz kiegészíti és nem helyettesíti az Ön kötelezettségeit ezen Nyilvános Licenc alapján, ha a Licencelt Jogok más Szerzői Jogokat és Hasonló Jogokat is tartalmaznak.
### 5. szakasz Jótállás kizárása és felelősség korlátozása
a. HACSAK A LICENCADÓ KÜLÖN NEM VÁLLALJA, AMENNYIBEN LEHETSÉGES, A LICENCADÓ AZ ENGEDÉLYEZETT ANYAGOT "AHOGY VAN" ÉS "AHOGY ELÉRHETŐ" FORMÁBAN BIZTOSÍTJA, ÉS SEMMILYEN KÉPVISELETET VAGY GARANCIÁT NEM VÁLLAL AZ ENGEDÉLYEZETT ANYAGGAL KAPCSOLATBAN, LEGYEN AZ KIFEJEZETT, HALLGATÓLAGOS, TÖRVÉNYI VAGY MÁS. EZ MAGÁBAN FOGLALJA, DE NEM KORLÁTOZÓDIK A TULAJDONJOGRA, ÉRTÉKESÍTHETŐSÉGRE, MEGHATÁROZOTT CÉLRA VALÓ ALKALMASSÁGRA, JOGSÉRTÉS HIÁNYÁRA, REJTETT VAGY MÁS HIBÁK HIÁNYÁRA, PONTOSSÁGRA, VAGY HIBÁK JELENLÉTÉRE VAGY HIÁNYÁRA, LEGYENEK AZOK ISMERTEK VAGY FELFEDEZHETŐEK. AHOL A GARANCIÁK KIZÁRÁSA NEM ENGEDÉLYEZETT TELJESEN VAGY RÉSZBEN, EZ A KIZÁRÁS ÖNRE NEM VONATKOZHAT.
b. AMENNYIBEN LEHETSÉGES, A LICENCADÓ SEMMILYEN JOGI ELV ALAPJÁN (BELEÉRTVE, DE NEM KORLÁTOZVA A GONDATLANSÁGOT) VAGY MÁS MÓDON NEM FELEL ÖNNEK SEMMILYEN KÖZVETLEN, KÜLÖNLEGES, KÖZVETETT, VÉLETLENSZERŰ, KÖVETKEZMÉNYES, BÜNTETŐ, PÉLDAÉRTÉKŰ VAGY MÁS VESZTESÉGÉRT, KÖLTSÉGÉRT, KIADÁSÉRT VAGY KÁRÉRT, AMELY EZEN NYILVÁNOS LICENC VAGY AZ ENGEDÉLYEZETT ANYAG HASZNÁLATÁBÓL ERED, MÉG AKKOR IS, HA A LICENCADÓT TÁJÉKOZTATTÁK AZ ILYEN VESZTESÉGEK, KÖLTSÉGEK, KIADÁSOK VAGY KÁROK LEHETŐSÉGÉRŐL. AHOL A FELELŐSSÉG KORLÁTOZÁSA NEM ENGEDÉLYEZETT TELJESEN VAGY RÉSZBEN, EZ A KORLÁTOZÁS ÖNRE NEM VONATKOZHAT.
c. A fent említett jótállás kizárása és felelősség korlátozása oly módon értelmezendő, hogy amennyiben lehetséges, a lehető legjobban megközelítse az abszolút kizárást és minden felelősség lemondását.
### 6. szakasz Időtartam és megszűnés
a. Ez a Nyilvános Licenc a licencelt Szerzői Jogok és Hasonló Jogok időtartamára vonatkozik. Azonban, ha Ön nem tartja be ezt a Nyilvános Licencet, akkor az Ön jogai ezen Nyilvános Licenc alapján automatikusan megszűnnek.
b. Ha az Ön joga az Engedélyezett Anyag használatára a 6(a) szakasz alapján megszűnt, az újra érvénybe lép:
1. automatikusan attól a naptól kezdve, amikor a jogsértés orvoslásra kerül, feltéve, hogy az orvoslás az Ön által a jogsértés felfedezésétől számított 30 napon belül megtörténik; vagy
2. a Licencadó kifejezett visszaállítása révén.
A félreértések elkerülése végett, ez a 6(b) szakasz nem érinti a Licencadó jogát arra, hogy jogorvoslatot keressen az Ön ezen Nyilvános Licenc megsértése miatt.
c. A félreértések elkerülése végett, a Licencadó az Engedélyezett Anyagot külön feltételek vagy kikötések alapján is kínálhatja, vagy bármikor leállíthatja az Engedélyezett Anyag terjesztését; azonban ez nem szünteti meg ezt a Nyilvános Licencet.
d. Az 1., 5., 6., 7. és 8. szakaszok túlélnek ezen Nyilvános Licenc megszűnését.
### 7. szakasz Egyéb feltételek és kikötések
a. A Licencadó nem köteles betartani semmilyen további vagy eltérő feltételt vagy kikötést, amelyet Ön közöl, hacsak kifejezetten nem egyezett bele.
b. Az Engedélyezett Anyaggal kapcsolatos bármilyen megállapodás, megértés vagy egyezség, amelyet itt nem rögzítettek, különálló és független ezen Nyilvános Licenc feltételeitől és kikötéseitől.
### 8. szakasz Értelmezés
a. A félreértések elkerülése végett, ez a Nyilvános Licenc nem csökkenti, korlátozza, szűkíti vagy szab feltételeket az Engedélyezett Anyag bármilyen olyan használatára, amely jogszerűen engedély nélkül is megvalósítható ezen Nyilvános Licenc alapján.
b. Amennyiben lehetséges, ha ezen Nyilvános Licenc bármely rendelkezése végrehajthatatlannak minősül, automatikusan átalakításra kerül a minimális mértékben, hogy végrehajtható legyen. Ha a rendelkezés nem alakítható át, az elválik ezen Nyilvános Licenctől anélkül, hogy a fennmaradó feltételek és kikötések végrehajthatóságát befolyásolná.
c. Ezen Nyilvános Licenc egyetlen feltétele vagy kikötése sem mondható le, és egyetlen nem teljesítés sem tekinthető elfogadottnak, hacsak a Licencadó kifejezetten bele nem egyezett.
d. Semmi ezen Nyilvános Licencben nem korlátozza vagy értelmezhető úgy, hogy korlátozza vagy lemondjon bármilyen kiváltságról és mentességről, amely a Licencadóra vagy Önre vonatkozik, beleértve bármely joghatóság vagy hatóság jogi eljárásait.
---
A Creative Commons nem részese a nyilvános licenceinek. Ennek ellenére a Creative Commons dönthet úgy, hogy alkalmazza valamelyik nyilvános licencét az általa közzétett anyagra, és ezekben az esetekben "Licencadóként" tekintendő. A Creative Commons nyilvános licenceinek szövege a CC0 Nyilvános Domain Dedikáció keretében a nyilvános domainnek van szentelve. Kivéve azt a korlátozott célt, hogy jelezze, hogy az anyag megosztásra került egy Creative Commons nyilvános licenc alatt, vagy ahogy azt a Creative Commons irányelvei a creativecommons.org/policies oldalon engedélyezik, a Creative Commons nem engedélyezi a "Creative Commons" védjegy vagy bármely más védjegy vagy logó használatát előzetes írásos beleegyezése nélkül, beleértve, de nem kizárólagosan, a nyilvános licencek bármilyen jogosulatlan módosításával vagy bármely más megállapodással, megértéssel vagy egyezséggel kapcsolatban az engedélyezett anyag használatáról. A félreértések elkerülése végett, ez a bekezdés nem képezi részét a nyilvános licenceknek.
A Creative Commons elérhető a creativecommons.org 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,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))
[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](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/)
---
[![ML pentru începători - Introducere în Învățarea Automată pentru Începători](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](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).
[![Introducere în ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](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
![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png)
> 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ă
![AI, ML, deep learning, data science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png)
> 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
![Rezumat al istoriei învățării automate într-o schiță](../../../../sketchnotes/ml-history.png)
> Schiță realizată de [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Chestionar înainte de lecție](https://ff-quizzes.netlify.app/en/ml/)
---
[![ML pentru începători - Istoria învățării automate](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](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, un robot inteligent](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg)
> 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.
![Eliza, un bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png)
> 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.
[![blocks world cu SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](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.
[![Istoria învățării profunde](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](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)
[![Istoria IA de Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](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…
Cancel
Save