<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kawin Hongmala</title>
    <description>The latest articles on DEV Community by Kawin Hongmala (@kawin951).</description>
    <link>https://dev.to/kawin951</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3039183%2F1a1c465b-e60c-43de-a18a-c79d3d419b8d.png</url>
      <title>DEV Community: Kawin Hongmala</title>
      <link>https://dev.to/kawin951</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kawin951"/>
    <language>en</language>
    <item>
      <title>สร้าง Simple Random Forest Model โดยใช้ Python</title>
      <dc:creator>Kawin Hongmala</dc:creator>
      <pubDate>Thu, 10 Apr 2025 20:40:18 +0000</pubDate>
      <link>https://dev.to/kawin951/sraang-simple-random-forest-model-odyaich-python-3i5c</link>
      <guid>https://dev.to/kawin951/sraang-simple-random-forest-model-odyaich-python-3i5c</guid>
      <description>&lt;p&gt;ถ้าเราจะต้องเดาหรือใช้ดวงตัวเองในการเล่นเสือมังกรว่าตาถัดไปจะออกอะไรหรือแนวโน้มจะเป็นยังไงในอนาคต การใช้ &lt;strong&gt;Random Forest&lt;/strong&gt; เป็นหนึ่งในวิธีที่เหมาะสม เนื่องจากมันสามารถจัดการกับข้อมูลที่มีรูปแบบซับซ้อนได้ดีช่วยให้การทำนายผลมีความแม่นยำ&lt;/p&gt;

&lt;p&gt;เกมเสือมังกรเป็นเกมไพ่ที่เล่นง่าย โดยผู้เล่นเลือกว่าจะเดิมพันฝั่ง "เสือ หรือ มังกร" หรืออาจเลือก "เสมอ" ในการแจกไพ่ทั้งสองฝั่งจะได้รับไพ่ 1 ใบ และฝั่งที่ได้ไพ่ที่มีแต้มสูงกว่าจะเป็นผู้ชนะ แต้มของไพ่จะเรียงตามลำดับจากต่ำไปสูง เช่น A=1, 2-10 แต้มตามหน้าไพ่ และไพ่ J, Q, K มีค่า 11, 12, 13 ตามลำดับ&lt;/p&gt;

&lt;p&gt;บทความนี้มีเป้าหมายเพื่อแสดงให้เห็นถึงการนำ &lt;strong&gt;Machine Learning&lt;/strong&gt; โดยใช้ &lt;strong&gt;Random Forest&lt;/strong&gt; มาช่วยในการวิเคราะห์และทำนายผลของเกมเสือมังกร จากข้อมูลย้อนหลัง เพื่อทำนายว่าตาถัดไปจะออกมังกร เสือ หรือเสมอ&lt;/p&gt;

