想问一下(1)C#实现C4.5决策树挖掘后,其结果中的错误与预测分别表示啥?
(2)C4.5决策树挖掘中结果是不是剪枝前错误率和剪枝后的错误率都高,他的最终预测效果就好,预测的准确率就高?
在这个数据量下可以看到在物品量增加的情况下,效率很慢。
所以我写的这个算法实现还需要进一步优化。
更新:
由于这个是c#的,不过其实不管什么实现语言,只要知道思路就行,推荐大家去看一下java版的apache开源的推荐系统:mahout。但是还是推荐大家去看一下。不过博主也还一直没看的。
近期有很多人联系我说要源码,其实源码在这个里面已经都写了。少量的一些不重要的我就没放着上面。关于GlobalFunAndVar这个类是我自定义的一个全局类,在这里面就只是用到统计代码运行时间和连接数据库执行sql语句。OutPutArray这个方法是自定义的一个输出二维数组的方法。代码如下:
/// <summary>
/// 输出指定的二维数组
/// </summary>
/// <param name="array"></param>
public void OutPutArray<T>(T[,] array)
{
bool isDouble = false;
if (array[0, 0] is double)
isDouble = true;
int len1 = array.GetLength(0);
int len2 = array.GetLength(1);
for (int i = 0; i < len1; i++)
{
for (int j = 0; j < len2; j++)
{
//if (j >= i)
switch (isDouble)
{
case false:
Console.Write(array[i, j] + " ");
break;
case true:
if (array[i, j].ToString().Length == 1)
Console.Write(array[i, j] + ".00 ");
else
Console.Write(array[i, j] + " ");
break;
}
/*
else
Console.Write(array[i, j] + " ");
*/
}
Console.WriteLine();
}
}
191221更新(重大更新): 修复执行错误,并给出一个Demo使用样例代码,大家请重新重新下载dll,并可以参考样例代码来进行测试使用。
191108更新:由于我看有人需要,我把这个最终的推荐算法以及一些辅助方法封装成了一个dll,大家只需引入这个dll就可以。
xml文件为注释,因为只引入dll的话,在vs中调用dll中的方法是没有注释说明的,只需把这个注释xml和dll放在同一目录(dll和xml文件名必须相同!),vs直接引入dll就能显示注释。
方法说明:
一共有两个类接口调用:GlobalFunAndVar(辅助通用类)、RecommendBaseGood(基于物品的推荐接口)
RecommendBaseGood:
/// <summary>
/// 构造方法(数据初始化)
/// </summary>
/// <param name="dataTable">
/// 第1列为userId 用户id,
/// 第2列为goodId 物品id,
/// 第3列为rating 评分,
/// </param>
/// <param name="isDeBug">是否打开调试(只用于输出构建的矩阵结果以及统计运行时间)</param>
public RecommendBaseGood(DataTable dataTable, bool isDeBug);
/// <summary>
/// 为某个具体用户计算预测兴趣度
/// </summary>
/// <param name="user">用户id</param>
/// <returns>key:物品id,value:物品推荐度</returns>
public Dictionary<int, double> Get_SimilarityByUser(int user);
/// <summary>
/// 为所有用户计算预测兴趣度
/// </summary>
/// <returns>key:用户id,value:(key:物品id,推荐度) </returns>
public Dictionary<int, Dictionary<int, double>> Get_SimilarityAllUser()
GlobalFunAndVar:
/// <summary>
/// 获得指定的MethodBase对象
/// </summary>
/// <param name="i">指定是属于谁的的方法</param>
/// <returns></returns>
public MethodBase getMethodBase(int i)
/// <summary>
/// 监视代码运行时间开始
/// </summary>
public void stopwatchBegin()
/// <summary>
/// 监视代码运行时间结束
/// </summary>
public void stopwatchEnd()
/// <summary>
/// 指定的sql查询并填充到DataSet返回
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="connection">SqlConnection</param>
/// <returns></returns>
public DataSet SqlDataAdapDS(string sql, SqlConnection connection)