อัลกอริทึมการจำแนก - Naïve Bayes
ข้อมูลเบื้องต้นเกี่ยวกับNaïve Bayes Algorithm
อัลกอริทึมNaïve Bayes เป็นเทคนิคการจำแนกตามการใช้ทฤษฎีบทของ Bayes โดยมีสมมติฐานที่ชัดเจนว่าตัวทำนายทั้งหมดเป็นอิสระซึ่งกันและกัน กล่าวง่ายๆคือสมมติฐานคือการปรากฏตัวของคุณลักษณะในคลาสนั้นเป็นอิสระจากการมีอยู่ของคุณสมบัติอื่น ๆ ในคลาสเดียวกัน ตัวอย่างเช่นโทรศัพท์อาจถือได้ว่าฉลาดหากมีหน้าจอสัมผัสสิ่งอำนวยความสะดวกอินเทอร์เน็ตกล้องถ่ายรูปที่ดีเป็นต้นแม้ว่าคุณสมบัติทั้งหมดนี้จะขึ้นอยู่กับกันและกัน แต่ก็มีส่วนร่วมอย่างอิสระต่อความเป็นไปได้ที่โทรศัพท์จะเป็นสมาร์ทโฟน
ในการจำแนกแบบเบย์ความสนใจหลักคือการค้นหาความน่าจะเป็นด้านหลังนั่นคือความน่าจะเป็นของป้ายกำกับที่มีคุณสมบัติที่สังเกตได้บางประการ (|) ด้วยความช่วยเหลือของทฤษฎีบทเบย์เราสามารถแสดงสิ่งนี้ในรูปแบบเชิงปริมาณได้ดังนี้ -
$$ P (L | คุณสมบัติ) = \ frac {P (L) P (คุณสมบัติ | L)} {()} $$ที่นี่ (|) คือความน่าจะเป็นหลังของคลาส
() คือความน่าจะเป็นก่อนหน้าของคลาส
(|) คือความเป็นไปได้ซึ่งเป็นความน่าจะเป็นของตัวทำนายที่กำหนด
() คือความน่าจะเป็นก่อนหน้าของตัวทำนาย
การสร้างแบบจำลองโดยใช้Naïve Bayes ใน Python
ไลบรารี Python Scikit learn เป็นไลบรารีที่มีประโยชน์ที่สุดที่ช่วยให้เราสร้างแบบจำลองNaïve Bayes ใน Python เรามีโมเดลNaïve Bayes สามประเภทต่อไปนี้ภายใต้ Scikit Learn Python library -
Gaussian Naïve Bayes
เป็นลักษณนามNaïve Bayes ที่ง่ายที่สุดโดยมีข้อสันนิษฐานว่าข้อมูลจากแต่ละฉลากมาจากการแจกแจงแบบเกาส์เซียนอย่างง่าย
Multinomial Naïve Bayes
ลักษณนามNaïve Bayes ที่มีประโยชน์อีกตัวหนึ่งคือ Multinomial Naïve Bayes ซึ่งถือว่าคุณสมบัตินั้นมาจากการแจกแจงแบบพหุนามอย่างง่าย Naïve Bayes แบบนี้เหมาะสมที่สุดสำหรับคุณสมบัติที่แสดงถึงการนับไม่ต่อเนื่อง
Bernoulli Naïve Bayes
แบบจำลองที่สำคัญอีกแบบหนึ่งคือ Bernoulli Naïve Bayes ซึ่งคุณสมบัติต่างๆจะถือว่าเป็นไบนารี (0s and 1s) การจำแนกข้อความด้วยโมเดล 'ถุงคำ' อาจเป็นแอปพลิเคชันของ Bernoulli Naïve Bayes
ตัวอย่าง
ขึ้นอยู่กับชุดข้อมูลของเราเราสามารถเลือกแบบจำลองNaïve Bayes ที่อธิบายข้างต้นได้ ที่นี่เรากำลังใช้แบบจำลอง Gaussian Naïve Bayes ใน Python -
เราจะเริ่มต้นด้วยการนำเข้าที่จำเป็นดังต่อไปนี้ -
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
ตอนนี้โดยใช้ฟังก์ชัน make_blobs () ของ Scikit learn เราสามารถสร้างจุดที่มีการแจกแจงแบบเกาส์ได้ดังนี้ -
from sklearn.datasets import make_blobs
X, y = make_blobs(300, 2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer');
ต่อไปสำหรับการใช้โมเดล GaussianNB เราต้องนำเข้าและสร้างวัตถุดังต่อไปนี้ -
from sklearn.naive_bayes import GaussianNB
model_GBN = GaussianNB()
model_GNB.fit(X, y);
ตอนนี้เราต้องทำการทำนาย สามารถทำได้หลังจากสร้างข้อมูลใหม่แล้วดังนี้ -
rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model_GNB.predict(Xnew)
ต่อไปเรากำลังวางแผนข้อมูลใหม่เพื่อหาขอบเขต -
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')
lim = plt.axis()
plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='summer', alpha=0.1)
plt.axis(lim);
ตอนนี้ด้วยความช่วยเหลือของโค้ดบรรทัดต่อไปนี้เราสามารถค้นหาความน่าจะเป็นหลังของป้ายกำกับที่หนึ่งและสองได้ -
yprob = model_GNB.predict_proba(Xnew)
yprob[-10:].round(3)
เอาต์พุต
array([[0.998, 0.002],
[1. , 0. ],
[0.987, 0.013],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[0. , 1. ],
[0.986, 0.014]]
)
ข้อเสียข้อดี
ข้อดี
ต่อไปนี้เป็นข้อดีบางประการของการใช้ลักษณนามของNaïve Bayes -
การจำแนกประเภทNaïve Bayes ทำได้ง่ายและรวดเร็ว
มันจะมาบรรจบกันเร็วกว่ารูปแบบการแยกแยะเช่นการถดถอยโลจิสติก
ต้องใช้ข้อมูลการฝึกอบรมน้อย
มีลักษณะที่สามารถปรับขนาดได้สูงหรือจะปรับขนาดเชิงเส้นด้วยจำนวนตัวทำนายและจุดข้อมูล
สามารถคาดการณ์ความน่าจะเป็นและสามารถจัดการข้อมูลต่อเนื่องและไม่ต่อเนื่องได้
อัลกอริธึมการจำแนกประเภทNaïve Bayes สามารถใช้สำหรับปัญหาการจำแนกแบบไบนารีและแบบหลายคลาสได้
จุดด้อย
ต่อไปนี้เป็นข้อเสียบางประการของการใช้ตัวแยกประเภทของNaïve Bayes -
ข้อเสียที่สำคัญที่สุดอย่างหนึ่งของการจำแนกประเภทของNaïve Bayes คือความเป็นอิสระของคุณลักษณะที่แข็งแกร่งเพราะในชีวิตจริงแทบจะเป็นไปไม่ได้เลยที่จะมีชุดคุณสมบัติที่ไม่ขึ้นต่อกัน
อีกปัญหาหนึ่งเกี่ยวกับการจำแนกประเภทNaïve Bayes คือ 'ความถี่ศูนย์' ซึ่งหมายความว่าหากตัวแปรจัดหมวดหมู่มีหมวดหมู่ แต่ไม่พบในชุดข้อมูลการฝึกโมเดล Na modelve Bayes จะกำหนดความน่าจะเป็นเป็นศูนย์ให้และจะไม่สามารถสร้าง คาดการณ์.
การประยุกต์ใช้การจำแนกประเภทNaïve Bayes
ต่อไปนี้เป็นแอพพลิเคชั่นทั่วไปของการจำแนกประเภทNaïve Bayes -
Real-time prediction - เนื่องจากการใช้งานง่ายและการคำนวณที่รวดเร็วจึงสามารถใช้ในการทำนายแบบเรียลไทม์
Multi-class prediction - อัลกอริธึมการจำแนกNaïve Bayes สามารถใช้เพื่อทำนายความน่าจะเป็นหลังของตัวแปรเป้าหมายหลายคลาส
Text classification- เนื่องจากคุณสมบัติของการทำนายหลายชั้นอัลกอริทึมการจำแนกประเภทNaïve Bayes จึงเหมาะอย่างยิ่งสำหรับการจัดประเภทข้อความ นั่นคือเหตุผลที่ใช้ในการแก้ปัญหาเช่นการกรองสแปมและการวิเคราะห์ความรู้สึก
Recommendation system - นอกเหนือจากอัลกอริธึมเช่นการกรองร่วมกันแล้วNaïve Bayes ยังสร้างระบบคำแนะนำซึ่งสามารถใช้เพื่อกรองข้อมูลที่มองไม่เห็นและทำนายสภาพอากาศว่าผู้ใช้ต้องการทรัพยากรที่ระบุหรือไม่