&lt;p&gt;จากการเก็บข้อมูลย้อนหลัง 10 รอบ&lt;br&gt;
ในแต่ละรอบจะออกทั้งหมดรวม 208 ครั้ง&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รอบที่ 1&lt;/strong&gt; | มังกร 88 ครั้ง, เสือ 88 ครั้ง, เสมอ 32 ครั้ง&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2h4fubfgq2gnvje044lq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2h4fubfgq2gnvje044lq.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjcrw4dmpyhe1y5dip5us.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjcrw4dmpyhe1y5dip5us.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รอบที่ 2&lt;/strong&gt; | มังกร 88 ครั้ง, เสือ 95 ครั้ง, เสมอ 25 ครั้ง&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07erityxq3un89ji65gh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07erityxq3un89ji65gh.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7d1lyun9wqo4h03e2mvs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7d1lyun9wqo4h03e2mvs.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รอบที่ 3&lt;/strong&gt; | มังกร 75 ครั้ง, เสือ 101 ครั้ง, เสมอ 32 ครั้ง&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftll5voqwj40kz4ot5ngg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftll5voqwj40kz4ot5ngg.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2m8o79pybbna8z1h2ii.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2m8o79pybbna8z1h2ii.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รอบที่ 4&lt;/strong&gt; | มังกร 91 ครั้ง, เสือ 84 ครั้ง, เสมอ 33 ครั้ง&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fddjwbuctp6ecishiqdz8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fddjwbuctp6ecishiqdz8.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kuebnljyibotyrlrwjl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kuebnljyibotyrlrwjl.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รอบที่ 5&lt;/strong&gt; | มังกร 70 ครั้ง, เสือ 100 ครั้ง, เสมอ 38 ครั้ง&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsoexs77nbf1avi4ey1t7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsoexs77nbf1avi4ey1t7.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvj6rreghb2ozxuv2n825.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvj6rreghb2ozxuv2n825.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รอบที่ 6&lt;/strong&gt; | มังกร 99 ครั้ง, เสือ 79 ครั้ง, เสมอ 30 ครั้ง&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxw7gcqddyeznbt993zn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxw7gcqddyeznbt993zn.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm851vzjhkh4p72u97fmy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm851vzjhkh4p72u97fmy.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รอบที่ 7&lt;/strong&gt; | มังกร 96 ครั้ง, เสือ 105 ครั้ง, เสมอ 7 ครั้ง&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxbuqld7atc8a9745j3e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxbuqld7atc8a9745j3e.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffw3mekegij3trndmro2j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffw3mekegij3trndmro2j.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รอบที่ 8&lt;/strong&gt; | มังกร 91 ครั้ง, เสือ 95 ครั้ง, เสมอ 22 ครั้ง&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkcdbii5c7bty2ptzbh6c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkcdbii5c7bty2ptzbh6c.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0nb8cobpa37ae78jp85.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0nb8cobpa37ae78jp85.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รอบที่ 9&lt;/strong&gt; | มังกร 95 ครั้ง, เสือ 96 ครั้ง, เสมอ 27 ครั้ง&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvje4xr8sugrop02stqw9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvje4xr8sugrop02stqw9.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F956c3ogpzbrk3e05e6wa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F956c3ogpzbrk3e05e6wa.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;รอบที่ 10&lt;/strong&gt; | มังกร 106 ครั้ง, เสือ 90 ครั้ง, เสมอ 12 ครั้ง&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbui24hkpp74je16emu3w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbui24hkpp74je16emu3w.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzjhcp4qw0cal96i7vobp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzjhcp4qw0cal96i7vobp.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ขั้นตอนที่ 1 จัดเตรียมข้อมูล&lt;/strong&gt;&lt;br&gt;
เริ่มต้นด้วยการเตรียมข้อมูล โดยข้อมูลที่เราใช้จะเป็นผลลัพธ์ของเกมเสือมังกรจากตาก่อนหน้า &lt;br&gt;
แปลงข้อมูลผลลัพธ์จาก มังกร,เสือ,เสมอ ให้เป็นตัวเลข 1,2,3&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import pandas as pd  

