模型的搭建与使用 | 更文挑战
1.划分训练集和测试集
通过如下代码将数据划分为训练集和测试集,其中训练集用于训练模型,而测试集用于评估模型的预测效果。
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=1)
其中X_train、y_train为训练集中的特征变量和目标变量数据,X_test、y_test则为测试集中的特征变量和目标变量数据。本案例的569组数据并不算多,因此设定test_size为0.2,即按8∶2的比例来划分训练集和测试集,则训练集有455组数据,测试集有114组数据。
每次运行程序时,train_test_split()函数都是随机划分数据的,如果想每次划分数据都得到一致的结果,可以设置random_state参数为1或其他数字。
2.模型搭建
朴素贝叶斯模型的搭建相对比较容易,代码如下。
from sklearn.naive_bayes import GaussianNB
nb_clf = GaussianNB() # 高斯朴素贝叶斯模型
nb_clf.fit(X_train,y_train)
至此,一个朴素贝叶斯模型便搭建完成了,之后就可以利用模型来进行预测。此时之前划分的测试集就可以发挥作用了,利用测试集可以进行预测并评估模型的预测效果。
3.模型预测与评估
先把测试集中的数据导入模型中进行预测,代码如下,其中nb_clf就是上面搭建的朴素贝叶斯模型。
y_pred = nb_clf.predict(X_test)
通过打印输出y_pred[:100]查看预测结果的前100项,如下图所示,0表示预测为恶性肿瘤,1表示预测为良性肿瘤。
利用创建DataFrame的相关知识点,汇总预测结果y_pred和测试集中的实际值y_test,代码如下。
a = pd.DataFrame() #创建一个空DataFrame
a['预测值']=list(y_pred)
a['实际值']=list(y_test)
生成的对比表格的前5行见下表。
可以看到,前5项的预测准确度为80%。通过如下代码可以查看所有测试集数据的预测准确度。
from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred,y_test)
第1行代码引入计算预测准确度的accuracy_score()函数;第2行代码将预测值y_pred和实际值y_test作为参数传入accuracy_score()函数中,便可计算出预测准确度。打印输出score的值为0.947,即预测准确度为94.7%,说明114组测试集数据中,约108组数据预测正确,6组数据预测错误。
朴素贝叶斯模型属于分类模型,所以也可以利用ROC曲线来评估其预测效果,其评估方法与逻辑回归模型和决策树模型的评估方法是一样的。
总结来说,朴素贝叶斯模型是一种非常经典的机器学习模型,它主要基于贝叶斯公式,在应用过程中会把数据集中的特征看成是相互独立的,而不需考虑特征间的关联关系,因此运算速度较快。相比于其他经典的机器学习模型,朴素贝叶斯模型的泛化能力稍弱,不过当样本及特征的数量增加时,其预测效果也是不错的。
转载自:https://juejin.cn/post/6978283058420154404