使用sql server 2008决策树在C#中进行预测

时间:2011-11-13 16:43:29

标签: c# sql-server-2008 ssas decision-tree

我正在创建一个C#应用程序我将通过一个简单的例子来解释我想要的东西:

考虑这张表:

name   age     reply   choice 
------+-------+-------+-------
John   10-20   yes     apple
Kate   20-30   yes     orange
Sam    10-20   yes     apple
Peter  10-20   no      ----
Tom    20-30   no      ----
Mike   10-20   yes     orange

我想为所有回复的人制定预测性“年龄”决策树。然后预测那些没有回复的人的选择。

该表保存在SQL Server 2008数据库中。 SQL Server 2008中有一个功能允许这样做。我搜索了Microsoft帮助网站,但我没有找到任何关于如何使用它的明确指南。

我如何在我的C#代码中使用它,任何人都有分步指南吗?

1 个答案:

答案 0 :(得分:3)

这样可以解决问题:

-- create table
    declare @t table (name varchar(50), age varchar(50), reply varchar(3), answer varchar(50))
    insert @t (name, age, reply, answer)
    values ('John', '10-20', 'yes', 'apple'),
    ('Kate', '20-30', 'yes', 'orange'),
    ('Sam', '10-20', 'yes', 'apple'),
    ('Peter', '10-20', 'no', '----'),
    ('Tom', '20-30', 'no', '----'),
    ('Mike', '10-20', 'yes', 'orange')

-- get answer
    select  t.name, t.age, t.reply, case t.reply when 'yes' then t.answer else w.answer end answer
    from    @t t
            left join (
                select age, answer
                from (
                    select  age, answer, count(*) cnt, row_number() over (partition by age order by count(*) desc) rnk
                    from    @t
                    where   reply = 'yes' 
                    group by age, answer
                ) s
                where rnk = 1
            ) w on t.age = w.age 

找出每个年龄段提供的答案最多的答案,然后在没有给出答案的情况下选择答案。

当2个答案之间存在平局时,它只选择一个答案。我认为最先出现的那个并不能保证它会一直这样做。

请注意,如果你有一个答案是A:B = 55%:45%的小组,那么所有没有答案的人都会得到答案A,所以你要通过这样做来改变人口的平均数。你知道吗