# ข้อมูลชุดที่ลองเล่น
data = {'result': ['มังกร', 'เสือ', 'มังกร', 'เสือ', 'มังกร', 'เสือ',
'เสือ', 'เสือ', 'มังกร', 'มังกร', 'มังกร', 'เสือ',
'เสือ', 'เสือ', 'เสมอ', 'เสือ', 'มังกร', 'เสือ',
'เสือ', 'เสือ', 'เสือ', 'มังกร', 'มังกร', 'มังกร',
'เสมอ', 'มังกร', 'มังกร', 'เสมอ', 'มังกร', 'มังกร',
'มังกร', 'มังกร', 'เสือ', 'มังกร', 'มังกร', 'มังกร',
'เสือ', 'เสือ', 'เสือ', 'มังกร', 'มังกร', 'มังกร',
'มังกร', 'มังกร', 'มังกร', 'มังกร', 'เสือ', 'มังกร',
'เสมอ', 'มังกร', 'มังกร', 'มังกร', 'มังกร', 'มังกร',
'มังกร', 'มังกร', 'เสือ', 'เสือ', 'เสือ', 'เสือ'
'มังกร', 'มังกร', 'มังกร', 'มังกร', 'เสือ', 'มังกร',
'เสือ', 'เสือ', 'เสมอ', 'มังกร', 'เสือ', 'มังกร',
'เสือ', 'มังกร', 'เสือ', 'เสือ', 'มังกร', 'เสือ',
'มังกร', 'เสือ', 'เสมอ', 'มังกร', 'มังกร', 'มังกร',
'มังกร', 'มังกร', 'เสือ', 'เสือ', 'เสือ', 'เสือ',
'เสือ', 'มังกร', 'มังกร', 'มังกร', 'เสือ', 'เสือ',
'เสือ', 'มังกร', 'มังกร', 'มังกร', 'มังกร', 'เสือ',
'เสือ', 'เสือ', 'เสือ', 'มังกร', 'มังกร', 'เสือ',
'เสมอ', 'เสมอ', 'เสือ', 'เสือ', 'เสือ', 'มังกร',
'มังกร', 'เสือ', 'มังกร', 'เสือ', 'มังกร', 'เสือ', 
'มังกร', 'เสือ', 'เสือ', 'มังกร', 'เสือ', 'มังกร',                   
'เสือ', 'เสือ', 'เสือ', 'มังกร', 'มังกร', 'มังกร',
'มังกร', 'มังกร', 'มังกร', 'มังกร', 'มังกร', 'เสือ',
'มังกร', 'เสือ', 'เสือ', 'มังกร', 'เสือ', 'เสือ',
'เสือ', 'เสือ', 'มังกร', 'เสมอ', 'มังกร', 'เสือ',                  
'มังกร', 'เสือ', 'มังกร', 'เสือ', 'เสือ', 'เสมอ',
'มังกร', 'เสือ', 'เสือ', 'เสมอ', 'มังกร', 'เสือ',                   
'เสือ', 'เสือ', 'เสือ', 'เสมอ', 'มังกร', 'มังกร',
'เสือ', 'เสือ', 'มังกร', 'มังกร', 'มังกร', 'เสือ',                   
'เสือ', 'มังกร', 'มังกร', 'มังกร', 'เสือ', 'มังกร',
'มังกร', 'มังกร', 'มังกร', 'มังกร', 'มังกร', 'เสือ',                   
'เสือ', 'เสือ', 'มังกร', 'เสือ', 'เสือ', 'มังกร',
'เสือ', 'เสือ', 'มังกร', 'เสือ', 'มังกร', 'เสือ',
'มังกร', 'เสือ', 'มังกร', 'เสือ', 'มังกร', 'มังกร',                   
'มังกร', 'มังกร', 'มังกร', 'เสือ']}
df = pd.DataFrame(data)

# แปลงข้อมูลเป็นตัวเลข
df['result'] = df['result'].map({'มังกร': 1, 'เสือ': 2, 'เสมอ': 3})
print(df)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;กำหนดให้ มังกร,เสือ,เสมอ แปลงเป็นตัวเลข&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่างผลที่ได้จาก code&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8p96batg30rm9rosf6k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8p96batg30rm9rosf6k.png" alt="Image description" width="452" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ขั้นตอนที่ 2: สร้างฟีเจอร์&lt;/strong&gt;&lt;br&gt;
สร้างฟีเจอร์ที่ใช้สำหรับการทำนาย โดยการใช้ข้อมูลจากตาก่อนหน้าเป็นตัวแปร (Features) เช่น ผลลัพธ์ของตาก่อนหน้า (lag features) เพื่อช่วยให้โมเดลเรียนรู้จากข้อมูลย้อนหลังและคาดการณ์ผลของตาถัดไป&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# สร้างฟีเจอร์จากข้อมูลย้อนหลัง

