สร้าง Logistic Regression Model อย่างง่ายโดยใช้ Python
การทำนายผลลัพธ์ในลักษณะ "ใช่หรือไม่ใช่" เป็นงานที่พบได้บ่อยในหลายๆ สถานการณ์ เช่น การทำนายว่าลูกค้าจะซื้อสินค้าหรือไม่ การประเมินความเสี่ยงในการเป็นเบาหวาน หรือการตัดสินใจว่าใบสมัครงานจะได้รับการพิจารณาหรือไม่ หนึ่งในวิธีที่นิยมใช้ในการทำนายผลลัพธ์ในลักษณะนี้ คือ Logistic Regression ซึ่งเป็นโมเดลทางสถิติที่ใช้สำหรับการจำแนกประเภทในรูปแบบ binary classification Logistic Regression จะคำนวณ ความน่าจะเป็น (probability) ที่ผลลัพธ์จะเป็น "ใช่" โดยค่าที่ได้จะอยู่ระหว่าง 0 และ 1 ซึ่งสามารถใช้ในการตัดสินใจว่าเราควรทำนายเป็น "ใช่" หรือ "ไม่ใช่" ตามเกณฑ์ที่กำหนด (เช่น ถ้าค่าความน่าจะเป็นมากกว่าหรือเท่ากับ 0.5 จะทำนายเป็น "ใช่") Logistic Regression ช่วยให้เราสร้างโมเดลที่สามารถทำนายผลลัพธ์ได้อย่างมีประสิทธิภาพจากข้อมูลที่มีอยู่ และเป็นเครื่องมือที่ได้รับความนิยมในงานวิจัยและการประยุกต์ใช้ในหลากหลายด้าน ไม่ว่าจะเป็นการตลาด การแพทย์ หรือการประเมินความเสี่ยงในธุรกิจต่างๆ. ในบทความนี้ เราจะมาดูการใช้งาน Logistic Regression ในภาษา Python โดยใช้ชุดข้อมูลที่มีชื่อว่า Iris Dataset ซึ่งเป็นชุดข้อมูลที่ได้รับความนิยมในงานวิเคราะห์ข้อมูลและใช้ในการสอนสร้างโมเดล Machine Learning เบื้องต้น ชุดข้อมูล Iris ประกอบด้วยข้อมูลลักษณะต่างๆ ของดอกไม้ เช่น ความยาวกลีบเลี้ยง (sepal length) ความกว้างกลีบเลี้ยง (sepal width) ความยาวกลีบดอก (petal length) และความกว้างกลีบดอก (petal width) โดยเราจะใช้ข้อมูลเหล่านี้ในการจำแนกว่า ดอกไม้แต่ละดอกเป็นสายพันธุ์ Setosa Versicolor หรือ Virginica. ขั้นตอนที่ 1 Import ไลบรารีที่จำเป็น ขั้นตอนที่ 2 โหลดข้อมูลจากไฟล์ CSV ตัวอย่างของข้อมูลสามารถโหลดได้ตามนี้เลย https://raw.githubusercontent.com/aero971/Logestic_Regression_on_iris_dataset/refs/heads/main/Iris.csv โหลดข้อมูลจากไฟล์ CSV เข้ามาในตัวแปร df (ย่อมาจาก DataFrame) ซึ่งเป็นโครงสร้างข้อมูลแบบตารางของ Pandas และ แสดงข้อมูล 5 แถวแรก ตัวอย่างผลที่ได้จากโค้ด ขั้นตอนที่ 3 ตรวจสอบขนาดของ DataFrame เพื่อแสดงขนาดของตารางข้อมูลว่ามีกี่แถวกี่ Colum จะได้เข้าใจขอบเขตของข้อมูล แสดงขนาดของตารางข้อมูล DataFrame ซึ่งผลลัพธ์คือ (150, 6) หมายความว่ามี 150 แถว 6 คอลัมน์ ขั้นตอนที่ 4 ตรวจสอบข้อมูลเบื้องต้น เราต้องเช็คสภาพข้อมูลก่อนที่จะใช้งานจริง เพื่อให้แน่ใจว่าข้อมูลสะอาด พร้อมใช้งาน และ เข้าใจข้อมูลที่เรากำลังจะวิเคราะห์ ตัวอย่างผลลัพธ์ที่ได้ ขั้นตอนที่ 6 ตรวจสอบจำนวนของแต่ละประเภทดอกไม้ เราจะนับจำนวนตัวอย่างของแต่ละสายพันธุ์ใน Colum Species เพื่อตรวจสอบความสมดุลของแต่ละ Class ผลลัพธ์ที่ได้ ขั้นตอนที่ 7 สร้าง Histogram ต่อมาเราจะมาสร้างแผนภูมิแทง ด้วยไลบรารี matplotlib และ seaborn เพื่อดูการกระจายของข้อมูล (distribution) ของแต่ละฟีเจอร์ใน DataFrame โดยเฉพาะคอลัมน์ที่เกี่ยวกับความยาวและความกว้างของกลีบดอกและกลีบเลี้ยง ผลลัพธ์ ความยาวและความกว้างกลีบเลี้ยง ความยาวและความกว้างของกลีบดอก ต่อมาเราจะใช้ FacetGrid จาก seaborn เพื่อแสดง ความสัมพันธ์ระหว่างตัวแปร 2 ตัว (PetalLengthCm และ SepalWidthCm) โดยแยกตามค่าในคอลัมน์ Species (ชนิดของดอก) ผลลัพธ์ ต่อมาเราจะลบ ID ออกเนื่องจากไม่ได้ช่วยในการวิเคราะห์ และวาดกราฟจับคู่ตัวแปรทุกตัว และใช้สีแยกชนิดดอกไม้ตาม Species ผลลัพธ์ที่ได้ ขั้นตอนที่ 8 สร้าง Boxplot 4 รูป เราจะสร้างกราฟ Boxplot 4 รูปเพื่อเปรียบเทียบค่าความยาวและความกว้างของกลีบดอกและกลีบเลี้ยงของดอกไม้แต่ละสายพันธุ์ในชุดข้อมูล DataFrame โดยใช้ Seaborn และ Matplotlib จัดวางในรูปแบบ 2x2 บนพื้นที่ขนาด 16x9 นิ้ว ช่วยให้เห็นการกระจายตัวและค่าผิดปกติของแต่ละชนิดดอกไม้ได้ชัดเจน ผลลัพธ์ ต่อมาเราจะสร้าง heatmap แสดงค่า correlation ระหว่างคุณลักษณะของดอกไม้ในชุดข้อมูล DataFrame โดยที่เราจะลบคอลัมน์ Id ออก เพราะไม่ใช่ข้อมูลเชิงวิเคราะห์ และคำนวณค่า Pearson correlation ระหว่างแต่ละ feature พร้อมทั้งแสดง heatmap พร้อมตัวเลขในแต่ละช่อง เราจะใช้ figsize=(8,6) เพื่อกำหนดขนาดแผนภาพให้พอดี ดูชัด เข้าใจง่ายว่า feature ไหนมีความสัมพันธ์กันสูง ผลลัพธ์ ขั้นตอนที่ 9 สร้างโมเดล Logistic Regression เราจะใช้ Logistic Regression เพื่อจำแนกชนิดของดอกไม้ (Species) โดยอิงจากคุณลักษณะ 4 อย่าง ได้แก่ SepalLengthCm SepalWidthCm PetalLengthCm และ PetalWidthCm โดยที่ X คือ ตัวแปรอิสระ (features) แปลงจาก DataFrame เป็น array เพื่อให้โมเดลใช้ได้ y คือ ตัวแปรตาม (target) ยังอยู่ในรูปแบบ DataFrame ผลลัพธ์ ต่อมาเราจะมาดูความแม่นยำของโมเดลกัน ผลลัพธ์คือ 97.33 แสดงให้เห็นว่ามีความแม่นยำสูง ต่อมาเราจะมาทำนายผลลัพธ์จากโมเดลที่เราสร้างและฝึกมาแล้ว เพื่อทำนายผลจากข้อมูลทดสอบ (Test Data) ผลลัพธ์ เรามาดูผลการประเมินโมเดลแบบละเอียดกัน ผลลัพธ์ที่ได้ Setosa มี precision และ recall เท่ากับ 1.00 หมายความว่าโมเดลสามารถทำนาย Setosa ได้ถูกต้องทั้งหมด Versicolor และ Virginica มี precision และ recall ใกล้เคียง 1.00 เช่นกัน Accuracy (ค่าความแม่นยำโดยรวม) คือ 98% ซึ่งแสดงว่าโมเดลทำนายได้ถูกต้อง 98% ของทั้งหมด สุดท้ายนี้เราใช้ confusion matrix ซึ่งเป็นเครื่องมือในการประเมินประสิทธิภาพของโมเดลโดยการเปรียบเทียบ ค่าทำนาย (predicted) กับ ค่าจริง (expected) ของข้อมูลทดสอบ เราใช้โมเดลจำแนกประเภทดอกไม้ 3 ชนิด (Setosa Versicolor และ Virginica) ผลลัพธ์ที่ได้ แสดงให้เห็นว่า แถวแรก ([50 0 0]): Setosa โมเดลทำนาย ถูกต้องทั้งหมด (50 ตัวอย่าง) แถวที่สอง ([0 47 3]): Versicolor โมเดลทำนาย ผิด 3 ตัวอย่าง เป็น Virginica แถวที่สาม ([0 2 48]): Virginica โมเดลทำนาย ผิด 2 ตัวอย่าง เป็น Versicolor จากตัวอย่างนี้ เราได้เรียนรู้กระบวนการวิเคราะห์ข้อมูลและก

