机器学习入门之朴素贝叶斯

二月 26, 2018 0 条评论 1.07k 次阅读 0 人点赞
使用scikit-learn做游戏流失用户预测

在scikit-learn中,朴素贝叶斯有如下三种类型:

  • 高斯朴素贝叶斯
    一般用于连续型特征预测模型
  • 多项式朴素贝叶斯
    一般用于离散型特征预测模型
  • 伯努利朴素贝叶斯
    一般用于二项分布的特征预测模型

以下是这三种模型的用法

from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
from sklearn.naive_bayes import BernoulliNB

# 构造特征值 x
# 构造标注数据 y
clfG = GaussianNB().fit(x, y)
clfM = MultinomialNB().fit(x, y)
clfB = BernoulliNB().fit(x, y)

下面举一个具体的使用案例,利用朴素贝叶斯来预测游戏的流失用户。首先是准备用样本数据,根据对游戏的理解,选取了如下特征:

#文件说明
# 统计日期
# appid
# 用户标识
# 流失标识
# 前两周活跃天数
# 前两周累计登陆次数
# 前两周累计游戏时长
# 前一周活跃天数
# 前一周累计登陆次数
# 前一周累计游戏时长
# 最后登录日期
# 用户游戏生命天数
# 8 * 前一周累计登陆天数/用户游戏生命天数
# 活跃天数趋势
# 登陆次数周趋势
# 游戏时长周趋势
# 前两周累计付费天数
# 前两周累计付费
# 前两周累计付费次数
# 前两周累计付费天数
# 前两周累计付费
# 前两周累计付费次数
# 付费天数周趋势
# 付费金额周趋势

下面开始读入数据

import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline

df=pd.read_table("lost_user_sample", header = None)

构造样本数据

y=df[3]
print y.values
x=df[[4,7,  5,8,  6,9,  18,21,  19,22,  20,23,  15,16,17,  24,25]]
print x.values

分别使用高斯朴素贝叶斯、多项式朴素贝叶斯来做预测

from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
from sklearn.cross_validation import train_test_split 
from sklearn import metrics

print "总样本数:",len(y)
x_data_train,x_data_test,y_data_train,y_data_test = train_test_split(x, y, test_size=0.2, random_state=1)
train_count = len(y_data_train)
print "训练样本数:", train_count


#--------------------------------------------------------
print "\n\nGaussianNB:"
clf = GaussianNB().fit(x_data_train, y_data_train)
acc_test = clf.score(x_data_test,y_data_test)
acc_all = clf.score(x,y)

print "测试集精度:" , acc_test
print "总精度:" , acc_all

y_pred = clf.predict(x_data_test)
print metrics.accuracy_score(y_data_test, y_pred)
print metrics.confusion_matrix(y_data_test, y_pred)
print metrics.recall_score(y_data_test, y_pred)

#--------------------------------------------------------
print "\n\nMultinomialNB:"
clf_MNB = MultinomialNB().fit(x_data_train,y_data_train)
acc_test = clf_MNB.score(x_data_test,y_data_test)
acc_all = clf_MNB.score(x,y)

print "测试集精度:" , acc_test
print "总精度:" , acc_all


y_pred = clf_MNB.predict(x_data_test)
print metrics.accuracy_score(y_data_test, y_pred)
print metrics.confusion_matrix(y_data_test, y_pred)
print metrics.recall_score(y_data_test, y_pred)

巨人肩上的矮子

互联网从业者

文章评论(0)