df['prev_1'] = df['result'].shift(1)  
df['prev_2'] = df['result'].shift(2)  
df.dropna(inplace=True) 
print(df)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;df['prev_1'] = df['result'].shift(1)&lt;/code&gt;และ &lt;code&gt;df['prev_2'] = df['result'].shift(2)&lt;/code&gt; เป็นการดูผลลัพธ์ของตาก่อนหน้าและตาก่อนหน้าอีก 2 ตา&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่างผลที่ได้จาก code&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwssgfqelm8bb2y5so1p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwssgfqelm8bb2y5so1p.png" alt="Image description" width="589" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;การใช้ &lt;code&gt;shift()&lt;/code&gt; ทำให้ตัวแรก มีค่า &lt;code&gt;NaN&lt;/code&gt; เพราะมันไม่มีข้อมูลก่อนหน้าให้ดู&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ขั้นตอนที่ 3: แบ่งข้อมูล&lt;/strong&gt;&lt;br&gt;
แบ่งข้อมูลออกเป็น 2 ส่วน คือ ชุดฝึก (Training Set) และ ชุดทดสอบ (Test Set) &lt;br&gt;
โดยทั่วไปจะใช้ข้อมูล 80% สำหรับฝึกโมเดล และ 20% สำหรับทดสอบความแม่นยำของโมเดล&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from sklearn.model_selection import train_test_split

# แบ่งข้อมูลเป็น train และ test
X = df[['prev_1', 'prev_2']]  
y = df['result']  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;from sklearn.model_selection import train_test_split&lt;/code&gt; เป็นการนำเข้าจากไลบรารี เพื่อช่วยแบ่งข้อมูลได้ง่าย ๆ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ทำไมต้องแบ่งข้อมูล?&lt;/strong&gt;&lt;br&gt;
เหตุผลที่ต้องแบ่งข้อมูลเป็น 2 ส่วน คือ&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Training Set (ชุดฝึก): ใช้เพื่อ "สอน" โมเดลให้เรียนรู้จากข้อมูล&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test Set (ชุดทดสอบ): ใช้เพื่อ "ทดสอบ" ว่าโมเดลที่เรียนมาแล้วจะทำนายได้ดีแค่ไหนกับข้อมูลที่ไม่เคยเห็นมาก่อน&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ใช้ &lt;code&gt;train_test_split&lt;/code&gt; เพื่อแบ่งข้อมูลออกเป็น&lt;br&gt;
&lt;code&gt;X_train&lt;/code&gt; &lt;code&gt;y_train&lt;/code&gt; สำหรับฝึกโมเดล&lt;br&gt;
&lt;code&gt;X_test&lt;/code&gt; &lt;code&gt;y_test&lt;/code&gt; สำหรับทดสอบความแม่นยำของโมเดล&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;test_size=0.2&lt;/code&gt; แบ่ง 20% ของข้อมูลไว้สำหรับทดสอบ และอีก 80% ใช้ฝึก&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;random_state=42&lt;/code&gt; ตั้งค่าให้การแบ่งข้อมูลสุ่มแบบเดิมทุกครั้ง&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ขั้นตอนที่ 4: สร้างโมเดล&lt;/strong&gt;&lt;br&gt;
สร้างโมเดล Random Forest Classifier เพื่อฝึกโมเดล Machine Learning ด้วยข้อมูลในชุดฝึกที่เตรียมไว้เพื่อให้เรียนรู้ว่า ผลลัพธ์ของตาถัดไปจะออกอะไร จากข้อมูลของตาก่อนหน้า&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from sklearn.ensemble import RandomForestClassifier

# สร้างโมเดล

model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)  

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;from sklearn.ensemble import RandomForestClassifier&lt;/code&gt; เป็นการนำเข้าจากไลบรารี ซึ่งเป็นไลบรารียอดนิยมสำหรับทำ Machine Learning เป็นการใช้ต้นไม้หลายต้นในการร่วมกันตัดสินใจ เพื่อเพิ่มความแม่นยำ&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;n_estimators=100&lt;/code&gt; จะใช้ต้นไม้ 100 ต้น เพื่อช่วยกันตัดสินใจ&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;random_state=42&lt;/code&gt; ช่วยให้ผลลัพธ์เหมือนเดิมทุกครั้ง (ทำให้การทดลองสามารถทำซ้ำได้)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;หลังจากรันคำสั่งนี้ โมเดลจะ จำรูปแบบของข้อมูล ว่าถ้าผลก่อนหน้าเป็นแบบนี้ มีแนวโน้มจะออกอะไรในตาถัดไป&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ขั้นตอนที่ 5: ทำนายผล&lt;/strong&gt;&lt;br&gt;
หลังจากฝึกโมเดลเสร็จแล้ว ต้องการดูว่าโมเดลสามารถทำนายผลลัพธ์ของเกมได้ดีแค่ไหน&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# ทำนายผลจากข้อมูลทดสอบ

