我有一个数据库,由一大堆记录(大约600,000)组成,其中一些记录缺少某些字段.我的目标是找到一种方法来根据现有数据预测丢失的数据值应该是什么(所以我可以填写它们).
我正在研究的一个选项是聚类 - 即表示在某些空间中作为点完成的记录,寻找点集群,然后当给出具有缺失数据值的记录时,尝试找出是否存在任何可能的聚类属于这与现有数据值一致.然而,这可能是不可能的,因为一些数据字段是标称比例(例如颜色),因此不能按顺序排列.
我的另一个想法是创建某种概率模型,该模型可以预测数据,在现有数据上进行训练,然后使用它进行推断.
有哪些算法可用于执行上述操作,是否有任何免费提供的软件可以实现这些算法(顺便说一下,这个软件将在c#中).
这不是一种算法,更多的是一种哲学和方法论问题.有几种不同的技术可以解决这类问题.Acock(2005)对一些方法进行了很好的介绍.虽然看起来似乎涉及很多数学/统计数据(并且可能看起来很费劲)但是值得思考如果你搞砸了将会发生什么.
安德鲁·格尔曼的博客也是一个很好的资源,尽管他博客上的搜索功能还有待改进...
希望这可以帮助.
Acock(2005)
http://oregonstate.edu/~acock/growth-curves/working%20with%20missing%20values.pdf
安德鲁格尔曼的博客
http://www.stat.columbia.edu/~cook/movabletype/mlm/
处理缺失值是一个有条不紊的问题,与数据的实际含义有关.
您可以使用的几种方法(我博客上的详细帖子):
忽略数据行.这通常在缺少类标签时完成(假设您的数据挖掘目标是分类),或者行中缺少许多属性(不只是一行).但是,如果这些行的百分比很高,你的性能肯定会很差
使用全局常量填写缺失值.像"未知","N/A"或负无穷大.使用它是因为有时候尝试预测缺失值是没有意义的.例如,如果你有一个数据库,如果大学候选人和居住州缺少一些人,填写它没有多大意义......
使用属性均值.例如,如果美国家庭的平均收入是X,您可以使用该值来代替缺失的收入值.
对属于同一类的所有样本使用属性均值.让我们说你有一个汽车定价DB,除其他外,将汽车分类为"豪华"和"低预算",你在处理成本领域的缺失值.用所有豪华车的平均成本取代豪华车的缺失成本可能比你考虑低预算车的价值更准确
使用数据挖掘算法来预测值.可以使用回归,基于推理的工具使用Baysian形式,决策树,用于生成步骤方法#4(K-Mean\Median等)的输入的聚类算法来确定该值.我建议首先查看回归和决策树( ID3树生成)因为它们相对容易,网上有很多例子.
至于软件包,如果你能负担得起,并且你在微软的世界里看看SQL Server Analysis Services(简称SSAS),它实现了上面提到的大部分内容.
以下是免费数据编制软件包的一些链接:
WEKA - http://www.cs.waikato.ac.nz/ml/weka/index.html
ORANGE - http://www.ailab.si/orange
TANAGRA - http://eric.univ-lyon2.fr/~ricco/tanagra/en/tanagra.html
虽然不是C#他是一个不错的介绍到决策树和贝叶斯学习(使用Ruby): http://www.igvita.com/2007/04/16/decision-tree-learning-in-ruby/ HTTP:// WWW .igvita.com/2007/05/23 /贝叶斯分类功能于红宝石/
还有,我觉得非常有用的(也可用于学习目的)这个Ruby库: http://ai4r.rubyforge.org/machineLearning.html
这些算法应该有足够的样本在线用任何语言,所以我相信你也很容易找到C#的东西......
编辑:
在原帖中忘了这个.如果你正在玩数据挖掘,这肯定是必须的...下载Microsoft SQL Server 2008数据挖掘加载项为Microsoft Office 2007(它需要SQL Server Analysis Services - SSAS - 这不是免费的,但你可以下载试用).
这样您就可以在自己实现这些内容之前轻松地在Excel中播放和尝试不同的技术.再说一次,既然你在微软生态系统中,你甚至可能决定选择基于SSAS的解决方案并依靠SQL Server人员为你做这件事:)