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

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

第四章 朴素贝叶斯-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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5689310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存