y_pred = model.predict(X_test)
print("Predictions:", y_pred)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;y_pred&lt;/code&gt; คือผลลัพธ์ที่โมเดลคิดว่าจะเกิดขึ้น&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;model.predict(X_test)&lt;/code&gt; เป็นโมเดลที่ฝึกไว้แล้วในขั้นตอนก่อนหน้า สั่งให้ทำนายผลลัพธ์ จากฟีเจอร์ที่อยู่ใน &lt;code&gt;X_test&lt;/code&gt; &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่างผลที่ได้จาก code &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffkj6milkx81qlh42sgwk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffkj6milkx81qlh42sgwk.png" alt="Image description" width="800" height="58"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;`1. 2. 1. 1. 2. 2. 2. 1. 2. 2. 2. 1. 1. 1. 2. 1. 1. 1. 1. 2. 1. 2. 2. 1.

&lt;ol&gt;
&lt;li&gt;2. 1. 2. 1. 1. 1. 1. 2. 1. 1. 1. 2. 1. 2. 2. 1.` จาก 20% ที่ทดสอบ &lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ขั้นตอนที่ 6: ประเมินผล&lt;/strong&gt;&lt;br&gt;
สุดท้ายจะประเมินผลการทำนายของโมเดลโดยใช้ตัวชี้วัดต่างๆ เช่น Accuracy, Confusion Matrix หรือ Classification Report เพื่อดูว่าโมเดลทำงานได้ดีแค่ไหน&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

print("Accuracy:", accuracy_score(y_test, y_pred))

print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))

print("Classification Report:")
print(classification_report(y_test, y_pred))

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;from sklearn.metrics import accuracy_score, confusion_matrix, classification_report&lt;/code&gt; นำเข้าโมดูลที่ใช้วัดผล&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;print("Accuracy:", accuracy_score(y_test, y_pred))&lt;/code&gt; คือสัดส่วนของจำนวนที่ทำนายถูกต้องทั้งหมด เช่น&lt;br&gt;
ถ้า test set มี 10 ตัว และทำนายถูก 8 ตัว จะได้ Accuracy = 0.8 หรือ 80%&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;print("Confusion Matrix:")&lt;/code&gt; &lt;code&gt;print(confusion_matrix(y_test, y_pred))&lt;/code&gt;คือตารางที่บอกว่าโมเดลทำนายผลแต่ละประเภทอย่างไร เช่น&lt;br&gt;
[5,1,0]&lt;br&gt;
[0,2,3] &lt;br&gt;
[1,1,0]&lt;br&gt;
จากตัวอย่างอธิบายง่ายๆ แถวแต่ละแถวคือ มังกร,เสือ,เสมอ ที่ออกจริงๆ ส่วนคอลัมน์แต่ละคอลัมน์คือ มังกร,เสือ,เสมอ ที่มีการทำนายไว้&lt;br&gt;
[5,1,0] 5 คือ ทำนายมังกรถูก 5 ครั้ง ทำนายผิดเป็นเสือ 1 ครั้ง ทำนายผิดเป็นเสมอ 0 ครั้ง&lt;br&gt;
[0,2,3] 0 คือ ทำนายผิดเป็นมังกร 0 ครั้ง ทำนายเสือถูก 2 ครั้ง ทำนายผิดเป็นเสมอ 3 ครั้ง&lt;br&gt;
[1,1,0] 1 คือ ทำนายผิดเป็นมังกร 1 ครั้ง ทำนายผิดเป็นเสือ 1 ครั้ง ทำนายเสมอไม่ถูกเลย&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;print("Classification Report:")&lt;/code&gt; &lt;code&gt;print(classification_report(y_test, y_pred))&lt;/code&gt; รายงานสรุปค่าความแน่นอน,recall,ประสิทธิภาพ ของโมเดลแต่ละผลลัพธ์ &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่างผลที่ได้จาก code&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68x3meay1z36l9h5wm39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68x3meay1z36l9h5wm39.png" alt="Image description" width="777" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;อธิบาย Precision = ทายว่าเป็น class นี้ แล้วถูกจริงกี่ %&lt;br&gt;
    Recall = ในบรรดาที่ควรเป็น class นี้ โมเดลทายถูกกี่ %&lt;br&gt;
    F1-score = ค่ากลางระหว่าง precision กับ recall (ค่านี้ยิ่งใกล้ 1.0 ยิ่งดี)&lt;br&gt;
    Support = จำนวนข้อมูลจริงในแต่ละคลาส&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Class 1 (มังกร): precision 0.48 → ทำนายว่าเป็นมังกร แต่จริงแค่ 48%&lt;br&gt;
              recall 0.65 → ข้อมูลที่ควรเป็นมังกร โมเดลทายถูก 65%&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Class 2 (เสือ): precision 0.67 → ทำนายว่าเป็นเสือ แล้วถูกจริง 67%&lt;br&gt;
             recall 0.55 → ทำนายเสือถูกประมาณครึ่งหนึ่ง&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Class 3 (เสมอ): ทุกค่าคือ 0 เพราะโมเดลไม่เคยทำนายว่าเป็นเสมอเลย&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;สรุป&lt;/strong&gt;&lt;br&gt;
การทำนายผลของเกมเสือมังกรโดยใช้ Random Forest ช่วยให้เราสามารถใช้ข้อมูลย้อนหลังในการฝึกโมเดล Machine Learning ที่มีความแม่นยำสูงและสามารถจัดการกับข้อมูลที่มีความซับซ้อนได้ดี นอกจากนี้โมเดลนี้ยังช่วยให้เราเห็นรูปแบบการออกของเกมที่อาจจะไม่ชัดเจนจากการดูผลลัพธ์ด้วยตาเปล่าหรือใช้ดวงวัดใจ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://algoaddict.wordpress.com/2022/02/12/%E0%B8%A1%E0%B8%B2%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B9%83%E0%B8%8A%E0%B9%89-random-forest-%E0%B8%8A%E0%B9%88%E0%B8%A7%E0%B8%A2%E0%B9%83%E0%B8%99%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%A5%E0%B8%87%E0%B8%97/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;https://algoaddict.wordpress.com/2022/02/12/%E0%B8%A1%E0%B8%B2%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B9%83%E0%B8%8A%E0%B9%89-random-forest-%E0%B8%8A%E0%B9%88%E0%B8%A7%E0%B8%A2%E0%B9%83%E0%B8%99%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%A5%E0%B8%87%E0%B8%97/?utm_source=chatgpt.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.datacamp.com/tutorial/random-forests-classifier-python" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.nerd-data.com/random-forest/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://guopai.github.io/ml-blog10.html?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/mmp-li/random-forest-%E0%B8%97%E0%B8%B3%E0%B8%99%E0%B8%B2%E0%B8%A2%E0%B8%A7%E0%B9%88%E0%B8%B2%E0%B8%88%E0%B8%B1%E0%B8%81%E0%B8%A3%E0%B8%A2%E0%B8%B2%E0%B8%99%E0%B8%88%E0%B8%B0%E0%B8%82%E0%B8%B2%E0%B8%A2%E0%B9%84%E0%B8%94%E0%B9%89%E0%B8%81%E0%B9%87%E0%B8%95%E0%B9%88%E0%B8%AD%E0%B9%80%E0%B8%A1%E0%B8%B7%E0%B9%88%E0%B8%AD-c60080354380" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://algoaddict.wordpress.com/2022/02/12/%E0%B8%A1%E0%B8%B2%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B9%83%E0%B8%8A%E0%B9%89-random-forest-%E0%B8%8A%E0%B9%88%E0%B8%A7%E0%B8%A2%E0%B9%83%E0%B8%99%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%A5%E0%B8%87%E0%B8%97/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
