熊猫矩阵与绘图功能混淆(matplotlib,seaborn…)

pandas_confusion的Python项目详细描述


Latest VersionSupported Python versionsWheel formatLicenseDevelopment StatusDownloads monthlyRequirements StatusCode HealthCodacy BadgeBuild Status

熊猫混乱

一个PythonPandas实现confusion matrix

进行中的工作-自行承担风险

使用量

混淆矩阵

导入ConfusionMatrix

from pandas_confusion import ConfusionMatrix

定义实际值(y_actu)和预测值(y_pred

y_actu = ['rabbit', 'cat', 'rabbit', 'rabbit', 'cat', 'dog', 'dog', 'rabbit', 'rabbit', 'cat', 'dog', 'rabbit']
y_pred = ['cat', 'cat', 'rabbit', 'dog', 'cat', 'rabbit', 'dog', 'cat', 'rabbit', 'cat', 'rabbit', 'rabbit']

让我们定义一个(非二进制)混淆矩阵

confusion_matrix = ConfusionMatrix(y_actu, y_pred)
print("Confusion matrix:\n%s" % confusion_matrix)

您可以看到它

Predicted  cat  dog  rabbit  __all__
Actual
cat          3    0       0        3
dog          0    1       2        3
rabbit       2    1       3        6
__all__      5    2       5       12

混淆矩阵的matplotlib图

在ipython笔记本中,将此行作为第一个单元格添加

%matplotlib inline

您可以使用:

import matplotlib.pyplot as plt

confusion_matrix.plot()

如果不使用内联模式,则需要使用 矩阵图。

plt.show()
confusion\_matrix

混淆矩阵

标准化混淆矩阵的matplotlib图
confusion_matrix.plot(normalized=True)
plt.show()
confusion\_matrix\_norm

混淆矩阵范数

二元混淆矩阵

导入BinaryConfusionMatrixBackend

from pandas_confusion import BinaryConfusionMatrix, Backend

定义实际值(y_actu)和预测值(y_pred

y_actu = [ True,  True, False, False, False,  True, False,  True,  True,
           False,  True, False, False, False, False, False,  True, False,
            True,  True,  True,  True, False, False, False,  True, False,
            True, False, False, False, False,  True,  True, False, False,
           False,  True,  True,  True,  True, False, False, False, False,
            True, False, False, False, False, False, False, False, False,
           False,  True,  True, False,  True, False,  True,  True,  True,
           False, False,  True, False,  True, False, False,  True, False,
           False, False, False, False, False, False, False,  True, False,
            True,  True,  True,  True, False, False,  True, False,  True,
            True, False,  True, False,  True, False, False,  True,  True,
           False, False,  True,  True, False, False, False, False, False,
           False,  True,  True, False]

y_pred = [False, False, False, False, False,  True, False, False,  True,
       False,  True, False, False, False, False, False, False, False,
        True,  True,  True,  True, False, False, False, False, False,
       False, False, False, False, False,  True, False, False, False,
       False,  True, False, False, False, False, False, False, False,
        True, False, False, False, False, False, False, False, False,
       False,  True, False, False, False, False, False, False, False,
       False, False,  True, False, False, False, False,  True, False,
       False, False, False, False, False, False, False,  True, False,
       False,  True, False, False, False, False,  True, False,  True,
        True, False, False, False,  True, False, False,  True,  True,
       False, False,  True,  True, False, False, False, False, False,
       False,  True, False, False]

让我们定义一个二进制混淆矩阵

binary_confusion_matrix = BinaryConfusionMatrix(y_actu, y_pred)
print("Binary confusion matrix:\n%s" % binary_confusion_matrix)

它显示为标记良好的pandas数据框

Binary confusion matrix:
Predicted  False  True  __all__
Actual
False         67     0       67
True          21    24       45
__all__       88    24      112

你可以得到有用的属性,如真正(tp)、真负 (总氮)…

print binary_confusion_matrix.TP

二元混淆矩阵的matplotlib图
binary_confusion_matrix.plot()
plt.show()
binary\_confusion\_matrix

二元混淆矩阵

标准化二元混淆矩阵的matplotlib图
binary_confusion_matrix.plot(normalized=True)
plt.show()
binary\_confusion\_matrix\_norm

二元混淆矩阵范数

二元混淆矩阵的seaborn图(todo)

from pandas_confusion import Backend
binary_confusion_matrix.plot(backend=Backend.Seaborn)

混淆矩阵和类统计

混淆矩阵的总体统计和类统计可以是 易于展示。

y_true = [600, 200, 200, 200, 200, 200, 200, 200, 500, 500, 500, 200, 200, 200, 200, 200, 200, 200, 200, 200]
y_pred = [100, 200, 200, 100, 100, 200, 200, 200, 100, 200, 500, 100, 100, 100, 100, 100, 100, 100, 500, 200]
cm = ConfusionMatrix(y_true, y_pred)
cm.print_stats()

你应该得到:

Confusion Matrix:

Classes  100  200  500  600  __all__
Actual
100        0    0    0    0        0
200        9    6    1    0       16
500        1    1    1    0        3
600        1    0    0    0        1
__all__   11    7    2    0       20


Overall Statistics:

Accuracy: 0.35
95% CI: (0.1539092047845412, 0.59218853453282805)
No Information Rate: ToDo
P-Value [Acc > NIR]: 0.978585644357
Kappa: 0.0780141843972
Mcnemar's Test P-Value: ToDo


Class Statistics:

Classes                                 100         200         500   600
Population                               20          20          20    20
Condition positive                        0          16           3     1
Condition negative                       20           4          17    19
Test outcome positive                    11           7           2     0
Test outcome negative                     9          13          18    20
TP: True Positive                         0           6           1     0
TN: True Negative                         9           3          16    19
FP: False Positive                       11           1           1     0
FN: False Negative                        0          10           2     1
TPR: Sensivity                          NaN       0.375   0.3333333     0
TNR=SPC: Specificity                   0.45        0.75   0.9411765     1
PPV: Pos Pred Value = Precision           0   0.8571429         0.5   NaN
NPV: Neg Pred Value                       1   0.2307692   0.8888889  0.95
FPR: False-out                         0.55        0.25  0.05882353     0
FDR: False Discovery Rate                 1   0.1428571         0.5   NaN
FNR: Miss Rate                          NaN       0.625   0.6666667     1
ACC: Accuracy                          0.45        0.45        0.85  0.95
F1 score                                  0   0.5217391         0.4     0
MCC: Matthews correlation coefficient   NaN   0.1048285    0.326732   NaN
Informedness                            NaN       0.125   0.2745098     0
Markedness                                0  0.08791209   0.3888889   NaN
Prevalence                                0         0.8        0.15  0.05
LR+: Positive likelihood ratio          NaN         1.5    5.666667   NaN
LR-: Negative likelihood ratio          NaN   0.8333333   0.7083333     1
DOR: Diagnostic odds ratio              NaN         1.8           8   NaN
FOR: False omission rate                  0   0.7692308   0.1111111  0.05

还可以使用以下命令获取统计信息:

cm.stats()

安装

$ conda install pandas scikit-learn scipy

$ pip install pandas_confusion

发展

你可以帮助开发这个图书馆。

问题

您可以使用提交问题 https://github.com/scls19fr/pandas_confusion/issues

克隆

您可以使用克隆存储库来尝试自己修复问题:

$ git clone https://github.com/scls19fr/pandas_confusion.git

运行单元测试

运行所有单元测试

$ nosetests -s -v

运行给定的测试

$ nosetests -s -v tests/test_pandas_confusion.py:test_pandas_confusion_normalized

安装开发版本
$ python setup.py install

$ sudo pip install git+git://github.com/scls19fr/pandas_confusion.git

合作

  • fork存储库
  • 创建解决给定问题的分支
  • 提交请求

https://help.github.com/categories/collaborating/

完成

  • 连续积分(travis)
  • 将混淆矩阵转换为二进制混淆矩阵
  • python包
  • 单元测试(鼻)
  • 修复缺少的列和行
  • 总体统计:准确度,95%可信区间,p值[acc>;nir],kappa

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java BeanCreationException:创建名为“org”的bean时出错。springframework。安全authenticationManager'   java无法连接到mysql中的特定模式   java端口将Tomcat应用程序连接到应用程序引擎   java无法仅从集成测试加载ApplicationContext   Java文件。exists()找不到XML文件   需要一个用Java编写的Java和Javascript差异工具吗   java xml按id搜索元素   OSGi中的java身份验证过滤器?   java如何在网页上显示所选集合项的子集合元素?   java通过onLocationChanged方法从服务获取纬度/经度   java else语句打印多次数组循环   java Hazelcast AWS ec2自动发现   java Sonar:将同步类“Hashtable”替换为非同步类,如“HashMap”   java模块化Spring安全性WebFilterChain   Java Selenium:错误:无法访问可变功能   Java数组在索引处获取值方法   java Android获取数字的索引#0、#1、#2   java如何在搜索期间更新listview