zoukankan      html  css  js  c++  java
  • 机器学习-贝叶斯数据集

     

    #朴素贝叶斯定力

    import numpy as np
    import pandas as pd
    import matplotlib
    from matplotlib import pyplot as plt
    %matplotlib inline
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    data = pd.read_csv('./010-data_multivar.csv',header=None)
    #拆分数据
    dataset_X,dataset_y = data.iloc[:,:-1],data.iloc[:,-1]
    # print(dataset_X.head())
    dataset_X = dataset_X.values
    dataset_y = dataset_y.values
    # print(dataset_y)
    #将标签去重
    classes = list(set(dataset_y))
    print(classes)

    
    

    #数据集可视化

    def visual_2D_dataset(dataset_X,dataset_y):
        '''将二维数据集dataset_X和对应的类别dataset_y显示在散点图中'''
        assert dataset_X.shape[1]==2,'only support dataset with 2 features'
        plt.figure()
        classes=list(set(dataset_y)) 
        markers=['.',',','o','v','^','<','>','1','2','3','4','8'
                 ,'s','p','*','h','H','+','x','D','d','|']
        colors=['b','c','g','k','m','w','r','y']
        for class_id in classes:
            one_class=np.array([feature for (feature,label) in 
                       zip(dataset_X,dataset_y) if label==class_id])
            plt.scatter(one_class[:,0],one_class[:,1],marker=np.random.choice(markers,1)[0],
                        c=np.random.choice(colors,1)[0],label='class_'+str(class_id))
        plt.legend()
    
    visual_2D_dataset(dataset_X,dataset_y)
    
    

      

    # 将分类器绘制到图中

    def plot_classifier(classifier, X, y):
        x_min, x_max = min(X[:, 0]) - 1.0, max(X[:, 0]) + 1.0 # 计算图中坐标的范围
        y_min, y_max = min(X[:, 1]) - 1.0, max(X[:, 1]) + 1.0
        step_size = 0.01 # 设置step size
        x_values, y_values = np.meshgrid(np.arange(x_min, x_max, step_size), np.arange(y_min, y_max, step_size))
        # 构建网格数据
        mesh_output = classifier.predict(np.c_[x_values.ravel(), y_values.ravel()])
        mesh_output = mesh_output.reshape(x_values.shape) 
        plt.figure()
        plt.pcolormesh(x_values, y_values, mesh_output, cmap=plt.cm.gray)
        plt.scatter(X[:, 0], X[:, 1], c=y, s=80, edgecolors='black', linewidth=1, cmap=plt.cm.Paired)
        # specify the boundaries of the figure
        plt.xlim(x_values.min(), x_values.max())
        plt.ylim(y_values.min(), y_values.max())
    
        # specify the ticks on the X and Y axes
        plt.xticks((np.arange(int(min(X[:, 0])-1), int(max(X[:, 0])+1), 1.0)))
        plt.yticks((np.arange(int(min(X[:, 1])-1), int(max(X[:, 1])+1), 1.0)))
        plt.show()
     
    from sklearn.naive_bayes import GaussianNB
    gaussian = GaussianNB()
    gaussian.fit(dataset_X,dataset_y)
    # 预测
    y_pre = gaussian.predict(dataset_X)
    # print(y_pre)
    # 统计判断预测结果和真实值得匹配数量
    correct_count = (dataset_y == y_pre).sum()
    # print(correct_count)
    # print(type(dataset_y))
    # print(dataset_y == y_pre)
    # 调用绘图函数
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    plot_classifier(gaussian,dataset_X,dataset_y)
    plot_classifier(gaussian,dataset_X,y_pre)
    # 预习分类模型评估指标
     

      

    #多项式朴素贝叶斯模型

    from sklearn.naive_bayes import MultinomialNB
    from sklearn.preprocessing import MinMaxScaler
    #范围缩放
    scalar = MinMaxScaler(feature_range=(10,20))
    dataset_X = scalar.fit_transform(dataset_X)
    # print(dataset_X)
    # 要求所有特征必须是非负数,否则没法训练
    mul_nb = MultinomialNB()
    mul_nb.fit(dataset_X,dataset_y)
    
    print(np.r_[dataset_X,dataset_y.reshape(-1,2)]) #row方向合并
    print(np.c_[dataset_X,dataset_y])  #colume:列向合并
    y_pre = mul_nb.predict(dataset_X) #预测
    print(y_pre)
    plot_classifier(mul_nb,dataset_X,dataset_y)


     

      

    #伯努利贝叶斯模型

    from sklearn.naive_bayes import BernoulliNB
    clf = BernoulliNB()
    clf.fit(dataset_X,dataset_y)
    y_pre=clf.predict(dataset_X)
    print(y_pre)
    plot_classifier(clf,dataset_X,dataset_y)
    
    

      

  • 相关阅读:
    git 教程
    gruntjs
    arm linux
    2021最佳迎接元旦的方式是什么!程序员:中国新冠疫苗上市!
    元旦表白神器!C语言实现浪漫烟花表白(有背景音乐+示例源码)
    大学期间,为啥我能学好C语言?只因我做到了这五点!
    为什么都说代码改变世界?是因为这五位程序员创造了未来!
    C++丨常见的四种求最大公约数方法!赶紧收藏!
    【腾讯C++面试题】如何才能获得腾讯的offer?掌握这20道终身受益!
    惊呆了!字节跳动成唯一上榜的中国公司!它是如何做到脱颖而出的?
  • 原文地址:https://www.cnblogs.com/junjun511/p/10679396.html
Copyright © 2011-2022 走看看