




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、浙江工商大学计算机与信息工程学院« Python程序设计与实践大作业报告专业:计科班级: 1404学 号:141219041& 1412190415 1412190413姓名: 陆阳,孙勇,裘昇明指导教师:蒲飞2015年6 月28日题目介绍:在真实的业务场景下,我们往往需要对所有商品的一个子集构建个性化推荐 模型。在完成这件任务的过程中,我们不仅需要利用用户在这个商品子集上的行 为数据,往往还需要利用更丰富的用户行为数据。定义如下的符号:U用户集合I 商品全集P商品子集,P ? ID用户对商品全集的行为数据集合那么我们的目标是利用D来构造U中用户对P中商品的推荐模型。数据说明
2、:竞赛数据包含两个部分。第一部分是用户在商品全集上的移动端行为数据(D)表名为 tianchi_mobile_recommend_train_user ,包含如下字段:字段字段说明提取说明user_id用户标识抽样&字段脱敏item_id商品标识字段脱敏behavior_type用户对商品的行为类型包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。user_geohash用户位置的空间标识,可以为空由经纬度通过保密的算法生成item_category商品分类标识字段脱敏time行为时间精确到小时级别第二个部分是商品子集(P),表名为 tianchi_mobile_recom
3、mend_trainjtem包含如下字段:字段字段说明提取说明item_id商品标识抽样&字段脱敏item_ geohash商品位置的空间标识,可以为空由经纬度通过保密的算法生成item_category商品分类标识字段脱敏训练数据包含了抽样出来的一定量用户在一个月时间(11.1812.18)之内的移动端行为数据(D),评分数据是这些用户在这个一个月之后的一天(12.19)对商品子集(P)的购买数据。参赛者要使用训练数据建立推荐模型,并输出用 户在接下来一天对商品子集购买行为的预测结果。大作业报告内容包括以下几个部分1、数据分组统计:可统计有多少用户、商品、商品类别等信息,甚至每天各种
4、行为的统计数。如图:ABCDE1timebehavi or 1behavior 2behavi or 3b已hayior 422014/11/185747211S3二613"45132014/11/1983300187053344042014/11/20628961095220043352014/11/2170089217251842962014/11/2278661109270341072014/11/2338505116964643182014/11/24957963063214144792014/11/25581611128629451102014/11/26579801126
5、549494112014/11/27595141117111S403122014/11/28574241005598451132014/11/29566081135672438142014/11/30916161418762453152014/12/1619862948649489162014/12/29455113387303340172014/12/37993812781035494192014/12/4549631181671467192014/12/5570244327792451202014/12/65591330241129560212014/12/7100716151375520
6、77222014/12/810528424621133412232014/12/99419210002717433242014/12/109101517071322477252014/12/1113521641667222036262014/12/122783281185413774384272014/12/131204261128981436282014/12/146814616151471449292014/12/15749601237685479302014/12/16819341679716548312014/12/17760701341867517322014/12/18641261
7、M962776433还有,在给出的用户行为数据中,有些用户在整个11-18日至12-18日对商 品有浏览行为记录,但是从未产生过购买行为,这些用户会否在12月19号购买 商品实难预测,因此,我们去除这些无购买行为的用户信息,认为这些用户在 12月19号还是不会购买任何商品。贴关键代码import timeimport pandas as pdstart=time.time()df_items=pd.read_csv("tianchi_mobile_recommend_train_item.csv")df_items2=pd.read_csv("tianchi_mo
8、bile_recommend_train_user.csv")df_items3=pd.DataFrame()df_items4=pd.DataFrame()df_items5=pd.DataFrame()df_items3=df_items"item_id".drop_duplicates()df_items4=df_items"item_category".drop_duplicates()df_items5=df_itemsdf_items.item_geohash.notnull()df_items5=df_items5"it
9、em_id".drop_duplicates()df_items6=df_items2"user_id".drop_duplicates()df_items7=df_items2"item_id".drop_duplicates()df_items8=df_items2"item_category".drop_duplicates()total_behavior_num=len(df_items2)df_items9=df_items2df_items2.behavior_type=4df_items10=df_items2
10、df_items2.behavior_type!=4positive_num=len(df_items9)negative_num=len(df_items10)item_num=len(df_items3)item_categories_num=len(df_items4)item_geohash_num=len(df_items5)user_num=len(df_items6)item_full_num=len(df_items7)item_categories_full_num=len(df_items8)end=time.time()print ' 商品子集中商品个数为:
11、9;,item_numprint ' 商品子集中商品类型数为:',item_categories_numprint ' 商品子集中带geohash 信息的商品个数为:',item_geohash_numprint ' 用户数一共有:',user_numprint ' 商品全集中商品个数为:',item_full_numprint '商品全集中商品种类数数为:',item_categories_full_numprint ' 商品全集中共有 舔行为记录'%(total_behavior_num)pri
12、nt '消费行为记录中负正样本比为%d:1' %(negative_num/positive_num)print ' 一共耗时 f 秒'(end-start)2、数据预处理 重新整理时间重新整理数据的时间,也就是 Time字段,在数据统计分组中也提到过,因为原始数据的用户行为时间记录是从11 月18 日 0 时到 12 月 18 日 23 时,精确到小时级,为了方便数据集的划分,需要将用户行为时间数据整理为0-30 天,以天为单位,即11 月 18日的 time 为 0、 11 月 19 日的 time 为 1,以此类推。贴关键代码import pandas a
13、s pdfrom datetime import *import timet0=time.time()begin_time=datetime(2014,11,18,0,0) def trans_time(str_time):entry_time=datetime.strptime(str_time,"%Y-%m-%d %H")datatime_delta=(entry_time-begin_time).daysreturn int(datatime_delta)df_train_user=pd.read_csv("tianchi_mobile_recommend_
14、train_user.csv")print "=n"print " 时间转换进行中n"df_train_user.time=df_train_user.time.map(lambda x:trans_time(x)df_train_user.to_csv("train_trans_time.csv",index=False)t1=time.time()print " 时间转换结束!n"print " 转换时间共耗时f秒"%(t1-t0)划分训练集和测试集在分类问题中,模型需要经过训练集
15、的学习,才能用于测试集,而训练集和 测试集在形式上的区别在于前者有类别标签, 后者则需要模型输出相应的类别标 签。这里的问题是依据31天的用户操作记录预测第32天的购买情况,所以通常 来说,训练集的构建需要利用 31天的数据,而其相应的类别标签如何标注在训 练集中?这个与你如何划分训练集和测试集有关;而测试集的构建则可用到31天的完整数据。下面举个例子,用于解释训练集和测试集的具体表现形式。us er_idbrand_idfeature_lf eature_2tag121545001753231训练集样本示例user_id brandyid feature feature_2565400010
16、94345测试集样本示例训练集样本示例中的 user_id, brand_id (item_id )用于表示唯一的样本 id ,而特征feature,feature_2则用31天的数据构建而来。本次比赛中,我 们划分训练集和测试集所用的分割日期是每 10天。第0-9天为一个训练集,用 第10天的数据给第0-9天数据添加类别标签。第1-10天为一个训练集,用第 11天的数据给第1-10天数据添加类别标签,依次类推,最后是第20-29大 为一个训练集,用第30天的数据给第20-29天数据添加类别标签。测试集为第 21-30天的数据。贴关键代码import pandas as pdfrom date
17、time import *import timenum=22start=time.time()df_train_user=pd.read_csv("train_trans_time_process.csv")dfjtems=pd.read_csv("tianchi_mobile_recommend_trainjtem.csv")df_items=df_items.item_id.drop_duplicates()a=pd.DataFrame()a"item_id"=df_items.values dfitems=afor i in r
18、ange(num):print " 划分训练集:"+str(i)j=i+10if j!=31:df_set=df_train_user(df_train_user.time>=i)(df_train_user.time<j)df_set.to_csv("data/"+str(j)+".csv",index=False)df_test=df_train_user(df_train_user.time=j)(df_train_user.behavior_type=4)"user_id","item
19、_id"df_test=df_test.drop_duplicates() df_test=pd.merge(left=df_test,right=df_items,how="inner").drop_duplicates()df_test.to_csv("data/"+"result"+str(j)+".csv",index=False)else:df_set=df_train_user(df_train_user.time>=i)&(df_train_user.time<j)df_
20、set.to_csv("data/"+"test.csv",index=False) end=time.time()print ' 训练集划分耗时f秒'(end-start) 平衡正负样本正负样本比例需从1:100 降为 1:101:20 之间。贴关键代码import pandas as pdimport randomimport timefrom get_features import *start=time.time()df_feature2=pd.DataFrame()j=10for k in range(20):i=j+kdf_f
21、eature=pd.read_csv("data_features/train"+str(i)+".csv")df_feature_p= df_featuredf_feature.tag=1df_feature_n = df_featuredf_feature.tag=0lp = len(df_feature_p)ln = len(df_feature_n)if float(ln)/lp > 14:a = range(0,ln)slice = random.sample(a,lp*14) # lp*15df_feature_n = df_featu
22、re_n.ilocslicedf_featurepd.concat(df_feature_p,df_feature_n,ignore_index=True)df_feature2=pd.concat(df_feature,df_feature2)df_feature2.to_csv("features/train_feature.csv",index=False) end=time.time()print ' 对训练集抽样耗时 f秒'(end-start)3、特征提取特征提取在数据挖掘中很重要,那么为什么它们那么重要呢?之前提到过,要想输出测试集的类别标签,
23、需要模型在训练集经过学习,那么模型在训练集上学习的是什么?我们知道,在给模型输入数据的时候,实际上模型用到的都是特征(及其对应的类别标签),而特征就是用于描述为什么该样本的类别标签就是如此,在本赛题中即用于描述某用户为什么购买/不购买某商品。比如,用户购买某商品的原因,是因为以前经常买,信得过,那么这里可以用 “用户购买该商品的天数/ 用户访问该商品的天数”来刻画用户对该品牌的忠诚度。当然,并不是单一的特征就能描述所有情况,通常来说,需要针对所有可能的情形进行考虑,从而深刻而全面地刻画用户购买/不购买商品的原因。这样,模型才能真正学到其中的规律,从而在测试集表现优异。而这一过程,就称之为特征工
24、程。显然,要做好特征工程,需要我们自身对 “用户会否购买商品”这一业务具有较深刻的理解,即领域知识,并将其用模型可理解的方式表现出来,如何抽取特征?1、统计用户在31 天中的购买量、点击量、收藏量、加购物车次数、有操作记录的天数、发生购买的天数、点击转购买率等等,并以点击转购买率做升序/ 降序排序进行观察,可以发现点击量越高的,点击转购买率也往往越低,尤其点击量极高的用户,往往购买量为0。由此可以考虑将用户购买量、点击转购买率等一系列特征用于描述用户是否会在未来一天发生购买。2、统计用户从初次访问商品到最终购买商品的时间,可以发现绝大多数购买都是当天接触当天完成,越往后用户购买的可能性越低。由
25、此可以推测用户对商品的购买意愿是随着距离上次访问的时间拉长而衰减的,进而可以使用衰减函数来模拟该购买意愿。一方面,利用领域知识对数据进行分析、实验验证。另一方面,从分析的结果、实验的反馈来更新领域知识。这是一个不断迭代的过程,需要成体系、且不断地完善。以下仅供参考:( 1) 、基本统计类特征A. 销量(分割日期前1、 2、 3、 4、 5、 10 天)B. 成交订单数(以同一天同一个用户为一个订单)C. 购买人数D.以上3类特征分别再针对点击、收藏、加购物车等进行统计( 2) 、转化率类特征A. 销量 / 点击数B. 成交订单数/点击订单数C. 购买人数 / 点击人数D.上述3个特征分别在针对
26、收藏、购物车等操作进行统计( 3) 、比值类特征A. 返客率(某周期内多次购买的用户数/总购买用户数)B. 老客户率(3 天【或其他周期7、 15、 30】前曾购买过且在前3 天内再次购买的用户数 /3 天内总购买用户数)C.人均点击数、人均购买量、人均收藏量、人均加购物车量等我们的做法:1. 用户所有行为总量提取用户所有行为总量作为第一个特征,它是指每个用户对每个商品所有行为的总量,其中的所有行为包括点击行为、收藏行为、购物车行为、购买行为。用户所有行为总量定义为前10 天的用户行为数据中用户对商品全集的所有行为总量,包括点击量、收藏量、购物车量、购买量。从用户所有行为总量中,可以得到用户对
27、某商品产生的行为次数,从而推测出该用户对阿里巴巴移动电商平台的操作频率和忠诚度,以此做出合理的个性化推荐。之所以选择前10 天作为时间节点,是由于划分之后的每个训练集和测试集都以10 天为单位。2. 点击量定义数据集的每个用户对商品全集中的商品的点击行为的总和为点击量。从点击量中,可以知道用户浏览了几次某商品,从而推测该用户对该商品的兴趣程度, 为之后的模型训练以及最后的个性化推荐奠定一个良好基础。其中, 对点击量按 10 天、 5 天、 3 天、 1 天的时间来划分。也就是关于点击量,按时间的不同提取的特征(U_click_sum10- U_click_sum1 )有 4个,分别是前10天的
28、用户点击量、前5 天的用户点击量、前3 天的用户点击量、前1 天的用户点击量。之所以这样提取特征是由于之前划分的训练集是以10 天为单位划分的,这样可以更清楚地分析用户在10 天中点击量的分布情况,对后面的模型训练有很重要的作用。3. 收藏量定义数据集的每个用户对商品全集中的商品的收藏行为的总和为收藏量。这里可以从收藏行为推测用户对某商品的感兴趣程度,虽然收藏量不会大于点击量,但是收藏行为必定大于点击行为反映的用户感兴趣程度。定义数据集的每个用户对商品全集中的商品加入购物车行为的总数为购物 车量。这里可以从加入购物车行为直接推断用户对某商品感兴趣,虽然购物车 量必定大幅度小于点击量和收藏量,但
29、是加入购物车行为反映用户对某个商品 感兴趣程度必定大于点击和收藏行为反映的感兴趣程度。5 .购买量定义数据集的每个用户对商品全集中商品的购买行为的总数为购买量,或 者说用户购买商品子集的商品数量为购买量。这里可以从用户的购买行为直接 推断为用户对某商品感兴趣,对个性化推荐有重要的意义。为了更清楚地看到购买量与点击量、收藏量、加购物车量的关系,对用户前10天的行为数据用散点图表示,以用户前 10天的购买量为横坐标,其他三类行 为是纵坐标,如图,可以看出用户点击量与其他的行为量相比明显大很多,而 点幕量越多的用户购买量就越少。用户前10天的行为数据对比购物车量6 .点击/购买率点击/购买率的计算公
30、式就是点击量除以购买量,即发生多少次点击行为会 有一次购买行为,也就是电子商务平台常说的转化率的倒数。这个特征可以挖 掘点击量和购买量之间的关系,可以预测出用户在点击后,何时会发生购买行 为,更准确地为用户提供一个合理的个性化推荐。这里还是按时间的不同提取4 个特征(U_click/buy10-U_click/buy1 ),分别是前 10 天的点击 / 购买率、前5 天的点击 / 购买率、前3 天的点击 / 购买率、前1 天的点击 / 购买率。7. 收藏 / 购买率收藏 / 购买率的计算公式就是收藏量除以购买量,即发生多少次收藏行为会有一次购买行为。这个特征可以挖掘收藏量和购买量之间的关系,可
31、以预测出用户在收藏后,何时会发生购买行为,更准确地为用户提供一个合理的个性化推荐。这 里 还 是 按 时 间 的 不 同 提 取 4个 特 征( U_collection/buy10-U_collection/buy1 ) ,分别是前10 天的收藏/购买率、前 5 天的收藏 / 购买率、前3 天的收藏 / 购买率、前1 天的收藏 / 购买率。与点击/购买率不同,该特征的取值范围可能在0,1 之间,因为购买行为不一定要先收藏该商品,所以取值范围应该是大于等于0。8. 购物车 / 购买 率购物车 /购买率的计算公式就是购物车量除以购买量,即发生多少次加入购物车行为会有一次购买行为。这个特征可以挖掘
32、购物车量和购买量之间的关系,可以预测出用户在加入购物车后,何时会发生购买行为,更准确地为用户提供一个合理的个性化推荐。还是按时间的不同提取4 个特征(U_car/buy10- U_car/buy1 ),分别是前10 天的购物车/ 购买率、前5 天的购物车/ 购买率、前3 天的购物车/ 购买率、前1 天的购物车/ 购买率。该特征的取值范围与收藏/ 购买率相同,购买行为不一定要先加入购物车,所以它也应该是大于等于0。9. 商品销量商品销量是指每个商品的销售量,与用户的购买行为有关,由购买了该商品的所有用户总量决定。该特征直观地反映了某个商品基于销量上受喜爱程度,为训练模型以及个性化推荐提供了很好的
33、参考。还是按时间的不同提取4个特征(Item_sale10-Item_sale1 ),分别是前10 天的商品销量、前5 天的商品销量、前3 天的商品销量、前1 天的商品销量。该特征的取值范围一定大于等于零。成交订单量是指包含该商品的总成交订单的数量,与商品销量类似,不同的是同一笔订单中可能购买了多件该商品,那么此时商品销量大于1,而成交订单量却等于1。该特征反映了用户对某个商品的购买次数,排除同一笔订单购买多件而使商品销量看起来较高的情况。比如,用户购买牙刷时,一笔订单并不会只购买一个,通常会一起购买多个,那么牙刷的销量相比一般只购买一件的商品销量高很多。通过成交订单量可以反映商品基于订单量受
34、喜爱程度,提高了训练模型以及个性化推荐的准确性。还是按时间的不同提取4 个特征(I_order10-I_order1 ),分别是前10天的成交订单量、前5 天的成交订单量、前3 天的成交订单量、前1 天的成交订单量。该特征的取值范围一定大于等于零。11. 购买人数购买人数是指购买该商品的用户总人数,与商品销量与成交订单相类似,不同的是同一个用户可能对该商品多次下单,也可能购买了多件该商品,那么此时成交订单量大于1,商品销量大于1,而购买人数却等于1。该特征反映了某个商品的购买人数,排除同一个用户购买多次该商品的情况。比如,用户购买生活用品就会出现多次下单和购买多件的情况。通过购买人数可以真正反
35、映商品基于用户受喜爱程度,很大程度地提高了训练模型以及个性化推荐的准确性。还是按时间的不同提取4 个特征(I_buyer10-I_buyer1 ),分别是前10天的购买人数、前5天的购买人数、前3天的购买人数、前1 天的购买人数。该特征的取值范围一定大于等于零。12. 是否加购物车加入购物车的行为已经在前面做了一个详细地介绍和分析,其实在用户行为数据中,是否加入购物车也可以作为一个特征提取出来。将是否加购物车的特征,定义为数据集的每个用户对商品全集中的商品是否发生加入购物车的行为。这里还是按时间的不同提取5 个特征 ( car5-car1 ) ,分别是倒数第5天是否加购物车、倒数第4天是否加购
36、物车、倒数第3天是否加购物车、倒数第2天是否加购物车、倒数第1 天是否加购物车。之所以这样提取特征,是因为从用户在10 天的倒数5 天内是否会将某商品加入购物车,可以预测该用户在测试集中倒数5 天内是否会发生加入购物车的行为。该特征的取值范围一定为1 或者 0, 其中 1 代表加购物车,0 代表不加购物车。10. 成交订单量13. 是否购买用户购买行为已经和加购物车行为一样在前面做了详细地介绍和分析,其实在用户行为数据中,是否购买也可以作为特征提取出来。在本文中,将是否购买的特征,定义为数据集的每个用户对商品全集中的商品是否会发生购买行为。这里还是按时间的不同提取5 个特征 ( buy5-bu
37、y1 ) ,分别是倒数第5天是否购买、倒数第4天是否购买、倒数第3天是否购买、倒数第 2 天是否购买、倒数第1 天是否购买。之所以这样提取特征,是因为从用户在10 天的倒数5 天内是否会购买某商品,可以预测该用户在测试集中倒数5 天内是否会发生购买行为。该特征的取值范围一定为1 或者 0, 其中 1 代表购买,0代表不购买。14. 累计的用户行为累计的用户行为,也属于用户行为数据的一种表现形式,用户行为数据在前面已经做了详细地介绍和分析,它可以直观地反映出用户的各种关键信息。累计的用户行为定义为前10 天的用户行为数据中用户累计对商品子集的各行为总量,包括点击量、收藏量、购物车量、购买量。与用
38、户所有行为总量特征不同之处在于,累计的用户行为是基于商品子集的,而且是按照用户行为提取特征。提取4 个特征(behav1- behav4 ),分别是前10 天的用户点击量、前10天的用户收藏量、前 10 天的用户加购物车量、前 10 天的用户购买量。该特征的取值范围一定为大于等于0。15. 访问时间差访问时间差是指用户在两次访问时间的间隔,它可以反映用户对网站的访问频率等信息。本文中, 提取特征访问时间差,将其定义为用户最后一次访问商品子集中的某个商品到第10 天的天数间隔。这与倒数5 天的加购物车量、购买量相关联, 可以得到用户访问时间与购买之间的关系。该特征的取值范围为0,10之间的整数。
39、贴关键代码import pandas as pdimport randomfrom get_features import *import timet1=time.time()j=10df_items=pd.read_csv("tianchi_mobile_recommend_train_item.csv")df_items=df_items.item_id.drop_duplicates()a = pd.DataFrame()a"item_id" = df_items.valuesdf_items = afor k in range(21):i=j+k
40、print "add features to trains "+str(i)df_tag=pd.read_csv("data/"+"result"+str(i)+".csv")df_tag"tag"=1df_feature=pd.read_csv("data/"+str(i)+".csv")df_feature_item=pd.merge(left=df_feature,right=df_items,how="inner")df_ui
41、= df_feature"user_id","item_id".drop_duplicates()df_ui = pd.merge(left=df_ui,right=df_items,how="inner")df_ui_tag = pd.merge(left=df_ui,right=df_tag,how="left")df_ui_tag.fillna(0,inplace=True)U1 = buy_sum10(df_feature,i)df_train = pd.merge(left=df_ui_tag,right
42、=U1,how="left")U2 = click_sum10(df_feature,i)df_train = pd.merge(left=df_train,right=U2,how="left")U3 = collection_sum10(df_feature,i)df_train = pd.merge(left=df_train,right=U3,how="left")U4 = car_sum10(df_feature,i)df_train = pd.merge(left=df_train,right=U4,how="l
43、eft")df_train"U_click/buy10"df_train.U_click_sum10/df_train.U_buy_sum10df_train"U_click/buy5"df_train.U_click_sum5/df_train.U_buy_sum5df_train"U_click/buy3"df_train.U_click_sum3/df_train.U_buy_sum3df_train"U_click/buy1"df_train.U_click_sum1/df_train.U_buy
44、_sum1df_train"U_click/buy10"=df_train"U_click/buy10".map(lambdax: fillinfinity(x)df_train"U_click/buy5"=df_train"U_click/buy5".map(lambdax:fillinfinity(x)df_train"U_click/buy3"=df_train"U_click/buy3".map(lambdax:fillinfinity(x)df_train"
45、;U_click/buy1"=df_train"U_click/buy1".map(lambdax:fillinfinity(x)df_train"U_collection/buy10"df_train.U_collection_sum10/df_train.U_buy_sum10df_train"U_collection/buy5"df_train.U_collection_sum5/df_train.U_buy_sum5df_train"U_collection/buy3"df_train.U_col
46、lection_sum3/df_train.U_buy_sum3df_train"U_collection/buy1"df_train.U_collection_sum1/df_train.U_buy_sum1df_train"U_collection/buy10"=df_train"U_collection/buy10".map(lam bda x: fillinfinity(x)df_train"U_collection/buy5"=df_train"U_collection/buy5".m
47、ap(lambd a x: fillinfinity(x)df_train"U_collection/buy3"=df_train"U_collection/buy3".map(lambd a x: fillinfinity(x)df_train"U_collection/buy1"=df_train"U_collection/buy1".map(lambd a x: fillinfinity(x)df_train"U_car/buy10"df_train.U_car_sum10/df_trai
48、n.U_buy_sum10df_train"U_car/buy5" = df_train.U_car_sum5/df_train.U_buy_sum5df_train"U_car/buy3" = df_train.U_car_sum3/df_train.U_buy_sum3df_train"U_car/buy1" = df_train.U_car_sum1/df_train.U_buy_sum1df_train"U_car/buy10"=df_train"U_car/buy10".map(lam
49、bdax:fillinfinity(x)df_train"U_car/buy5"=df_train"U_car/buy5".map(lambdax:fillinfinity(x)df_train"U_car/buy3"=df_train"U_car/buy3".map(lambdax:fillinfinity(x)df_train"U_car/buy1"=df_train"U_car/buy1".map(lambdax:fillinfinity(x)df_behavior_s
50、um10 = behavior_sum10(df_feature)df_trainpd.merge(left=df_train,right=df_behavior_sum10,how="left")df_I_buyers = I_buyers(df_feature_item,i)df_train = pd.merge(left=df_train,right=df_I_buyers,how="left")df_item1 = Item_sale(df_feature,i)df_train = pd.merge(left=df_train,right=df_
51、item1,how="left")df_car = car(df_feature,i)df_train = pd.merge(left=df_train,right=df_car,how="left")df_buy = buy(df_feature,i)df_train = pd.merge(left=df_train,right=df_buy,how="left")df_orders = I_Orders(df_feature_item,i)df_train = pd.merge(left=df_train,right=df_ord
52、ers,how="left")df_ui_sum = UI_Sum(df_feature_item,i)df_train = pd.merge(left=df_train,right=df_ui_sum,how="left")df_ui_last_time = last_time(df_feature_item,i)df_trainpd.merge(left=df_train,right=df_ui_last_time,how="left")df_train.fillna(0,inplace=True)df_train.to_csv(
53、"data_features/train"+str(i)+”.csv",index=False)t2=time.time()print "给训练集打上标签耗时 f秒"(t2-t1)4、选择分类模型可以用决策树模型、随机森林模型、Logistic回归、GBRTf型等,具体可以 上网站:http:/站/stable/查看各个模型的使用方法。决策树模型:首先从包含了特征的训练集中选择所需特征,调用 DecisionTreeClassifier函数对该训练集训练模型,再使用 predict函数预测测试集的分类,再将分类结果
54、是购买(tag=1)的商品作为推荐结果,将其与测 试集的真实分类结果比对,最后评估该模型对本实证研究数据的准确率,以 F1 值为准。决策树分类模型的DecisionTreeClassifier 函数,包含了很多参数设置, 着重研究criterion 参数,criterion表示衡量一个分类的质量,支持的标准可选择 gini 和 entropy 这两个值,其中gini 是基尼指标,entropy 是信息增益。由于用十折交叉验证的方法,所以每次改变一个变量都需要对该模型重新抽样,对其运行10 次,得出第1 次到第 10 次的验证结果,对十次准确率F1 值求平均作为该模型最终的F1 值。贴关键代码d
55、f_predict = pd.read_csv("model/predict_DecisionTree.csv")inner = pd.merge(left=df_result,right=df_predict,how="inner")predict_num = len(df_predict)print "DecisionTree predict_num is: ",predict_numhit_num = len(inner)print "DecisionTree hit_num is: ",hit_numres
56、ult_num = len(df_result)print "DecisionTree total result num is: ",result_numif predict_num!=0:precision = float(hit_num)/predict_numif result_num!=0:callrate = float(hit_num)/result_numprint "DecisionTree Precision is : ",precisionprint "DecisionTree Call rate is: ",ca
57、llrateif precision+callrate != 0:print" 决 策 树F1 值 为 :",2*precision*callrate/(precision+callrate),'n'else:print " 决策树 F1 值为 : 0"基于随机森林的分类模型随机森林是在决策树的基础上提出的分类模型,它属于集成学习模型。他的核心思想就是通过训练和组合多个不同的决策树,使其形成森林,然后由多棵树进行投票来决定其分类结果。首先从包含了特征的训练集中选择所需特征,调用 RandomForestClassifier函数对该训练集训
58、练模型,再使用 predict 函数预测测试集的分类,再将分类结果是购买(tag=1 )的商品作为推荐结果,将其与测试集的真实分类结果比对,最后评估该模型对本实证研究数据的准确率,以F1 值为准。随机森林分类模型的RandomForestClassifier 函数, 包含了很多参数设置,其中着重研究n_estimators 和 criterion 参数。 n_estimators 表示森林里树的个数, 整数形式;criterion 表示衡量一个分类的质量,支持的标准可选择gini和 entropy 这两个值,其中gini 是基尼指标,entropy 是信息增益。贴关键代码df_predict = pd.read_csv("model/predict_RandomForest.csv")inner = pd.merge(left=df_result,right=df_predict,how="in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家庭电工实战施工方案
- 槽钢施工方案
- TSHAEPI 012-2024 低碳实践区近零碳排放实践区建设和评价指南
- 幼儿园环境创设家长参与2025年度合作协议
- 二零二五年度剧院包场合同-电影院租赁年度文化合作协议
- 2025年度跨境电商平台国际人才招聘与派遣合同
- 二零二五年度茶山租赁及茶叶种植与农业观光旅游开发合同
- 二零二五年度商业街房地产招商代理执行协议
- 2025年度金融科技股权分红与风险防范协议
- 二零二五年度健身房浴室共享租赁合同范本
- 2025年岳阳职业技术学院单招职业技能测试题库1套
- 《采购管理策略》课件
- 《校园安全教育(第二版)》 课件 项目一 走进安全教育;项目二 维护校园治安
- 高标准农田建设项目验收技术方案
- 《教育强国建设规划纲要(2024-2035年)》解读讲座
- 《义务教育语文课程标准》2022年修订版原版
- GB 30254-2024高压三相笼型异步电动机能效限定值及能效等级
- 天耀中华合唱简谱大剧院版
- (全)电梯安全风险管控清单
- GB/T 24353-2022风险管理指南
- 加油站应急预案演练
评论
0/150
提交评论