你们在穿越火线里怎么炸房总共花去了多少RBM __

26739人阅读
机器学习(40)
代码(12)
& & & & &本文的所有代码均可在&&找到,欢迎点星星。
& & & & & 推荐系统(主要是CF)是我在参加百度的电影推荐算法比赛的时候才临时学的,虽然没拿什么奖,但是知识却是到手了,一直想写一篇关于推荐系统的文章总结下,这次借着完善DML写一下,权当是总结了。不过真正的推荐系统当然不会这么简单,往往是很多算法交错在一起,本文只是入门水平的总结罢了。 (本文所用测试数据是)
& & & & & 本文采用的评测标准是,数值越小算法越好,在movielens100k 的 u1数据上对每个要求预测的评分输出训练集总的平均分,其RMSE是:
& & & & & & & &&
二.Item Based &and User Based
& & & &&Item-based和User-Based是CF算法中最基础的两个了,其算法思想很intuitive:
& & & & &User-based就是把与你有相同爱好的用户所喜欢的物品(并且你还没有评过分)推荐给你
& & & &&(图自【1】)
& & & Item-based则与之相反,把和你之前喜欢的物品近似的物品推荐给你:
& & & &&(图自【1】)
& & &更一般的,我们此次使用的数据集是要求你预测某个用户对某个item的评分,以Item-based为例,使用上面提到的算法思想就是检测该用户评过的所有物品和待预测物品的相似度,而两个物品的相似度我们可以找出所有同时对两个物品进行评价的评分,然后计算其,按照相似度计算加权平均值即可,具体过程可以看下面的实现(和《集体智慧编程》中的类似)
from __future__ import division
import numpy as np
import scipy as sp
Item_based_C:
def __init__(self,X):
self.X=np.array(X)
print &the input data size is &,self.X.shape
self.movie_user={}
self.user_movie={}
self.ave=np.mean(self.X[:,2])
for i in range(self.X.shape[0]):
uid=self.X[i][0]
mid=self.X[i][1]
rat=self.X[i][2]
self.movie_user.setdefault(mid,{})
self.user_movie.setdefault(uid,{})
self.movie_user[mid][uid]=rat
self.user_movie[uid][mid]=rat
self.similarity={}
def sim_cal(self,m1,m2):
self.similarity.setdefault(m1,{})
self.similarity.setdefault(m2,{})
self.movie_user.setdefault(m1,{})
self.movie_user.setdefault(m2,{})
self.similarity[m1].setdefault(m2,-1)
self.similarity[m2].setdefault(m1,-1)
if self.similarity[m1][m2]!=-1:
return self.similarity[m1][m2]
for user in self.movie_user[m1]:
if user in self.movie_user[m2]:
si[user]=1
if (n==0):
self.similarity[m1][m2]=1
self.similarity[m2][m1]=1
s1=np.array([self.movie_user[m1][u] for u in si])
s2=np.array([self.movie_user[m2][u] for u in si])
sum1=np.sum(s1)
sum2=np.sum(s2)
sum1Sq=np.sum(s1**2)
sum2Sq=np.sum(s2**2)
pSum=np.sum(s1*s2)
num=pSum-(sum1*sum2/n)
den=np.sqrt((sum1Sq-sum1**2/n)*(sum2Sq-sum2**2/n))
if den==0:
self.similarity[m1][m2]=0
self.similarity[m2][m1]=0
self.similarity[m1][m2]=num/den
self.similarity[m2][m1]=num/den
return num/den
def pred(self,uid,mid):
sim_accumulate=0.0
rat_acc=0.0
for item in self.user_movie[uid]:
sim=self.sim_cal(item,mid)
if sim&0:continue
#print sim,self.user_movie[uid][item],sim*self.user_movie[uid][item]
rat_acc+=sim*self.user_movie[uid][item]
sim_accumulate+=sim
#print rat_acc,sim_accumulate
if sim_accumulate==0: #no same user rated,return average rates of the data
return rat_acc/sim_accumulate
def test(self,test_X):
test_X=np.array(test_X)
print &the test data size is &,test_X.shape
for i in range(test_X.shape[0]):
pre=self.pred(test_X[i][0],test_X[i][1])
output.append(pre)
#print pre,test_X[i][2]
sums+=(pre-test_X[i][2])**2
rmse=np.sqrt(sums/test_X.shape[0])
print &the rmse on test data is &,rmse
return output& & & sim_cal()为相似度计算,pred(uid,mid)预测uid号用户对mid号电影评分,然后我们在test()中计算RMSE,来看看结果:
& &可以看到与全部输出平均值比较有一定的提升,但是效果似乎并不好,因为这个算法确实有些简单,但是这个算法的思想对CF算法都很有指导意义
三.matrix&factorization model 和 Baseline Predictors
& & & & &这里没有实现是因为下面的SVD其实就是matrix factorization model和Baseline Predictor的结合,所以为了方便我们先在这里介绍这两个东西.
& 1.matrix factorization model
& & & & &把我们的用户评分想象成一个表:
& & & & &&(图忘了是哪的了....)
& & & 每一行代表一个用户,每一列代表一个物品,这其实就是一个矩形,只是我们拥有的这个矩形可能是非常稀疏的,也就是我们知道的评分占总量很少,,但现在我们知道它是一个矩形,一个矩形自然可以表示为另两个矩形的乘积:
& & &这也就是matrix factorization model的原理了,我们需要做的就是通过已有数据来学习右边的两个矩形,更intuitive的你可以把总的矩形里的每个评分看成是该用户的特征向量与物品特征向量的内积:(这里符号变得有些多,你理解了意思就成)
& & & & & & & & &&
& &2.Baseline Predictors
& & & & Baseline Predictors就简单多了,我们设定μ是平均值,然后分别用bi和bu来代表具体用户和物品的“偏好”,也就是
& & & & 这两个参数我们当然可以当成一个优化任务来计算,比如最小二乘:
& & & & 也可以用比较快的方法来,因为实际上这就是经验似然:
& & & & & &&
四.SVD and ++ and &so on
&(图来自【2】)
& 1.SVD及其衍生算法的原理
& & & & & & SVD算法其实就是上面介绍的matrix factorization的一种,加上baseline predictor算是一种优化而已,最简单的SVD是优化下面的Loss function:
& & & & & &&
& & & & & &采用随机梯度下降进行优化:
& & & & & & & &&
& & & & & &虽然看起来比较简单,但实际上对预测的效果已经超出Item-based很多了,而从SVD衍生出很多其它的算法,利用了更多的信息,我们在这里只予以介绍而不加实践。
& & & & & &SVD++
& & & & & & & & &可以看到,SVD中并没有利用好一个用户评价了哪些电影这种信息,这代表无论评分高低,在看电影之前这些电影对他来说是有吸引力的,更一般的,如果你有用户查看过电影介绍的数据,同样也可以加以利用,SVD++就是加入了这些信息:
& & & & & & & &
& & & & & & & &R(u)表示用户rate过的电影,这样加入参数后使模型更加复杂了,但其效果也就更好了,具体的优化过程就不贴了,反正还是那样,对Loss function求导而已。
& & & &timeSVD++
& & & & & & & & 无论是netflix还是movielens的数据,它的最后一列是用户作出该评价的时间,timeSVD++就是将时间这个信息加以了利用,比较直观的理解就是影片的受欢迎程度可能是随着时间的变化而变化的,某些电影可能还具有周期性,如何加入这个信息呢?:
& & & & & & & & 是pu成为一个随着时间变化而变化的参数:
& & & & & & & & & & & & &&
& & & & & & & & & & & &
& & & & & & & & & & &&
& & & & & & & & &
& 2.SVD的实现
& & & & & & 说了那么多高大上的衍生算法,我们还是来实现一下最基础的SVD吧:
& & & & & & &
from __future__ import division
import numpy as np
import scipy as sp
from numpy.random import random
def __init__(self,X,k=20):
is the length of vector
self.X=np.array(X)
self.ave=np.mean(self.X[:,2])
print &the input data size is &,self.X.shape
self.bi={}
self.bu={}
self.qi={}
self.pu={}
self.movie_user={}
self.user_movie={}
for i in range(self.X.shape[0]):
uid=self.X[i][0]
mid=self.X[i][1]
rat=self.X[i][2]
self.movie_user.setdefault(mid,{})
self.user_movie.setdefault(uid,{})
self.movie_user[mid][uid]=rat
self.user_movie[uid][mid]=rat
self.bi.setdefault(mid,0)
self.bu.setdefault(uid,0)
self.qi.setdefault(mid,random((self.k,1))/10*(np.sqrt(self.k)))
self.pu.setdefault(uid,random((self.k,1))/10*(np.sqrt(self.k)))
def pred(self,uid,mid):
self.bi.setdefault(mid,0)
self.bu.setdefault(uid,0)
self.qi.setdefault(mid,np.zeros((self.k,1)))
self.pu.setdefault(uid,np.zeros((self.k,1)))
if (self.qi[mid]==None):
self.qi[mid]=np.zeros((self.k,1))
if (self.pu[uid]==None):
self.pu[uid]=np.zeros((self.k,1))
ans=self.ave+self.bi[mid]+self.bu[uid]+np.sum(self.qi[mid]*self.pu[uid])
elif ans&1:
return ans
def train(self,steps=20,gamma=0.04,Lambda=0.15):
for step in range(steps):
print 'the ',step,'-th
step is running'
rmse_sum=0.0
kk=np.random.permutation(self.X.shape[0])
for j in range(self.X.shape[0]):
uid=self.X[i][0]
mid=self.X[i][1]
rat=self.X[i][2]
eui=rat-self.pred(uid,mid)
rmse_sum+=eui**2
self.bu[uid]+=gamma*(eui-Lambda*self.bu[uid])
self.bi[mid]+=gamma*(eui-Lambda*self.bi[mid])
temp=self.qi[mid]
self.qi[mid]+=gamma*(eui*self.pu[uid]-Lambda*self.qi[mid])
self.pu[uid]+=gamma*(eui*temp-Lambda*self.pu[uid])
gamma=gamma*0.93
print &the rmse of this step on train data is &,np.sqrt(rmse_sum/self.X.shape[0])
#self.test(test_data)
def test(self,test_X):
test_X=np.array(test_X)
#print &the test data size is &,test_X.shape
for i in range(test_X.shape[0]):
pre=self.pred(test_X[i][0],test_X[i][1])
output.append(pre)
#print pre,test_X[i][2]
sums+=(pre-test_X[i][2])**2
rmse=np.sqrt(sums/test_X.shape[0])
print &the rmse on test data is &,rmse
return output
& & & & & & & & &
行数各种少有木有,我们测试一下:在向量长度k=30,执行轮数steps=25,参数gamma=0.04,Lambda=0.15
a=SVD_C(train_X,30)
a.test(test_X)结果:
& & & 可以达到0.927左右,比之前的提高已经很多了,事实上如果你对参数进一步优化,并且增加向量大小和迭代步数,在movielens1M的数据上可以到到0.87左右的rmse,这就是最烦人的调参了,我就不在这里详述这种痛苦的经历了.......
五.CF with RBM
& & & 又到了相当的蛋疼RBM了,RBM的CF,单模型效果和SVD相似,只是error在不同的地方,所以结合起来可以提升效果,总觉得RBM不够intuitive,这次实现也遇到很多困难,所以这一节的质量不高,见谅
& & & & & & 首先……你得了解一下RBM……一个能量模型,Hinton的招牌作品,DeepLearning就是由这个火起来的(DBN)
& & & & & & 这里我就不细讲RBM了,有兴趣大家找下面的ref看,直接看看CF FOR RBM这个模型吧:
& & & & & &
& & & & & & &严格来说这是condional RBM,基本思路是把V用softmax的形式表示成一个向量,然后去掉改用户没有评价的部分,作为RBM的V层,共用一个Hidden层,主要参数有:Vik,Wikj,Dij,vb(bias of visual layer), hb(bias of hidden)。
& & & & & & &这是主要的学习过程,其中的公式参见【3】:
& & & & &&
& & & & &看着是有点烦,但如果你看懂了这个结构,还是很简单明了的,与普通的RBM比较,只是在visible层的sample和update有一定的变化,主要体现在:a)sample一个v[item]的时候按随机值向上累计v[item][1...5],超过随机值的那个值设置为1,其它为0;b)update的时候按照softmax的格式来处理每一组v[item]。
& & & & 这个实现写了两三天了,而且目前效果不好,RMSE只能到0.98,不知道哪里出了问题,我已经排查过好几次了,不过还是发到这里希望大家能够帮我找出问题,代码可读性也不是很好,因为为了向量化使用了大量的切片操作,堪称丑陋,绝对没有一些C++版本的代码可读性好,但还是发在这里吧,希望有人能加以指正,万分感谢。sigh……
from __future__ import division
import numpy as np
import scipy as sp
from numpy.random import normal,random,uniform
this code still have some problem,I can only get 0.98 rmse on movielens data
If you can figure it out,PLEASE!!! tell me .
class TEMP:
def __init__(self):
self.AccVH=None
self.CountVH=None
self.AccV=None
self.temp.CountV=None
self.temp.AccH=None
def __init__(self,X,UserNum=943,HiddenNum=30,ItemNum=1682,Rate=5):
self.X=np.array(X)
self.HiddenNum=HiddenNum
self.ItemNum=ItemNum
self.UserNum=UserNum
self.Rate=Rate
self.movie_user={}
self.user_movie={}
self.bik=np.zeros((self.ItemNum,self.Rate))
self.Momentum={}
self.Momentum['bik']=np.zeros((self.ItemNum,self.Rate))
self.UMatrix=np.zeros((self.UserNum,self.ItemNum))
self.V=np.zeros((self.ItemNum,self.Rate))
for i in range(self.X.shape[0]):
uid=self.X[i][0]-1
mid=self.X[i][1]-1
rat=self.X[i][2]-1
self.UMatrix[uid][mid]=1
self.bik[mid][rat]+=1
self.movie_user.setdefault(mid,{})
self.user_movie.setdefault(uid,{})
self.movie_user[mid][uid]=rat
self.user_movie[uid][mid]=rat
self.W=normal(0,0.01,(self.ItemNum,self.Rate,HiddenNum))
self.Momentum['W']=np.zeros(self.W.shape)
self.initialize_bik()
self.bj=np.zeros((HiddenNum,1)).flatten(1)
self.Momentum['bj']=np.zeros(self.bj.shape)
self.Dij=np.zeros((self.ItemNum,self.HiddenNum))
self.Momentum['Dij']=np.zeros((self.ItemNum,self.HiddenNum))
def initialize_bik(self):
for i in range(self.ItemNum):
total=np.sum(self.bik[i])
if total&0:
for k in range(self.Rate):
if self.bik[i][k]==0:
self.bik[i][k]=-10
self.bik[i][k]=np.log(self.bik[i][k]/total)
def test(self,test_X):
test_X=np.array(test_X)
#print &the test data size is &,test_X.shape
for i in range(test_X.shape[0]):
pre=self.pred(test_X[i][0]-1,test_X[i][1]-1)
#print test_X[i][2],pre
output.append(pre)
#print pre,test_X[i][2]
sums+=(pre-test_X[i][2])**2
rmse=np.sqrt(sums/test_X.shape[0])
print &the rmse on test data is &,rmse
return output
def pred(self,uid,mid):
V=self.clamp_user(uid)
pj=self.update_hidden(V,uid)
vp=self.update_visible(pj,uid,mid)
for i in range(self.Rate):
ans+=vp[i]*(i+1)
return ans
def clamp_user(self,uid):
V=np.zeros(self.V.shape)
for i in self.user_movie[uid]:
V[i][self.user_movie[uid][i]]=1
def train(self,para,test_X,cd_steps=3,batch_size=30,numEpoch=100,Err=0.00001):
for epo in range(numEpoch):
print 'the ',epo,'-th
epoch is running'
kk=np.random.permutation(range(self.UserNum))
bt_count=0
while bt_count&=self.UserNum:
btend=min(self.UserNum,bt_count+batch_size)
users=kk[bt_count:btend]
temp.AccVH=np.zeros(self.W.shape)
temp.CountVH=np.zeros(self.W.shape)
temp.AccV=np.zeros(self.V.shape)
temp.CountV=np.zeros(self.V.shape)
temp.AccH=np.zeros(self.bj.shape)
watched=np.zeros(self.UMatrix[0].shape)
for user in users:
watched[self.UMatrix[user]==1]=1
sv=self.clamp_user(user)
pj=self.update_hidden(sv,user)
temp=self.accum_temp(sv,pj,temp,user)
#AccVH+=pj*
for step in range(cd_steps):
sh=self.sample_hidden(pj)
vp=self.update_visible(sh,user)
sv=self.sample_visible(vp,user)
pj=self.update_hidden(sv,user)
deaccum_temp=self.deaccum_temp(sv,pj,temp,user)
self.updateall(temp,batch_size,para,watched)
#updateall============================================
bt_count+=batch_size
self.test(test_X)
def accum_temp(self,V,pj,temp,uid):
for i in self.user_movie[uid]:
temp.AccVH[i]+=np.dot(V[i].reshape(-1,1),pj.reshape(1,-1))
temp.CountVH[i]+=1
temp.AccV[i]+=V[i]
temp.CountV[i]+=1
temp.AccH+=pj
return temp
def deaccum_temp(self,V,pj,temp,uid):
for i in self.user_movie[uid]:
temp.AccVH[i]-=np.dot(V[i].reshape(-1,1),pj.reshape(1,-1))
temp.AccV[i]-=V[i]
temp.AccH-=pj
return temp
def updateall(self,temp,batch_size,para,watched):
delatW=np.zeros(temp.CountVH.shape)
delatBik=np.zeros(temp.CountV.shape)
delatW[temp.CountVH!=0]=temp.AccVH[temp.CountVH!=0]/temp.CountVH[temp.CountVH!=0]
delatBik[temp.CountV!=0]=temp.AccV[temp.CountV!=0]/temp.CountV[temp.CountV!=0]
delataBj=temp.AccH/batch_size
self.Momentum['W'][temp.CountVH!=0]=self.Momentum['W'][temp.CountVH!=0]*para['Momentum']
self.Momentum['W'][temp.CountVH!=0]+=para['W']*(delatW[temp.CountVH!=0]-para['weight_cost']*self.W[temp.CountVH!=0])
self.W[temp.CountVH!=0]+=self.Momentum['W'][temp.CountVH!=0]
self.Momentum['bik'][temp.CountV!=0]=self.Momentum['bik'][temp.CountV!=0]*para['Momentum']
self.Momentum['bik'][temp.CountV!=0]+=para['bik']*delatBik[temp.CountV!=0]
self.bik[temp.CountV!=0]+=self.Momentum['bik'][temp.CountV!=0]
self.Momentum['bj']=self.Momentum['bj']*para['Momentum']
self.Momentum['bj']+=para['bj']*delataBj
self.bj+=self.Momentum['bj']
for i in range(self.ItemNum):
if watched[i]==1:
self.Momentum['Dij'][i]=self.Momentum['Dij'][i]*para['Momentum']
self.Momentum['Dij'][i]+=para['D']*temp.AccH/batch_size
self.Dij[i]+=self.Momentum['Dij'][i]
np.seterr(all='raise')
def update_hidden(self,V,uid):
r=self.UMatrix[uid]
for i in self.user_movie[uid]:
if hp==None:
hp=np.dot(V[i],self.W[i]).flatten(1)
hp+=np.dot(V[i],self.W[i]).flatten(1)
pj=1/(1+np.exp(-self.bj-hp+np.dot(r,self.Dij).flatten(1)))
#pj=1/(1+np.exp(-self.bj-hp))
def sample_hidden(self,pj):
sh=uniform(size=pj.shape)
for i in range(sh.shape[0]):
if sh[i]&pj[i]:
def update_visible(self,sh,uid,mid=None):
if mid==None:
vp=np.zeros(self.V.shape)
for i in self.user_movie[uid]:
vp[i]=np.exp(self.bik[i]+np.dot(self.W[i],sh))
vp[i]=vp[i]/np.sum(vp[i])
vp=np.exp(self.bik[mid]+np.dot(self.W[mid],sh))
vp=vp/np.sum(vp)
def sample_visible(self,vp,uid):
sv=np.zeros(self.V.shape)
for i in self.user_movie[uid]:
r=uniform()
for k in range(self.Rate):
r-=vp[i][k]
if r&=0:break
sv[i][k]=1
【Reference】
& &【1】探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 – 协同过滤&
& &【2】Yehuda Koren and Robert Bell, & &”Advances in Collaborative Filtering”
& &【3】Gilles Louppe and Pierre Geurts,&Collaborative filtering Scalable approaches using restricted Boltzmann machines&
& &【4】SALAKHUTDINOV, R., MNIH, A., ANDHINTON, G. E. Restricted Boltzmann machines for collaborative filtering. InProceedings of the 24th international con-ference on Machine learning (2007), ACM, p. 798.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:814088次
积分:5630
积分:5630
排名:第3555名
原创:79篇
评论:686条
DarkScope,喜欢机器学习和一些ACM算法//学习ing//求交流,求指教!=新浪微博
阅读:163728
(2)(1)(1)(1)(1)(2)(2)(4)(1)(1)(5)(2)(2)(5)(4)(5)(3)(39)后使用快捷导航没有帐号?
- - - - - - -
查看: 772|回复: 14
你们玩cf花了多少钱了,我大概花了四五百的样子,以后再...
主题帖子积分
Lv.1, 积分 19, 距离下一级还需 31 积分
Lv.1, 积分 19, 距离下一级还需 31 积分
你们玩花了多少钱了,我大概花了四五百的样子,以后再也不往里扔钱了,我们不是买不起英雄,不是买不起烟雾头,只是觉得玩个游戏买各种道具,是不是太二了
本版排名:
本版声望:
主题帖子积分
Lv.1, 积分 19, 距离下一级还需 31 积分
Lv.1, 积分 19, 距离下一级还需 31 积分
很2,现在的小学生都很有钱
本版排名:
本版声望:
小伙伴1530
主题帖子积分
Lv.5, 积分 2423, 距离下一级还需 577 积分
Lv.5, 积分 2423, 距离下一级还需 577 积分
我玩cf从来都不充钱,没意思
本版排名:
本版声望:
主题帖子积分
Lv.3, 积分 844, 距离下一级还需 156 积分
Lv.3, 积分 844, 距离下一级还需 156 积分
没花,就这样平平淡淡的玩
本版排名:
本版声望:
主题帖子积分
Lv.2, 积分 583, 距离下一级还需 17 积分
Lv.2, 积分 583, 距离下一级还需 17 积分
我花了30,心疼死了
本版排名:
本版声望:
主题帖子积分
Lv.2, 积分 583, 距离下一级还需 17 积分
Lv.2, 积分 583, 距离下一级还需 17 积分
那个后悔啊
本版排名:
本版声望:
主题帖子积分
Lv.11, 积分 20337, 距离下一级还需 9663 积分
Lv.11, 积分 20337, 距离下一级还需 9663 积分
你跟我差不多,我也是啊4百多
[color=Lime]锄禾日当午,汗滴禾下土。谁知盘中餐,粒粒皆辛苦。[/color]
本版排名:
本版声望:
主题帖子积分
Lv.11, 积分 20337, 距离下一级还需 9663 积分
Lv.11, 积分 20337, 距离下一级还需 9663 积分
主要是买那个生化弹夹和机枪弹夹,以前我喜欢生化
[color=Lime]锄禾日当午,汗滴禾下土。谁知盘中餐,粒粒皆辛苦。[/color]
本版排名:
本版声望:
小伙伴1746
主题帖子积分
Lv.7, 积分 4291, 距离下一级还需 709 积分
Lv.7, 积分 4291, 距离下一级还需 709 积分
本版排名:
本版声望:
小伙伴13508
主题帖子积分
Lv.11, 积分 18878, 距离下一级还需 11122 积分
Lv.11, 积分 18878, 距离下一级还需 11122 积分
我也不记得了
本版排名:
本版声望:
小伙伴16188
主题帖子积分
Lv.11, 积分 23047, 距离下一级还需 6953 积分
Lv.11, 积分 23047, 距离下一级还需 6953 积分
楼主悬崖勒马了
本版排名:
本版声望:
主题帖子积分
Lv.2, 积分 379, 距离下一级还需 221 积分
Lv.2, 积分 379, 距离下一级还需 221 积分
救世主模式的时候就退坑了 花了2000多吧&&最近又入坑 就花了200
本版排名:
本版声望:
小伙伴2669
主题帖子积分
Lv.10, 积分 11474, 距离下一级还需 3526 积分
Lv.10, 积分 11474, 距离下一级还需 3526 积分
呵呵呵 看看我签名&&就知道
[img]/photos//m_14_08272.jpg[/img]
本版排名:
本版声望:
主题帖子积分
Lv.3, 积分 602, 距离下一级还需 398 积分
Lv.3, 积分 602, 距离下一级还需 398 积分
本版排名:
本版声望:
主题帖子积分
Lv.2, 积分 416, 距离下一级还需 184 积分
Lv.2, 积分 416, 距离下一级还需 184 积分
1000多吧& && && &&&
本版排名:
本版声望:
活动达人勋章
根据参与论坛活动活跃度进行手动颁发已经不知道在cf在花了多少钱了,你们花了多少呢?_穿越火线吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:5,822,733贴子:
已经不知道在cf在花了多少钱了,你们花了多少呢?
从三年前就开始玩,那时候没有v还好,买装备没花多少,后来英雄一出,就一直买,还有角色,续费枪,都不知道花了多少
随后会放制作过程
掐指一算,小编已经步入...
据说学渣看完都把课本扔了
少年时期的本人钱不多,...
上海推出小小男子汉教育...
楼楼在排序的时候,一度...
时间在不停的流逝,留下...
这里是电视剧组,我是蓝白
喜欢抠伤口的结痂
时尚时尚最时尚,自拍肯...
我称自己为斜杠青年-龙...
百度美女吧,原生态美女...
吴莫愁设计款,杜蕾斯分享爱公益礼盒,和爱人零距离,和公益零距离。
我是从初三开始玩,算上今年已已经四年了吧
以前就喜欢玩生化!
...我玩了六年了,六年级开始玩。冲了两万多吧。
7000吧,英雄枪花了3500而已,全用在买别的东西了
生化特别花钱,总是得买装备
那时候没有v,cf玩的还算祥和,可以用实力压制装备,现在,真的是没v活不下去了
买了第一把v后,又想买别的
于是一把一把都上手了
现在加起来刚好买一把火麒麟
一次新的奇迹玩法?你想成为霸服大魔王吗?
我没v,裸装,但是战绩照样不会太差。。。
我就是进来问问谁借号的
楼主今年大一,开始买装备的钱都是花家里,不过,现在都是自己赚的!
我相信大多买v的也都是学生党吧!
你们买v的钱是哪来的呢?
呵呵  ✎﹏﹏﹏﹏围观是一种态度,十五字是一种责任。
没超过一百块。
从cf出v后,所有的v都是我自己在网上做wangjian赚,也没具体算过充了多少钱!
玩了两年多,花了……额…………758吧……(如果没记错应该是屠龙和玫瑰捆绑销售的价钱)
玩了6年CF,一把V没买
同大一,不过被坑了2000左右,准备继续被坑668
花多少钱不重要,重要的是技术
玩了七年了,花了五万多,做了这么多年建筑设计,总共就赚了10几万,结果,好后悔冲钱玩cf
玩了3年,一分没花
贴吧热议榜
使用签名档&&
保存至快速回贴}

我要回帖

更多关于 穿越火线里怎么炸房 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信