true代表你判断的是正确的,positive代表是正力(即是你的目标)
false代表你的判断是错误的,negative代表是负力(即不是你的目标)
本例子当中,女生是目标即positive,TP,T代表判断正确,P代表你认为它是一个女生,加起来就是它真的是一个女生。
FP,f代表判断错误,你认为它是一个女生,加起来就是你认为它是一个女生,实际它是一个男生
用于检验positive的有效性(判断正确是女生,判断错误,把女生当男生)
用于检验negtive的有效性(判断正确是男生,和判断错误,认为它是一个女生)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
admissions = pd.read_csv("D:\\test\machineLearning\\admissions.csv")
from sklearn.linear_model import LogisticRegression
log = LogisticRegression()
log.fit(admissions[["gpa"]], admissions["admit"])
pre_pro=log.predict(admissions[["gpa"]])
plt.scatter(admissions["gpa"],pre_pro) #看它是属于0还是1,1代表被录取,0代表不被录取
plt.show()
label=log.predict(admissions[["gpa"]])
admissions["predicted_label"]=label
print (admissions["predicted_label"].value_counts()) #预测结果的各种可能类型的统计
print (admissions.head(2))
0 598
1 46
Name: predicted_label, dtype: int64
admit gpa gre predicted_label
0 0 3.177277 594.102992 0
1 0 3.412655 631.528607 0
predit=admissions[label==admissions["admit"]] #计算本次预测的准确性
print (len(predit)/float(len(admissions)))
0.6459627329192547
#检查正力的效果即positive
true_positive_filter=(admissions["predicted_label"]==1)&(admissions["admit"]==1)
true_positive = len(admissions[true_positive_filter])
false_negtive_filter=(admissions["predicted_label"]==0)&(admissions["admit"]==1)
false_negtive = len(admissions[false_negtive_filter])
sensitive=true_positive/(true_positive+false_negtive)
print (sensitive)
0.12704918032786885
#检查负力的效果
true_negtive_filter=(admissions["predicted_label"]==0)&(admissions["admit"]==0)
true_negtive = len(admissions[true_negtive_filter])
false_positive_filter=(admissions["predicted_label"]==1)&(admissions["admit"]==0)
false_positive= len(admissions[false_positive_filter])
specifity=true_negtive/(true_negtive+false_positive)
print (specifity)
0.9625