混淆函数python python 混淆( 二 )


"""Matplotlib绘制混淆矩阵图
parameters
----------
y_truth: 真实的y的值, 1d array
y_predict: 预测的y的值, 1d array
cmap: 画混淆矩阵图的配色风格, 使用cm.Blues,更多风格请参考
"""
cm = confusion_matrix(y_truth, y_predict)
plt.matshow(cm, cmap=cmap)# 混淆矩阵图
plt.colorbar()# 颜色标签
for x in range(len(cm)):# 数据标签
for y in range(len(cm)):
plt.annotate(cm[x, y], xy=(x, y), horizontalalignment='center', verticalalignment='center')
plt.ylabel('True label')# 坐标轴标签
plt.xlabel('Predicted label')# 坐标轴标签
plt.show()# 显示作图结果
if __name__ == '__main__':
y_truth = [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]
y_predict = [1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0]
confusion_matrix_plot_matplotlib(y_truth, y_predict)
Python程序代码混淆、编译、打包、运行(桌面程序防破解向) 像Python这种解释性混淆函数python的语言,要想私有化部署的同时又保护好源码,就像是对于鱼和熊掌的追求 。
虽然做不到尽善尽美,但是对代码进行混淆,增加一点破解的难度,或许能规避一些泄露的风险 。
本次演示环境:linux
确保要发布的包根目录("demo")中有__main__.py文件 , 这个是程序执行入口 。
编译
批量改名.pyc文件
移动.pyc文件
清理.py文件
清理__pycache__文件夹
打包成zip
运行时只要将zip文件作为参数即可
最终整合脚本
调用方式
对于在变量和函数名上的混淆有点小儿科,而对于跨文件的类名的混淆又太容易实现 。
所以对于混淆程度的取舍,要视工程的规模而定 。
2.1 混淆工具pyminifier
在原来的工具 pyminifier上修复混淆函数python了几个bug 。
安装:
python3 安装
或者clone下来,自行安装
使用例子
2.2 源码变更
不同的配置对于源码的要求不同,以下是笔者踩过的坑 。
其他混淆想法
结合混淆、编译和打包,尝试出以下发布脚本 。
主要的思路 :创建一个工作目录tmp,然后在此目录下混淆、编译python代码,完成后把内容打包成pyc文件,再将pyc文件和其他配置文件移动到dist , 发布dist即可 。
混淆的目的是最大程度保护源码,在发布到客户端后不被轻易破解 。
Python sklearn.metrics模块混淆矩阵常用函数1.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
参数分别为y实际类别、预测类别、返回值要求(True返回正确的样本占比 , false返回的是正确分类的样本数量)
eg:
import numpy as np
from sklearn.metrics import accuracy_score
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
accuracy_score(y_true, y_pred)
0.5
accuracy_score(y_true, y_pred, normalize=False)
2.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2)
参数:真是类别,预测类别,目标类别名称
eg:
3.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)
输出为混淆矩阵
eg:
太多了,写3个常用的吧,具体参考help(metrics)
defcm_plot(y,yp):#参数为实际分类和预测分类
fromsklearn.metricsimportconfusion_matrix
#导入混淆矩阵函数
cm = confusion_matrix(y,yp)
#输出为混淆矩阵
importmatplotlib.pyplotasplt
#导入作图函数
plt.matshow(cm,cmap=plt.cm.Greens)
# 画混淆矩阵图,配色风格使用cm.Greens
plt.colorbar()
# 颜色标签
forxinrange(len(cm)):
foryinrange(len(cm)):
plt.annotate(cm[x,y],xy=(x,y),horizontalalignment='center',verticalalignment='center')

推荐阅读