## 混淆矩阵

0TNFP
1FNTP

1. 上述表格中，行代表实际值，列代表预测值。

1. 0 代表 negative，1 代表 postive。

1. TN (True Negative) 表示实际值为 negative，预测值为 negative，预测 negative 正确。

1. FP (False Positive) 表示实际值为 negative，预测值为 positive，预测 positive 错误。

1. FN (False Negative) 表示实际值为 positive，预测值为 negative，预测 negative 错误。

1. TP (True Positive) 表示实际值为 positive，预测值为 positive，预测 positive 错误。

0998010
137

1. 9980 个人本身没有患癌症，同时算法也预测他们没有患癌症。

1. 10 个人没有患癌症，但是算法预测他们患有癌症。

1. 3 个人患有癌症，但是算法预测他们没有患癌症。

1. 7 个人患有癌症，算法预测他们患有癌症。

## 实例

```import numpy as np
from sklearn import datasets
X = digits.data
y = digits.target.copy()
y[digits.target==9] = 1
y[digits.target!=9] = 0```

```from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
log_reg.score(X_test, y_test)```

```from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_log_predict)
from sklearn.metrics import precision_score
precision_score(y_test, y_log_predict)
from sklearn.metrics import recall_score
recall_score(y_test, y_log_predict)
from sklearn.metrics import f1_score
f1_score(y_test, y_log_predict)```

## PR 曲线

```import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
X = digits.data
y = digits.target.copy()
y[digits.target==9] = 1
y[digits.target!=9] = 0
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
decision_scores = log_reg.decision_function(X_test)

from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
precisions = []
recalls = []
thresholds = np.arange(np.min(decision_scores), np.max(decision_scores), 0.1)
for threshold in thresholds:
y_predict = np.array(decision_scores >= threshold, dtype='int')
precisions.append(precision_score(y_test, y_predict))
recalls.append(recall_score(y_test, y_predict))```

```plt.plot(precisions, recalls)
plt.show()```

## ROC 曲线

ROC（Receiver Operation Characteristic Curve）用来描述 TPR 和 FPR 之间的关系，其中：

1. TPR (True Positive Rate) 表示真正率，被预测为正的正样本结果数 / 正样本实际数：TPR = TP /(TP + FN)

1. TNR (True Negative Rate) 表示真负率；被预测为负的负样本结果数 / 负样本实际数：TNR = TN /(TN + FP)

1. FPR (False Positive Rate) 表示假正率；被预测为正的负样本结果数 /负样本实际数：FPR = FP /(TN + FP）

1. FNR (False Negative Rate) 表示假负率；被预测为负的正样本结果数 / 正样本实际数：FNR = FN /(TP + FN）

### 实例

```import numpy as np
from sklearn import datasets
X = digits.data
y = digits.target.copy()
y[digits.target==9] = 1
y[digits.target!=9] = 0
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
decision_scores = log_reg.decision_function(X_test)
from sklearn.metrics import roc_curve
fprs, tprs, thresholds = roc_curve(y_test, decision_scores)
import matplotlib.pyplot as plt
plt.plot(fprs, tprs)
plt.show()```

ROC 曲线与图形边界围成的面积，作为衡量模型优劣的标准，面积越大，模型越优。