อัลกอริทึมการจำแนก - 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 ยังสร้างระบบคำแนะนำซึ่งสามารถใช้เพื่อกรองข้อมูลที่มองไม่เห็นและทำนายสภาพอากาศว่าผู้ใช้ต้องการทรัพยากรที่ระบุหรือไม่