三. 数据集类别和特征的选取
观察上图数据集,有日期、犯罪种类、描述、星期几、解决方案、地址及XY坐标等多列。我们将“犯罪类别”设置为类别,同时这里不将“罪行描述”、“X/Y坐标”、“结果”作为其特征。
四. 选择合适的朴素贝叶斯模型
sklearn提供了三种朴素贝叶斯模型,选择一个最适合的作为旧金山的犯罪预测。
模型名称
|
数据分布
|
特征特点
|
GaussianNB(高斯朴素贝叶斯模型)
|
连续式数据
|
特征的数据连续
|
BernoulliNB(伯努利朴素贝叶斯模型)
|
离散式数据
|
所有特征必须0或1,表示出现或不出现
|
MultinomialNB(多项式朴素贝叶斯模型)
|
离散式数据
|
适用于文本分类,计算某些词出现的频率
|
(1)高斯朴素贝叶斯模型适合连续数据,因为样本各特征都是离散特征所以不适合用此模型。
(2)伯努利朴素贝叶斯模型和多项式朴素贝叶斯模型都适合离散式数据,因为旧金山犯罪是个典型的伯努利分布,所以选择伯努利朴素贝叶斯模型。
五. 处理训练集数据的类别和特征
1.处理类别:调用sklearn的preprocessing库,使用LabelEncoder对犯罪类型编码。
le = preprocessing.LabelEncoder()
crime_type_encode = le.fit_transform(train_df['Category'])
2. 处理特征:将小时,星期几,所属警区的特征使用pandas库的get_dummies()功能因子化,得到哑变量(dummy_variable)。
哑变量:将不能定量处理的变量量化,构造只取“0”或“1”的人工变量,适合伯努利朴素贝叶斯模型。
例如将下图天气情况转换成哑变量:
hour = pd.to_datetime(train_df['Dates']).dt.hour # 从Dates列中抽取小时时间
# 将小时(0-24),星期(周一-周日) ,所属警区的特征使用pandas库的get_dummies()功能因子化,得到哑变量(dummy_variable)
hour = pd.get_dummies(hour)
day = pd.get_dummies(train_df['DayOfWeek'])
police_district = pd.get_dummies(train_df['PdDistrict'])
将三个特征功能因子化后如下:
(1)日期:
(2)警区:
(3)时间:
六. 合并训练集数据的特征
train_set = pd.concat([hour, day, police_district], axis = 1) # 将特征组合成一个DataFrame
合并完如下:
七. 将类别合并到数据集中
train_set['Crime type'] = crime_type_encode # 向特征组成的DataFrame添加新的一列类别
合并完如下:
八. 数据集的划分
1. 从训练数据集中分割出训练数据和测试数据
from sklearn.model_selection import train_test_split
X = train_set.loc[:, train_set.columns != 'Crime type']
y = train_set['Crime type']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=1)
数据集的划分如下:
2. 创建训练模型,将X_train,y_train放入模型
from sklearn.naive_bayes import BernoulliNB
model = BernoulliNB()
model.fit(X_train, y_train)
3. 将X_test放入刚刚生成的模型进行预测
y_pred = model.predict(X_test)
4. 将预测值与实际值进行比对,输出精确度的值
print("model accuracy:", metrics.accuracy_score(y_test, y_pred))
model accuracy: 0.22405051181479002
最终预测值为22%左右。结果表明:在旧金山,任何一天,任何一小时,任何一片警区,我们知道它会发生39种犯罪类型的哪一种的准确率在22%左右。
在1934到1963年间,
旧金山
因为它的高
犯罪
率而臭名昭著
我们这个项目的数据集包括了近12年的在
旧金山
发生的
犯罪
报告,给定了具体的时间和位置,我们的目标是
预测
出具体的
犯罪
种类。
二 数据概览
这个数据集中数据的特征并不多,但是样本量有一点大。特征有以下这些:
Dates - 案发的具体时间
Category- 案件的种类,也是我们要去
预测
的
Descript-案件描述(仅在训练集中有)
DayOfWeek- 星期几
PdDistrict- 属于哪个片区管辖
这里我参照的是http://blog.csdn.net/longxinchen_ml/article/details/50629613
这篇博客。import pandas as pd
import numpy as np
###############读入数据#################
#用pandas载入csv训练数据,并解析第一列为日期格式
train=pd.read_csv('F
贝叶斯分类之
旧金山
犯罪
类型分类
预测
学习七月算法
朴素贝叶斯
分类器中项目的一个例子,这也是一个Kaggle比赛的例子。通过训练来
预测
犯罪
类型。环境: win7 64位 python3.51、加载数据该数据是
旧金山
12年的
犯罪
记录,数据文件是一个csv文件可以使用pandas来加载数据,数据内容摘录:
Dates,Category,Descript,DayOfWeek,PdDistrict,Resolu
贝叶斯是经典的
机器学习
算法,
朴素贝叶斯
经常运用于
机器学习
的
案例
。比如说
文本分类/垃圾邮件的分类/情感分析:在文本分类中,贝斯依旧占有一席之地,因为文本数据中,分布独立这个假设基本上成立的。
推荐系统:
朴素贝叶斯
和协同过滤一起使用,经常...
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.metric
概念什么的,就不多说了!就两个例题谈谈自己的想法。
当然千忘万忘,贝叶斯公式不能忘:P(A|B)=P(AB)/P(A)
还有全概率公式:P(A)=P(A|B1)P(B1) + P(A|B2)P(B2) + … + P(A|Bn)P(Bn)。
网上先找到一道例题。
这道例题只要百度搜索一下贝叶斯决策经典例题,百度文库里面就有。
图片里最后几个字是“专...