การทำนายผลลัพธ์ในลักษณะ "ใช่หรือไม่ใช่" เป็นงานที่พบได้บ่อยในหลายๆ สถานการณ์ เช่น การทำนายว่าลูกค้าจะซื้อสินค้าหรือไม่ การประเมินความเสี่ยงในการเป็นเบาหวาน หรือการตัดสินใจว่าใบสมัครงานจะได้รับการพิจารณาหรือไม่
หนึ่งในวิธีที่นิยมใช้ในการทำนายผลลัพธ์ในลักษณะนี้ คือ Logistic Regression ซึ่งเป็นโมเดลทางสถิติที่ใช้สำหรับการจำแนกประเภทในรูปแบบ binary classification
Logistic Regression จะคำนวณ ความน่าจะเป็น (probability) ที่ผลลัพธ์จะเป็น "ใช่" โดยค่าที่ได้จะอยู่ระหว่าง 0 และ 1 ซึ่งสามารถใช้ในการตัดสินใจว่าเราควรทำนายเป็น "ใช่" หรือ "ไม่ใช่" ตามเกณฑ์ที่กำหนด (เช่น ถ้าค่าความน่าจะเป็นมากกว่าหรือเท่ากับ 0.5 จะทำนายเป็น "ใช่")
Logistic Regression ช่วยให้เราสร้างโมเดลที่สามารถทำนายผลลัพธ์ได้อย่างมีประสิทธิภาพจากข้อมูลที่มีอยู่ และเป็นเครื่องมือที่ได้รับความนิยมในงานวิจัยและการประยุกต์ใช้ในหลากหลายด้าน ไม่ว่าจะเป็นการตลาด การแพทย์ หรือการประเมินความเสี่ยงในธุรกิจต่างๆ.
ในบทความนี้ เราจะมาดูการใช้งาน Logistic Regression ในภาษา Python โดยใช้ชุดข้อมูลที่มีชื่อว่า Iris Dataset ซึ่งเป็นชุดข้อมูลที่ได้รับความนิยมในงานวิเคราะห์ข้อมูลและใช้ในการสอนสร้างโมเดล Machine Learning เบื้องต้น
ชุดข้อมูล Iris ประกอบด้วยข้อมูลลักษณะต่างๆ ของดอกไม้ เช่น ความยาวกลีบเลี้ยง (sepal length) ความกว้างกลีบเลี้ยง (sepal width) ความยาวกลีบดอก (petal length) และความกว้างกลีบดอก (petal width) โดยเราจะใช้ข้อมูลเหล่านี้ในการจำแนกว่า ดอกไม้แต่ละดอกเป็นสายพันธุ์ Setosa Versicolor หรือ Virginica.
ขั้นตอนที่ 1 Import ไลบรารีที่จำเป็น
ขั้นตอนที่ 2 โหลดข้อมูลจากไฟล์ CSV
ตัวอย่างของข้อมูลสามารถโหลดได้ตามนี้เลย
https://raw.githubusercontent.com/aero971/Logestic_Regression_on_iris_dataset/refs/heads/main/Iris.csv
โหลดข้อมูลจากไฟล์ CSV เข้ามาในตัวแปร df (ย่อมาจาก DataFrame) ซึ่งเป็นโครงสร้างข้อมูลแบบตารางของ Pandas และ แสดงข้อมูล 5 แถวแรก
ตัวอย่างผลที่ได้จากโค้ด
ขั้นตอนที่ 3 ตรวจสอบขนาดของ DataFrame
เพื่อแสดงขนาดของตารางข้อมูลว่ามีกี่แถวกี่ Colum จะได้เข้าใจขอบเขตของข้อมูล
แสดงขนาดของตารางข้อมูล DataFrame ซึ่งผลลัพธ์คือ (150, 6) หมายความว่ามี 150 แถว 6 คอลัมน์
ขั้นตอนที่ 4 ตรวจสอบข้อมูลเบื้องต้น
เราต้องเช็คสภาพข้อมูลก่อนที่จะใช้งานจริง เพื่อให้แน่ใจว่าข้อมูลสะอาด พร้อมใช้งาน และ เข้าใจข้อมูลที่เรากำลังจะวิเคราะห์
ขั้นตอนที่ 6 ตรวจสอบจำนวนของแต่ละประเภทดอกไม้
เราจะนับจำนวนตัวอย่างของแต่ละสายพันธุ์ใน Colum Species เพื่อตรวจสอบความสมดุลของแต่ละ Class
ผลลัพธ์ที่ได้
ขั้นตอนที่ 7 สร้าง Histogram
ต่อมาเราจะมาสร้างแผนภูมิแทง ด้วยไลบรารี matplotlib และ seaborn เพื่อดูการกระจายของข้อมูล (distribution) ของแต่ละฟีเจอร์ใน DataFrame โดยเฉพาะคอลัมน์ที่เกี่ยวกับความยาวและความกว้างของกลีบดอกและกลีบเลี้ยง
ผลลัพธ์
ความยาวและความกว้างกลีบเลี้ยง
ความยาวและความกว้างของกลีบดอก
ต่อมาเราจะใช้ FacetGrid จาก seaborn เพื่อแสดง ความสัมพันธ์ระหว่างตัวแปร 2 ตัว (PetalLengthCm และ SepalWidthCm) โดยแยกตามค่าในคอลัมน์ Species (ชนิดของดอก)
ต่อมาเราจะลบ ID ออกเนื่องจากไม่ได้ช่วยในการวิเคราะห์ และวาดกราฟจับคู่ตัวแปรทุกตัว และใช้สีแยกชนิดดอกไม้ตาม Species
ผลลัพธ์ที่ได้
ขั้นตอนที่ 8 สร้าง Boxplot 4 รูป
เราจะสร้างกราฟ Boxplot 4 รูปเพื่อเปรียบเทียบค่าความยาวและความกว้างของกลีบดอกและกลีบเลี้ยงของดอกไม้แต่ละสายพันธุ์ในชุดข้อมูล DataFrame โดยใช้ Seaborn และ Matplotlib จัดวางในรูปแบบ 2x2 บนพื้นที่ขนาด 16x9 นิ้ว ช่วยให้เห็นการกระจายตัวและค่าผิดปกติของแต่ละชนิดดอกไม้ได้ชัดเจน
ผลลัพธ์
ต่อมาเราจะสร้าง heatmap แสดงค่า correlation ระหว่างคุณลักษณะของดอกไม้ในชุดข้อมูล DataFrame โดยที่เราจะลบคอลัมน์ Id ออก เพราะไม่ใช่ข้อมูลเชิงวิเคราะห์ และคำนวณค่า Pearson correlation ระหว่างแต่ละ feature พร้อมทั้งแสดง heatmap พร้อมตัวเลขในแต่ละช่อง
เราจะใช้ figsize=(8,6) เพื่อกำหนดขนาดแผนภาพให้พอดี ดูชัด เข้าใจง่ายว่า feature ไหนมีความสัมพันธ์กันสูง
ผลลัพธ์
ขั้นตอนที่ 9 สร้างโมเดล Logistic Regression
เราจะใช้ Logistic Regression เพื่อจำแนกชนิดของดอกไม้ (Species) โดยอิงจากคุณลักษณะ 4 อย่าง ได้แก่ SepalLengthCm SepalWidthCm PetalLengthCm และ PetalWidthCm
โดยที่ X คือ ตัวแปรอิสระ (features) แปลงจาก DataFrame
เป็น array เพื่อให้โมเดลใช้ได้
y คือ ตัวแปรตาม (target) ยังอยู่ในรูปแบบ DataFrame
ผลลัพธ์
ต่อมาเราจะมาดูความแม่นยำของโมเดลกัน
ผลลัพธ์คือ 97.33 แสดงให้เห็นว่ามีความแม่นยำสูง
ต่อมาเราจะมาทำนายผลลัพธ์จากโมเดลที่เราสร้างและฝึกมาแล้ว เพื่อทำนายผลจากข้อมูลทดสอบ (Test Data)
เรามาดูผลการประเมินโมเดลแบบละเอียดกัน
ผลลัพธ์ที่ได้
- Setosa มี precision และ recall เท่ากับ 1.00 หมายความว่าโมเดลสามารถทำนาย Setosa ได้ถูกต้องทั้งหมด
- Versicolor และ Virginica มี precision และ recall ใกล้เคียง 1.00 เช่นกัน
- Accuracy (ค่าความแม่นยำโดยรวม) คือ 98% ซึ่งแสดงว่าโมเดลทำนายได้ถูกต้อง 98% ของทั้งหมด
สุดท้ายนี้เราใช้ confusion matrix ซึ่งเป็นเครื่องมือในการประเมินประสิทธิภาพของโมเดลโดยการเปรียบเทียบ ค่าทำนาย (predicted) กับ ค่าจริง (expected) ของข้อมูลทดสอบ
เราใช้โมเดลจำแนกประเภทดอกไม้ 3 ชนิด (Setosa Versicolor และ Virginica)
ผลลัพธ์ที่ได้ แสดงให้เห็นว่า
- แถวแรก ([50 0 0]): Setosa โมเดลทำนาย ถูกต้องทั้งหมด (50 ตัวอย่าง)
- แถวที่สอง ([0 47 3]): Versicolor โมเดลทำนาย ผิด 3 ตัวอย่าง เป็น Virginica
- แถวที่สาม ([0 2 48]): Virginica โมเดลทำนาย ผิด 2 ตัวอย่าง เป็น Versicolor
จากตัวอย่างนี้ เราได้เรียนรู้กระบวนการวิเคราะห์ข้อมูลและการจำแนกประเภทด้วย Logistic Regression อย่างเป็นระบบ ตั้งแต่การทำความเข้าใจข้อมูล การวิเคราะห์ผ่านกราฟ จนถึงการประเมินโมเดลอย่างรอบด้าน โดยใช้เครื่องมือสำคัญในภาษา Python
ตัวอย่างเพิ่มเติม
เราจะมาลองใช้ข้อมูลอื่นบ้าง โดยชุดข้อมูลต่อมาที่เราจะใช้กันนั้นก็คือ ข้อมูลของมิจฉาชีพ (scampass) ซึ่งเราจะมาจำแนกว่าเป็นมิจฉาชีพหรือไม่ จากข้อมูลเบอร์โทรหรือบัญชีธนาคาร ซึ่งเป็นข้อมูลที่น่าสนใจ เราจะมาลองจำแนกด้วย Logistic Regression เช่นกันกับตัวอย่างที่แล้ว
ข้อมูล scampass ประกอบด้วย 60 แถว 7 คอลัมน์
- num_reports (จำนวนครั้งที่มีคนรายงานหมายเลขนี้ว่าเป็นสแปมหรือหลอกลวง)
- is_foreign_number (เป็นเบอร์ต่างประเทศหรือไม่)
- account_age_days (จำนวนวันที่บัญชีหรือเบอร์นี้เปิดใช้งาน)
- transaction_count (จำนวนธุรกรรมที่ทำผ่านบัญชีหรือเบอร์นี้)
- avg_transaction_amount (ยอดเฉลี่ยของธุรกรรม)
- used_in_known_cases (เคยปรากฏในคดีหรือข่าวมาก่อน)
- is_scam (เป็นมิจฉาชีพหรือไม่)
ขั้นตอนที่ 1 mport Libraries
ขั้นตอนที่ 2 Load Dataset
ตัวอย่างของข้อมูลสามารถโหลดได้ตามนี้เลย
https://raw.githubusercontent.com/kessarin22/datascampass/refs/heads/main/scampass.csv
โหลดข้อมูลจากไฟล์ CSV ชื่อ scampass.csv และ แสดง 5 แถวแรกของข้อมูลแสดงข้อมูล 5 แถวแรก
ขั้นตอนที่ 3 ตรวจสอบข้อมูลเบื้องต้น
เราจะดูขนาดข้อมูล และรายละเอียดของคอลัมน์ พร้อมทั้งดูว่าข้อมูลในคอลัมน์ is_scam มีจำนวน class เท่าไร เพื่อให้แน่ใจว่าข้อมูลสะอาด พร้อมใช้งาน และ เข้าใจข้อมูลที่เรากำลังจะวิเคราะห์
จะสังเกตุเห็นว่า class ของเราไม่สมดุล เพราะ class 0 1มีเยอะกว่า class 1 เราจะไปแก้ปัญหากันที่ขั้นตอนที่ ....
ขั้นตอนที่ 4 แยก Features และ Target
X คือ features ข้อมูลจริงที่ใช้ในการทำนาย ก็คือทุกคอลัมน์ยกเว้น is_scam
y คือ target สิ่งที่ต้องการทำนาย คือคอลัมน์ is_scam
ขั้นตอนที่ 5 แบ่งข้อมูล train/test
เราจะแบ่งข้อมูล 80% สำหรับ train, 20% สำหรับ test และใช้ random_state=42 เพื่อให้ผลเหมือนกันทุกครั้งที่รัน
ขั้นตอนที่ 6 สร้างโมเดล Logistic Regression
เราจะแก้ปัญหาข้อมูล class ไม่สมดุลด้วยการใช้ class_weight='balanced' โมเดลจะชดเชยให้ class ที่น้อยมีน้ำหนักมากขึ้น ถ้าเราไม่แก้ปัญหา class ไม่สมดุล โมเดลอาจทายแต่ class 0 แล้วได้ accuracy สูง แต่ไม่ได้ช่วยให้ตรวจจับมิจฉาชีพได้จริง
ต่อมาก็มาทำนายข้อมูล test กันเลย
ขั้นตอนที่ 8 แสดง Confusion Matrix
เราจะสร้าง confusion matrix เพื่อเปรียบเทียบผลจริงกับผลทำนาย และใช้ seaborn วาดเป็น heatmap เพื่อดูผลที่ชัดเจน
ผลลัพธ์
เราจะอธิบายผลลัพธ์แต่ละค่า โดยเรียงจากช่องซ้ายบนสุดไปขวา ดูจากเลขในช่อง
True Negative (TN) = 2 → ทำนายว่าไม่เป็นมิจฉาชีพ แต่ไม่เป็นจริง
False Positive (FP) = 1 → ทำนายว่าเป็นมิจฉาชีพ แต่ไม่ใช่
False Negative (FN) = 1 → ทำนายว่าไม่เป็นมิจฉาชีพ แต่จริง ๆ เป็น
True Positive (TP) = 8 → ทำนายว่าเป็นมิจฉาชีพ และเป็นจริง
แสดงให้เห็นว่าโมเดลสามารถ จับ scam ได้แม่นยำสูง (TP = 8 จาก 9 เคส)
ขั้นตอนที่ 9 แสดงผลลัพธ์
จะเห็นว่า ค่า Accuracy = 0.917 โมเดลสามารถจับมิจฉาชีพได้แม่นยำสูง
สุดท้ายเราจะมาดูว่า feature (ข้อมูลส่วนไหน) ส่งผลต่อการทำนายมากที่สุด โดยการแสดง Coefficients ของแต่ละ Feature
ผลลัพธ์ก็คือ เบอร์จากต่างประเทศ เพราะมีค่า Coefficients สูงที่สุด
สรุปผล
บทความนี้ได้แสดงตัวอย่างการทำ Logistic Regression ด้วยข้อมูล 2 ชุด ได้แก่ ชุดข้อมูล Iris และ Scampass ซึ่งทั้งสองชุดข้อมูลนี้ถูกเลือกมาเพื่อเน้นการแยกประเภท (classification) และแสดงให้เห็นถึงวิธีการใช้ Logistic Regression ในการทำนายและแยกประเภทข้อมูลตามลักษณะต่าง ๆ
การใช้ Logistic Regression ในทั้งสองชุดข้อมูลนี้ทำให้เราเห็นถึงความยืดหยุ่นและความสามารถในการทำงานของโมเดลในการแยกประเภทข้อมูลที่มีคุณลักษณะหลากหลาย อีกทั้งยังสามารถนำไปประยุกต์ใช้กับชุดข้อมูลที่หลากหลายประเภทในงานด้านการจำแนกประเภทต่อไปได้
referent : https://github.com/aero971/Logestic_Regression_on_iris_dataset