第四章 朴素贝叶斯-Kaggle比赛之“旧金山犯罪分类预测“

#Kaggle比赛之"旧金山犯罪分类预测"
#导入相应的包
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.naive_bayes import BernoulliNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import log_loss

pd.set_option('display.max_columns', None) # 设置显示最大列,None为显示所有列

#----------------------------2、导入数据集--------------------------
train=pd.read_csv('../MLinAction_source/Kaggle/train.csv',parse_dates=['Dates'])
test=pd.read_csv('../MLinAction_source/Kaggle/test.csv',parse_dates=['Dates'],index_col=0)
#数据集中每一列的含义
'''
    Date:日期
    Category:犯罪类型(标签)
    Descript:对犯罪更详细的描述
    DayOfWeek:星期几
    PdDistrict:所属警区
    Resolution:处理结果
    Address:发生街区位置
    X and Y:GPS坐标
'''
#----------------------------3、特征预处理--------------------------
#sklearn.preprocessing模块中LabelEncoder函数可以对类别做编号
#对犯罪类别:Category;用LabelEncoder进行编号
leCrime=LabelEncoder()
crime=leCrime.fit_transform(train.Category) #39种犯罪类型  把犯罪类型变成数字 1-39
# print('--处理后的crime字段--:\n',crime)

#用get_dummies因子化星期几、街区、小时等特征
days=pd.get_dummies(train.DayOfWeek)  #所在星期几就为1  其他为0
# print('--处理后的DayOfWeek--:\n',days.head())
district=pd.get_dummies(train.PdDistrict) #所属警区就为1  其他为0
# print('--处理后的PdDistrict--:\n',district.head())
hour=train.Dates.dt.hour
hour=pd.get_dummies(hour) #所属小时就为1  其他为0
# print('--处理后的hour--:\n',hour.head())

#组合特征形成训练集
trainData=pd.concat([hour,days,district],axis=1) #将特征将进行左右拼接  axis=0为上下拼接
trainData['cirme']=crime #追加标签列
# print('--处理后的trainData--:\n',trainData.head())

#得到测试集
days=pd.get_dummies(test.DayOfWeek)
district=pd.get_dummies(test.PdDistrict)
hour=test.Dates.dt.hour
hour=pd.get_dummies(hour)
testData=pd.concat([hour,days,district],axis=1)
# print('--处理后的trainData--:\n',testData.head())

#----------------------------4、切分训练集并建模--------------------------
#切分数据集
X_train,X_test,y_train,y_test=train_test_split(trainData.iloc[:,:-1], #不包含最后一列
                                               trainData.iloc[:,-1], #只要最后一列-->标签
                                               test_size=0.2)

#----------------------------5、训练模型--------------------------
BNB=BernoulliNB()
BNB.fit(X_train,y_train)

#----------------------------6、计算损失函数--------------------------
propa=BNB.predict_proba(X_test)
logLoss=log_loss(y_test,propa)
print("损失:",logLoss)

#----------------------------7、使用模型预测testData--------------------------
print(BNB.predict(testData))

旧金山犯罪分类数据集:
链接
提取码:1gh8

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值