程序笔记   发布时间:2022-07-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了实验三大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_801_9@
个人班级 机器学习实验-计算机18级
实验题目 朴素贝叶斯算法及其应用
姓名 黎宇
学号 3180701141

实验目的 1.理解朴素贝叶斯算法原理,掌握朴素贝叶斯算法框架; 2.掌握常见的高斯模型,多项式模型和伯努利模型; 3.能根据不同的数据类型,选择不同的概率模型实现朴素贝叶斯算法; 4.针对特定应用场景及数据,能应用朴素贝叶斯解决实际问题。

实验要求 1.实现高斯朴素贝叶斯算法。 2.熟悉sklearn库中的朴素贝叶斯算法; 3.针对iris数据集,应用sklearn的朴素贝叶斯算法进行类别预测。 4.针对iris数据集,利用自编朴素贝叶斯算法进行类别预测。

实验报告内容 1.对照实验内容,撰写实验过程、算法及测试结果; 2.代码规范化:命名规则、注释; 3.分析核心算法的复杂度; 4.查阅文献,讨论各种朴素贝叶斯算法的应用场景; 5.讨论朴素贝叶斯算法的优缺点。

【帅的不谈】葛梦海(2743563198) 2021/6/27 19:14:31 实验代码 1.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.datasets import load_iris
from sklearn.model_SELEction import Train_test_split
from collections import Counter
import math

# data
def create_data():
    iris = load_iris()
    df = pd.DataFrame(iris.data, columns=iris.feature_names)
    df['label'] = iris.target
    df.columns = [
        'sepal length', 'sepal width', 'petal length', 'petal width', 'label'
    ]
    data = np.array(df.iloc[:100, :])
    # print(data)
    return data[:, :-1], data[:, -1]

X, y = create_data()
X_Train, X_test, y_Train, y_test = Train_test_split(X, y, test_size=0.3)
X_test[0], y_test[0]

class NaiveBayes:
    def __init__(self):
        self.model = None
    # 数学期望
    @staticmethod
    def mean(X):
        return sum(X) / float(len(X))
    # 标准差(方差)
    def stdev(self, X):
        avg = self.mean(X)
        return math.sqrt(sum([pow(x - avg, 2) for x in X]) / float(len(X)))
    # 概率密度函数
    def gaussian_probability(self, x, mean, stdev):
        exponent = math.exp(-(math.pow(x - mean, 2) /
                              (2 * math.pow(stdev, 2))))
        return (1 / (math.sqrt(2 * math.pi) * stdev)) * exponent
    # 处理X_Train
    def summarize(self, Train_data):
        summaries = [(self.mean(i), self.stdev(i)) for i in zip(*Train_data)]
        return summaries
    # 分类别求出数学期望和标准差
    def fit(self, X, y):
        labels = list(set(y))
        data = {label: [] for label in labels}
        for f, label in zip(X, y):
            data[label].append(f)
        self.model = {
            label: self.summarize(value)
            for label, value in data.items()
        }
        return 'gaussiAnnB Train done!'
    # 计算概率
    def calculate_probabilities(self, input_data):
        # summaries:{0.0: [(5.0, 0.37),(3.42, 0.40)], 1.0: [(5.8, 0.449),(2.7, 0.27)]}
        # input_data:[1.1, 2.2]
        probabilities = {}
        for label, value in self.model.items():
            probabilities[label] = 1
            for i in range(len(value)):
                mean, stdev = value[i]
                probabilities[label] *= self.gaussian_probability(
                    input_data[i], mean, stdev)
        return probabilities
    # 类别
    def preDict(self, X_test):
        # {0.0: 2.9680340789325763e-27, 1.0: 3.5749783019849535e-26}
        label = sorted(
            self.calculate_probabilities(X_test).items(),
            key=lambda x: x[-1])[-1][0]
        return label
    def score(self, X_test, y_test):
        right = 0
        for X, y in zip(X_test, y_test):
            label = self.preDict(X)
            if label == y:
                right += 1
        return right / float(len(X_test))
@H_536_47@model = NaiveBayes()
@H_536_47@model.fit(X_Train, y_Train)

print(model.preDict([4.4, 3.2, 1.3, 0.2]))

model.score(X_test, y_test)
from sklearn.naive_bayes import GaussiAnnB
clf = GaussiAnnB()
clf.fit(X_Train, y_Train)
clf.score(X_test, y_test)
clf.preDict([[4.4, 3.2, 1.3, 0.2]])
from sklearn.naive_bayes import BernoulliNB, MulTinomialNB # 伯努利模型和多项式模型

运行截图 1.

实验三

2.

实验三

3.

实验三

4.

实验三

5.

实验三

实验三

6.

实验三

7.

实验三

8.

实验三

9.

实验三

10.

实验三

11.

实验三

12.

实验三

13.

实验三

五、实验小结 通过本次实验,学习了了朴素贝叶斯算法原理,并且实现了朴素贝叶斯算法。朴素贝叶斯算法对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批的去增量训练。

大佬总结

以上是大佬教程为你收集整理的实验三全部内容,希望文章能够帮你解决实验三所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。