机器学习模型评估--(判断是否患有糖尿病)自用

#机器学习实现模型评估第二课
#用逻辑回归模型
#pima indian diabetes
#混淆矩阵,和模型的衡量以及其意义
#任务:通过怀孕次数,胰岛素水平,体重指标和年龄四个特征预测是否患有糖尿病

先读取文件with open as 老套路

#数据预处理
import pandas as pd
import numpy as np
import csv
#以下这个阅读路径的方式需要学习记住!!!
path =r'C:\Users\hhk\anaconda3\data\diabetes.csv'
with open(path,'rb') as csvfile:
    pima = pd.read_csv(path)  #pima=csv.readline(path)
pima.head(4) #查看前面几个

这里可以看下文件头几行是否正确显示。

我们去除Outcome这一列数据。

#这一段插入一下,用朴素叶贝斯去训练数据试一试

Xp = pima.drop(['Outcome'],axis = 1) #拿掉outcome这一列
yp = pima.loc[: , ["Outcome"]] 
#x,y的赋值
feature_names = ['Pregnancies','Insulin','BMI','Age']
X = pima[feature_names]  #赋值,取多列数据,直接中括号放进去就可以
y = pima.Outcome

然后用朴素贝叶斯去训练,大致方法差不多,先调用算法,然后填入数据

from sklearn.naive_bayes import CategoricalNB
model = CategoricalNB()  #建模
model.fit(Xp,yp) #开始训练数据
yp_predict_proba = model.predict_proba(Xp)
yp_predict = model.predict(Xp)
print(yp_predict_proba)
#依旧是计算准确度
from sklearn.metrics import accuracy_score
accuracy =  accuracy_score(yp,yp_predict)  #准确度在*¥%的样子,感觉还不错
print(accuracy)  

这里output是 0.8450520833333334

#数据分离
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,random_state= 0)
#random_state = 0 每一次都是一样的分离方式,可以复现
#测试数据集结果预测
y_pred = logreg.predict(X_test)
#使用准确率进行评估
from sklearn import metrics
print(metrics.accuracy_score(y_test,y_pred))

这里output是   0.6770833333333334

后面用到了混淆矩阵,大致是这样的。

#确认正负样本数据量
y_test.value_counts()
0    130
1     62
Name: Outcome, dtype: int64
#空准确率
max(y_test.mean(),1 - y_test.mean())
#计算展示混淆矩阵
print(metrics.confusion_matrix(y_test,y_pred))
[[114  16]
 [ 46  16]]

将四个因素,分别是正向正确率,正向错误率,负向正确率,负向错误率进行区分。

#四个因子赋值
confusion = metrics.confusion_matrix(y_test,y_pred)
TN = confusion[0,0]
FP = confusion[0,1]
FN = confusion[1,0]
TP = confusion[1,1]
print(TN,FP,FN,TP)
accuracy = (TP + TN)/ (TP + TN + FP + FN)
print(accuracy)
print(metrics.accuracy_score(y_test,y_pred))
0.6770833333333334
0.6770833333333334
#错误率
mis_rate = (FP + FN)/ (TP + TN + FP + FN)
print(mis_rate)
print(1 - metrics.accuracy_score(y_test,y_pred))
0.3229166666666667
0.32291666666666663
#灵敏度
recall = TP/(TP+FN)
print(recall)
0.25806451612903225
#特征值的计算
specificity = TN/(TN + FP)
print(specificity)
#精确度的计算
precision = TP /(TP + FP)
print(precision)
0.8769230769230769
0.5
f1_score = 2*precision*recall/(precision + recall)
print(f1_score)
0.3404255319148936

你可能感兴趣的:(机器学习,算法,神经网络)