开发者社区> 问答> 正文

离线赛掉到坑里实在爬不出来了, 恳请高手指点


我是ML的新人,经验不足,恳请给位指点。

我先说一下我的思路,各位看看有没有问题:
总的思路是通过公式: w*X = Y 来进行预测, X 是特征矩阵。 Y是列向量,值为 0 或1, 每个值代表一个(user id, item id) 对,user 在某天购买了item 为1, 否则为0. 目的是求出 w。
我是用 11-17号 到 12-17号 的用户行为记录生成X,用12-18号的购买记录生成 Y。 Y中的正负样本比率为1:10, user 在12-18 号购买了item 作为正样本,然后根据item 的流行度进行采样得到负样本, 使用 sklearn中的LogisticRegression算法得到w, 最后再根据 11-17号到12-18号的用户行为记录生成X2, w*X2 得到预测结果,我采用 0.6 作为置信度生成最终的预测结果。
但是, 准确率为 0!!
一个都不对!!

我又尝试使用随机森林算法,但是准确率还是 0!!

我线下自测是用2000个用户的数据预测12-18号的购买行为,得到的混淆矩阵相当不错,预测的f1值也在10%左右,在全数据集上我也跑过, f1也在10%左右,但是对12-19的预测结果就是0!!

我看网上其他赛友的心得,有的甚至只用几条规则就能得到不错的分数,但我这里一直是0。 一开始我以为是负采样算法有问题,但是换了算法还是为0, 我又尝试过不同的特征,但没有任何进展,这几天想得我睡不着觉,我实在找不出问题出在哪里,恳请各位高手指点迷津。

展开
收起
im2608 2016-05-11 08:42:06 6785 0
5 条回答
写回答
取消 提交回答
  • Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    我遇到同样的问题,提交3次了,谢谢楼上指点,但有没有python代码的方法?

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

    Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    感谢imagery608,我用你的方法试试,
    writerow那个write.writerow(["user_id","item_id"])在python2.7里是可以的,不过我用这种方法提交过,没用
    btw,你昨天提交的成绩多少?

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

    Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    imagery608,我想我们之前走进了一个误区,上传的格式应该没有问题
    我现在已经能排到100多名了,
    我之前存在的问题是:结果没有和商品子集P交,
    现在我仍然用一般的write方式,就可以了(用notepad++查看,的确是无bom的utf-8格式)
    2016-05-12 10:36:14
    赞同 展开评论 打赏
  • Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    感谢两位的回复,我再多试试。

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

    Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    snowfrsh:
    我的环境是win7, win-python 3.4
    我现在的输出代码是这样的:
    outputFile = open(output_file_name, encoding="utf-8", mode='w')
    outputFile.write("\"user_id\",\"item_id\"\n")  # 文件头, 添加  \n 来换行
    for index in range(len(predicted_prob)):
                if (predicted_prob[index][1] >= min_proba):
                    outputFile.write("\"%s\",\"%s\"\n" % (samples_test[index][0], samples_test[index][1])) # 预测结果,添加  \n 来换行

    outputFile.close()

    我尝试使用以下的代码,但出错:
            outputFile = open(output_file_name, mode='wb')  # 二进制打开
            outputFileWriter = csv.writer(outputFile)
            outputFileWriter.writerow(["user_id", "item_id"])  # 这里出错, 走不下去了 TypeError: 'str' does not support the buffer interface, 我没有找到解决方法
            for index in range(len(predicted_prob)):
                if (predicted_prob[index][1] >= min_proba):
                    outputFileWriter.writerow([samples_test[index], samples_test[index]])

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

    Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    snowfrsh,
    很不幸,还是 0, 但是代码里有个bug,所以我不确认到底是哪里导致的问题,改完bug我再试试看

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

    Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    zhan建州
    感谢你的回复,我没用过np.savetxt()这个函数,今天就试试看。多谢

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

    Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    zhan建州, snowfrsh
    感谢之前的回复,今天有结果了,但是成绩很差,f1 只有百分之零点几, 说明提交格式起码是正确的。
    至于成绩为什么会这么差,我想先从采样方式入手。 我是根据某个use否在某一天购买了某个item作为一个正样本,例如为12-19号做预测,那么用户在12-18号的购买记录则作为正样本,但只是采用12-18这一天的购买记录还是再加上之前若干天的购买记录作为正样本,这个我不确认,能否给些建议。
    另外负样本,我现在的是根据item的热度来采样,我用这个公式来计算热度:
    item_popularity = item_view_cnt*0.01 + item_favourite_cnt*0.33 + item_cart_cnt*0.47 + item_buy_cnt*0.94, 这些系数我只是简单的统计了一下每个行为之间的比例后得到的。
    得到热度之后,就根据热度来采样,热度越高的item就越容易被采集到负样本中。但这样只是考虑了item,是不是还要考虑 user的因素,因为毕竟一个样本是一个 <user, item> pair。
    还有就是采样的时候我没有考虑特征,是否根据特征来分层采样会更好?
    另外我发现如果只在商品子集中采样正负样本会显著增加准确率,但如果这样的的话是否会丢掉某些模式?

    这是我现在的问题,望能不吝赐教。

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

    Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    非常非常感谢zhan建州提供的信息,我会仔细看的。

    非常感谢
    2016-05-11 13:51:12
    赞同 展开评论 打赏
  • Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    准确率一直是0,觉得应该是格式的问题,一个笨的方法(我现在用的就是这种):你可以用notepad++打开csv文件,看看编码方式是不是UTF-8,还有第一行数据格式是不是:“user_id","item_id"(一定要有双引号)

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

    Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    我用的土方法,你先将你的结果矩阵(如testPredict)保存随便保存成csv格式(txt格式),我是用python的np.savetxt("testPredict.csv",testPredict,dilimiter=',')语句,然后在”赛题与数据“一栏中下载选手结果数据样例.csv,用notepad++打开选手结果数据样例.csv及testPredict.csv,将testPredict.csv中的数据复制到选手结果数据样例.csv,保存,文件重命名为tianchi_mobile_recommendation_predict.csv,OK,搞定。

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

    回 12楼imagery608的帖子
    我的建议是你先看一下去年的几个大牛是怎么做的,网上有他们的答辩PPT,如http://wenku.baidu.com/link?url=MrScWbcz1WV5R0ICkT-cesgs9C8Inv2Wscf2HV52aqcwhR9FzBV55q0BJshCaGJJDCUt4pk61eTflSnMXI_F9mjdIA-lsmRLW79ZbYtvTka, 你可以结合他们的思路来做(对我而言,他们的PPT中的信息量真的是超大的,尤其是特征工程那一部分),这样可以少走很多弯路。
    2016-05-11 11:27:03
    赞同 展开评论 打赏
  • Re离线赛掉到坑里实在爬检查不出来了, 恳请高手指点
    检查输出格式吧。。
    2016-05-11 11:22:56
    赞同 展开评论 打赏
  • Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    同问,我从5月9日开始,离线赛提交数据,准确率一直是0,不可能一条没中,想不明白。

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

    Re离线赛掉到坑里实在爬不出来了, 恳请高手指点
    感谢二位的意见,输出格式的确有问题,新入手的mac,不熟遇坑了。
    2016-05-11 10:51:20
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Android插件化-从入门到"放弃" 立即下载
《网站性能与体验优化实践指北》 立即下载
美团 crash 监控分析系统优化之路:crash 率从千分位到万分位 立即下载