首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Encog框架的垃圾邮件过滤示例

使用Encog框架的垃圾邮件过滤示例
EN

Stack Overflow用户
提问于 2014-02-11 14:50:58
回答 1查看 689关注 0票数 1

我正在寻找一个关于如何使用Encog框架创建一个简单的垃圾邮件过滤/分类或集群应用程序的例子。我还没能在谷歌上找到任何东西。

我还购买了Jeff的书“用Encog3编程C#中的神经网络”(),但我找不到这类应用程序的任何示例。

谁能提供一个简单的应用程序的任何信息,如何根据其主题和正文将电子邮件归类为垃圾邮件?

编辑:我已经看过如何用实现这个功能的方法了,但是我想问的是,有人能提供任何Encog + C#关于如何创建垃圾邮件过滤/分类应用程序的具体例子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-04 05:10:48

大多数垃圾邮件过滤器使用一种贝叶斯分类,最流行的,天真的贝叶斯分类。以下是一些无需任何附加框架就可以使用的代码。

代码语言:javascript
复制
public void TrainClassifier(DataTable table)
{
dataSet.Tables.Add(table);

//table
DataTable GaussianDistribution = dataSet.Tables.Add("Gaussian");
GaussianDistribution.Columns.Add(table.Columns[0].ColumnName);

//columns
for (int i = 1; i < table.Columns.Count; i++)
{
    GaussianDistribution.Columns.Add(table.Columns[i].ColumnName + "Mean");
    GaussianDistribution.Columns.Add(table.Columns[i].ColumnName + "Variance");
}

//calc data
var results = (from myRow in table.AsEnumerable()
               group myRow by myRow.Field<string>(table.Columns[0].ColumnName) into g
               select new { Name = g.Key, Count = g.Count() }).ToList();

for (int j = 0; j < results.Count; j++)
{
    DataRow row = GaussianDistribution.Rows.Add();
    row[0] = results[j].Name;

    int a = 1;
    for (int i = 1; i < table.Columns.Count; i++)
    {
        row[a] = Helper.Mean(SelectRows(table, i, string.Format("{0} = '{1}'", 
                             table.Columns[0].ColumnName, results[j].Name)));
        row[++a] = Helper.Variance(SelectRows(table, i, 
                   string.Format("{0} = '{1}'", 
                   table.Columns[0].ColumnName, results[j].Name)));
        a++;
    }
}

}

代码语言:javascript
复制
public string Classify(double[] obj)
{
Dictionary<string,> score = new Dictionary<string,>();

var results = (from myRow in dataSet.Tables[0].AsEnumerable()
               group myRow by myRow.Field<string>(
                     dataSet.Tables[0].Columns[0].ColumnName) into g
               select new { Name = g.Key, Count = g.Count() }).ToList();

for (int i = 0; i < results.Count; i++)
{
    List<double> subScoreList = new List<double>();
    int a = 1, b = 1;
    for (int k = 1; k < dataSet.Tables["Gaussian"].Columns.Count; k = k + 2)
    {
        double mean = Convert.ToDouble(dataSet.Tables["Gaussian"].Rows[i][a]);
        double variance = Convert.ToDouble(dataSet.Tables["Gaussian"].Rows[i][++a]);
        double result = Helper.NormalDist(obj[b - 1], mean, Helper.SquareRoot(variance));
        subScoreList.Add(result);
        a++; b++;
    }

    double finalScore = 0;
    for (int z = 0; z < subScoreList.Count; z++)
    {
        if (finalScore == 0)
        {
            finalScore = subScoreList[z];
            continue;
        }

        finalScore = finalScore * subScoreList[z];
    }

    score.Add(results[i].Name, finalScore * 0.5);
}

double maxOne = score.Max(c => c.Value);
var name = (from c in score
            where c.Value == maxOne
            select c.Key).First();

return name;
}

编辑:这是你如何使用它!

代码语言:javascript
复制
    DataTable table = new DataTable(); 
    table.Columns.Add("Sex"); 
    table.Columns.Add("Height", typeof(double)); 
    table.Columns.Add("Weight", typeof(double)); 
    table.Columns.Add("FootSize", typeof(double)); 

    //training data. 
    table.Rows.Add("male", 6, 180, 12); 
    table.Rows.Add("male", 5.92, 190, 11); 
    table.Rows.Add("male", 5.58, 170, 12); 
    table.Rows.Add("male", 5.92, 165, 10); 
    table.Rows.Add("female", 5, 100, 6); 
    table.Rows.Add("female", 5.5, 150, 8); 
    table.Rows.Add("female", 5.42, 130, 7); 
    table.Rows.Add("female", 5.75, 150, 9); 
    table.Rows.Add("transgender", 4, 200, 5); 
    table.Rows.Add("transgender", 4.10, 150, 8); 
    table.Rows.Add("transgender", 5.42, 190, 7); 
    table.Rows.Add("transgender", 5.50, 150, 9);

    Classifier classifier = new Classifier(); 
    classifier.TrainClassifier(table);
    //output would be transgender.
    Console.WriteLine(classifier.Classify(new double[] { 4, 150, 12 }));
    Console.Read();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21705141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档