python中混淆函数 python混淆矩阵

Python程序代码混淆、编译、打包、运行(桌面程序防破解向)

像Python这种解释性的语言,要想私有化部署的同时又保护好源码,就像是对于鱼和熊掌的追求。

创新互联公司技术团队10多年来致力于为客户提供成都网站建设、成都网站制作、品牌网站建设全网营销推广、搜索引擎SEO优化等服务。经过多年发展,公司拥有经验丰富的技术团队,先后服务、推广了近千家网站,包括各类中小企业、企事单位、高校等机构单位。

虽然做不到尽善尽美,但是对代码进行混淆,增加一点破解的难度,或许能规避一些泄露的风险。

本次演示环境:linux

确保要发布的包根目录("demo")中有__main__.py文件,这个是程序执行入口。

编译

批量改名.pyc文件

移动.pyc文件

清理.py文件

清理__pycache__文件夹

打包成zip

运行时只要将zip文件作为参数即可

最终整合脚本

调用方式

对于在变量和函数名上的混淆有点小儿科,而对于跨文件的类名的混淆又太容易实现。

所以对于混淆程度的取舍,要视工程的规模而定。

2.1 混淆工具pyminifier

在原来的工具 pyminifier上修复了几个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')

#annotate主要在图形中添加注释

# 第一个参数添加注释

# 第一个参数是注释的内容

# xy设置箭头尖的坐标

#horizontalalignment水平对齐

#verticalalignment垂直对齐

#其余常用参数如下:

# xytext设置注释内容显示的起始位置

# arrowprops 用来设置箭头

# facecolor 设置箭头的颜色

# headlength 箭头的头的长度

# headwidth 箭头的宽度

# width 箭身的宽度

plt.ylabel('True label')# 坐标轴标签

plt.xlabel('Predicted label')# 坐标轴标签

returnplt

#函数调用

cm_plot(train[:,3],tree.predict(train[:,:3])).show()

python是否有绘制混淆矩阵的函数,怎么来实现

# -*- coding: UTF-8 -*-

"""绘制混淆矩阵图"""

import matplotlib.pyplot as plt

from sklearn.metrics import confusion_matrix

def confusion_matrix_plot_matplotlib(y_truth, y_predict, cmap=plt.cm.Blues):

"""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混淆矩阵
分享URL:http://pwwzsj.com/article/hpiggd.html