快捷搜索:  汽车  科技

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES缺陷部件来自第2机械装置的概率是多少?如果工厂每小时生产50个扳手,则扳手来自m1的概率为30/50,而m2的概率为20/50。找到缺陷件的概率是1%,并且在所有缺陷部件中,50%来自m1,而来自m2的50%。如果我们只采用有缺陷的部件,那么来自m1的可能性是50%,而m2也是如此。机器2生产故障扳手的概率是多少?要回答这个问题,我们将在这里使用的规则称为贝叶斯定理:我们知道m1每小时可生产30个扳手,每小时可生产20个扳手。此外,在所有生产的部件中,1%是有缺陷的,并且在所有缺陷部件中,50%来自m1,50%来自m2。从m2生产的零件有缺陷的概率是多少?

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(1)

在机器学习中,朴素贝叶斯分类器是一组简单的“概率分类器”,基于贝叶斯定理,特征之间有很强的(naive)独立性假设。

朴素贝叶斯分类器是高度可扩展的,在一个学习问题中,要求在变量(特性/预测器)的数量中有许多线性的参数。最大似然训练可以通过评估一个封闭的表达式来完成,它需要线性时间,而不是像许多其他类型的分类器那样使用昂贵的迭代逼近。

在统计学和计算机科学文献中,朴素贝叶斯模型以各种名称而闻名,包括简单贝叶斯和独立贝叶斯。所有这些名称都引用了贝叶斯定理在分类器决策规则中的使用,但朴素贝叶斯并不是贝叶斯方法。

举一个实际的例子,我们考虑一个生产扳手的工厂。假设我们正在为工厂做一些分析,每天通过2台机器生产一定数量的扳手,并且在一天结束时我们有很多扳手,我们必须检测有缺陷的扳手。

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(2)

机器2生产故障扳手的概率是多少?要回答这个问题,我们将在这里使用的规则称为贝叶斯定理:

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(3)

我们知道m1每小时可生产30个扳手,每小时可生产20个扳手。此外,在所有生产的部件中,1%是有缺陷的,并且在所有缺陷部件中,50%来自m1,50%来自m2。

从m2生产的零件有缺陷的概率是多少?

如果工厂每小时生产50个扳手,则扳手来自m1的概率为30/50,而m2的概率为20/50。找到缺陷件的概率是1%,并且在所有缺陷部件中,50%来自m1,而来自m2的50%。如果我们只采用有缺陷的部件,那么来自m1的可能性是50%,而m2也是如此。

缺陷部件来自第2机械装置的概率是多少?

如果我们应用贝叶斯定理并使用这些数字,我们将得到:

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(4)

现在让我们看另一个例子,假设我们生产1000个扳手,因此我们知道400来自m2,1%是有缺陷的。在1000把扳手中,我们有10件有缺陷的零件,其中50%来自m2。

机器2有缺陷的零件百分比是多少?好吧它的5/400 = 0.0125!

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(5)

这给了我们与第一个例子相同的结果。但为什么我们不能马上做这个操作呢?答案可能是多重的,但潜在的假设是计算所有扳手的操作可能太耗时。

现在我们如何将这个特定应用于机器学习?

这里我们把数据点分为两类:红色和绿色。我们可以假设红色的点是人们走路去上班,绿色的点是开车去上班。

发生了什么事情我们添加了一个新的obervation,我们如何对它进行分类?

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(6)

在这种情况下,我们将使用贝叶斯定理,并将其应用于两个类别并计算相应的概率并比较2个值。显然,我们会将点数分配给概率最高的类别。

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(7)

我们可以通过考虑步行的人是x的可能性来计算这些值并计算后验概率。然后我们迭代开车的过程:

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(8)

然后我们比较2个值:

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(9)

第一步是计算P(Walks),由公式给出:

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(10)

在第2步中,我们计算P(X),它是一个固定值,取决于我们考虑的样本范围:

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(11)

在第3步中,我们计算P(X | Walks),它只考虑那些步行上班P(X)的人:

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(12)

最后我们得到P(Walks | X):

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(13)

然后我们可以为开车上班类别迭代相同的过程:

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(14)

为什么我们把这个算法叫做朴素算法???因为贝叶斯模型需要一些独立的假设,而这些假设通常是不正确的!!P(X)总是一样的我们可以把它从公式中删除如果我们想比较两个值

python 学习算法和数据结构,机器学习Python实现NAIVEBAYES(15)

最后,如果我们的模型中有两个以上的类别,会发生什么?我们必须至少进行n-1次计算。

要在Python上实现Naive Bayes分类器,我们必须通过sklearn.naive_bayes库和GaussianNB类的帮助创建我们的分类器,并使其适合我们的训练集。然后像往常一样,我们创建我们的混淆矩阵并可视化我们的训练集和测试集结果:

# Data Preprocessing

# Importing the Library

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

# Importing the dataset

dataset= pd.read_csv('Data.csv')

X = dataset.iloc[: [2 3]].values

Y = dataset.iloc[: 4].values

# Feature Scaling

from sklearn.preprocessing import StandardScaler

sc_X = StandardScaler()

X_train = sc_X.fit_transform(X_train)

X_test = sc_X.transform(X_test)

# Fitting Classifier to the Training set

from sklearn.naive_bayes import GaussianNB

classifier = GaussianNB()

classifier.fit(X_train y_train)

# predicting the Test set results

y_pred = classifier.predict(X_test)

# Visualising the Training set results

from matplotlib.colors import ListedColormap

X_set Y_set = X_train y_train

X1 X2 = np.meshgrid(np.arrange(start = X_set[: 0].min() - 1 stop = X_set[: 0].max() 1 step = 0.01)

np.arrange(start = X_set[: 1].min() - 1 stop = X_set[: 1].max() 1 step = 0.01)

plt.contourf(X1 X2 classifier.predict(np.array([X1.rave() X2.ravel()]).T).reshape(X1.shape)

alpha = 0.75 cmap = ListedColormap(('red' 'Green')))

plt.xlim(X1.min() X1.max())

plt.ylim(X1.min() X1.max())

for i j in emunerate(np.unique(y_set)):

plt.scatter(X_set[y_set == j 0] X_set[y_set == j 1]

c = ListedColormap(('red' 'green'))(i) label = j)

plt.title('Naive Bayes (Training set)')

plt.xlabel('Age')

plt.ylabel('Estimated Salary')

plt.legend()

plt.show()

# Visualising the Test set results

from matplotlib.colors import ListedColormap

X_set Y_set = X_train y_train

X1 X2 = np.meshgrid(np.arrange(start = X_set[: 0].min() - 1 stop = X_set[: 0].max() 1 step = 0.01)

np.arrange(start = X_set[: 1].min() - 1 stop = X_set[: 1].max() 1 step = 0.01)

plt.contourf(X1 X2 classifier.predict(np.array([X1.rave() X2.ravel()]).T).reshape(X1.shape)

alpha = 0.75 cmap = ListedColormap(('red' 'Green')))

plt.xlim(X1.min() X1.max())

plt.ylim(X1.min() X1.max())

for i j in emunerate(np.unique(y_set)):

plt.scatter(X_set[y_set == j 0] X_set[y_set == j 1]

c = ListedColormap(('red' 'green'))(i) label = j)

plt.title('Naive Bayes (Test set)')

plt.xlabel('Age')

plt.ylabel('Estimated Salary')

plt.legend()

plt.show()

猜您喜欢: