• 大小: 12KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: C/C++
  • 标签: 机器学习  

资源简介

C++实现朴素贝叶斯分类器, 代码干净, 整洁, 有示例, 有注释, 具有良好的封装性, 可直接迁移使用

资源截图

代码片段和文件信息


#include “LBayesClassifier.h“

#include 

#include 
using std::map;
#include 
using std::vector;

/// @brief 贝叶斯分类器虚基类
class CBayesClassifier
{
public:
    /// @brief 析构函数
    virtual ~CBayesClassifier() = 0{}

    /// @brief 训练模型
    /// @param[in] problem 贝叶斯问题
    /// @return 成功返回true 失败返回false 参数错误的情况下会返回false
    virtual bool TrainModel(IN const LBayesProblem& problem) = 0;

    /// @brief 使用训练好的模型进行预测
    ///  
    /// 请保证需要预测的样本的特征长度和训练样本的特征长度相同
    /// @param[in] sample 需要预测的样本
    /// @param[out] pClassValue 存储预测结果 不能为0
    /// @return 成功预测返回true 失败返回false 参数错误或模型未训练的情况下会返回false
    virtual bool Predict(IN const LBayesMatrix& sample OUT int* pClassValue) = 0;
};

/// @brief 特征类别计数类
class CFeatureClassCount
{
public:
    /// @brief 将指定特征的指定的类别计数加1
    /// @param[in] featureValue 特征值
    /// @param[in] classValue 类别值
    void CountInc(IN int featureValue IN int classValue)
    {
        m_featureClassMap[featureValue][classValue]++;
    }

    /// @brief 获取指定特征的指定类别的计数
    /// @param[in] featureValue 特征值
    /// @param[in] classValue 类别值
    /// @return 类别的计数
    unsigned int GetCount(IN int featureValue IN int classValue)
    {
        return m_featureClassMap[featureValue][classValue];
    }

    /// @brief 获取指定特征的总计数
    /// @param[in] featureValue 特征值
    /// @return 特征值得总计数
    unsigned int GetTotalCount(IN int featureValue)
    {
        auto classMap = m_featureClassMap[featureValue];
        unsigned int totalCount = 0;
        for (auto iter = classMap.begin(); iter != classMap.end(); iter++)
        {
            totalCount += iter->second;
        }

        return totalCount;
    }

    /// @brief 清除数据
    void Clear()
    {
        m_featureClassMap.clear();
    }

private:
    map> m_featureClassMap; ///< 特征映射 <特征值 <类别值 类别计数>>
};

/// @brief 贝叶斯分类器(离散)实现类
class CBayesClassifierDiscrete : public CBayesClassifier
{    
public:
    /// @brief 构造函数
    CBayesClassifierDiscrete()
    {
        m_featureCount = 0;
        m_sampleCount = 0;
    }

    /// @brief 析构函数
    ~CBayesClassifierDiscrete()
    {

    }

    /// @brief 训练模型
    /// @param[in] problem 贝叶斯问题
    /// @return 成功返回true 失败返回false 参数错误的情况下会返回false
    virtual bool TrainModel(IN const LBayesProblem& problem)
    {
        // 进行参数检查
        if (problem.XMatrix.ColumnLen < 1)
            return false;
        if (problem.XMatrix.RowLen < 1)
            return false;
        if (problem.YVector.ColumnLen != 1)
            return false;
        if (problem.XMatrix.RowLen != problem.YVector.RowLen)
            return false;

        m_sampleClassCount.clear();
        m_featureClassCountList.clear();
        m_sampleCount = problem.XMatrix.RowLen;
        m_featureCount = problem.XMatrix.ColumnLen;
        for (unsigned int i = 0; i < m_featureCount; i++)
        {
            m_featureClassCount

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      14429  2015-12-29 16:14  NativeBayes\LBayesClassifier.cpp

     文件       3612  2016-03-17 10:57  NativeBayes\LBayesClassifier.h

     文件      14193  2016-02-29 15:00  NativeBayes\LMatrix.h

     文件       1245  2016-03-17 10:57  NativeBayes\main.cpp

     文件        888  2016-03-17 10:56  NativeBayes\NativeBayes.sln

    ..A..H.     12800  2016-03-17 10:58  NativeBayes\NativeBayes.suo

     文件       3393  2016-03-17 10:57  NativeBayes\NativeBayes.vcxproj

     文件       1280  2016-03-17 10:57  NativeBayes\NativeBayes.vcxproj.filters

     文件        143  2016-03-17 10:56  NativeBayes\NativeBayes.vcxproj.user

     目录          0  2016-03-17 10:58  NativeBayes

----------- ---------  ---------- -----  ----

                51983                    10


评论

共有 条评论