python一线开发 [2021]手撸机器学习入门之jaya算法 总所周知,所谓机器学习就是一个解方程给x求y的过程罢了. 这是一篇入门的算法代码,又叫做jaya算法(不是java!!!),网上没什么资料,以下是自己python写的. ```python import math import random import matplotlib.pyplot as plt import numpy as np g_group_size = 5000 g_var_weight = 2 g_max_iteration = 100 g_array_f = [0 for i in range(0, g_group_size)] g_array_best = [0 for i in range(0, g_group_size)] g_array_worst = [0 for i in range(0, g_group_size)] g_array_pop_new = [[0 for i in range(0, g_var_weight)] for i in range(0, g_group_size)] #g_number_a = -2 * math.pi #g_number_b = 2 * math.pi #g_number_a = -5.12 #g_number_b = 5.12 g_number_a = -100 g_number_b = 100 g_result = [] array_pop = [[0 for i in range(0, g_var_weight)] for i in range(0, g_group_size)] def fn_objective(pArray): result = 0 for i in range(0, g_var_weight): # result += pArray[i] * pArray[i] # result += math.sin(pArray[i]) * math.pow(math.e, math.pow(1 - math.cos(result), 2)) + math.cos(result) * math.pow(math.e, math.pow(1 - math.sin(pArray[i]), 2)) + math.pow(pArray[i] - result, 2) # result += -(1 + math.cos(12 * math.sqrt(math.pow(pArray[i], 2) + math.pow(result, 2)))) / (0.5 * (math.pow(pArray[i], 2) + math.pow(result, 2)) + 2) result += math.pow(pArray[i], 2) + 2 * math.pow(result, 2) - 0.3 * math.cos(3 * math.pi * pArray[i]) - 0.4 * math.cos(4 * math.pi * result) + 0.7 return result def fn_clean_array(pArray): for i in range(0, g_group_size): for z in range(0, g_var_weight): if pArray[i][z] < g_number_a: pArray[i][z] = g_number_a if pArray[i][z] > g_number_b: pArray[i][z] = g_number_b return pArray for i in range(0, len(array_pop)): for z in range(0, len(array_pop[i])): array_pop[i][z] = random.uniform(g_number_a, g_number_b) g_array_f[i] = fn_objective(array_pop[i]) print("array_pop: ") print(array_pop) print("g_array_f: ") print(g_array_f) iter_num = 1 min_index = 0 max_index = 0 while iter_num <= g_max_iteration: min_value = min(g_array_f) min_index = g_array_f.index(min_value) - 1 g_array_best = array_pop[min_index] max_value = max(g_array_f) max_index = g_array_f.index(max_value) - 1 g_array_worst = array_pop[max_index] for i in range(0, g_group_size): for z in range(0, g_var_weight): wrost_number = g_array_worst[z] - math.fabs(array_pop[i][z]) best_number = g_array_best[z] - math.fabs(array_pop[i][z]) g_array_pop_new[i][z] = array_pop[i][z] + \ random.random() * best_number - wrost_number g_array_pop_new = fn_clean_array(g_array_pop_new) f_new = 0 for i in range(0, len(g_array_pop_new)): f_new = fn_objective(g_array_pop_new[i]) if f_new < g_array_f[i]: g_array_f[i] = f_new for z in range(g_var_weight): array_pop[i][z] = g_array_pop_new[i][z] min_value = min(g_array_f) min_index = g_array_f.index(min_value) g_array_best = array_pop[min_index] print("min number {} ".format(g_array_f[min_index])) print("x=") print(g_array_best) #g_result.insert(0, g_array_f[min_index]) g_result.append(g_array_f[min_index]) iter_num += 1 x = np.arange(0, len(g_result)) y = np.array(g_result) plt.title("jaya") plt.xlabel("min number") plt.ylabel("y") plt.plot(x, y) plt.show() ``` 请注意有一些公式需要很大的族群范围才能收敛 论文里面的收敛图: ![](https://key08.com/usr/uploads/2021/05/2290756614.png) 这边的: ![](https://key08.com/usr/uploads/2021/05/3846208643.png) 阅读全文 2021-05-24 huoji 0 条评论
python [2021]机器学习之储存StandardScaler归一化后的参数 有没有遇到过这种情况: 训练模型归一化后,实际使用发现忘了保存之前使用的归一化的mean和std! 就各种懊恼 python提供了简单的方法在训练时候保存归一化的mean和std ```asp from joblib import dump from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(data) dump(scaler, 'scaler_filename.joblib') ``` 你实际使用的时候加载即可: ```asp from joblib import load scaler = load('scaler_filename.joblib') transformed_data = scaler.transform(new_data) ``` 阅读全文 2021-03-07 huoji 0 条评论
phppython工具软件web安全一线开发 [2021]机器学习之keras基于TextCNN的webshell识别 本来想用zend直接解析PHP opcode然后做xxoo的,然后看了一会zend源码,发现PHP真的是"动态"语言,,,比如eval(base64_encode("xxxx")) opcode只能看到eval base64_encode 其他的要动态执行才行~ 那样就复杂了,需要追踪入口,加数据做流追踪等等,实在是太麻烦,所以还是换成了传统的语义分析 #### 我们要做什么 ------------ 我打算使用一个 TextCNN 与 一个普通的二分类网络来分别做 TextCNN主要是用来检测单词数组 普通二分类网络用于检测一些常规特征,比如 文件熵(aka 文件复杂度) 文件大小(某些一句话几KB) 为了方便,我这边仅仅使用php,当然,任何都可以.样本数量是1W左右,自己写了一个一句话变种生成器(居然有部分过了主流防火墙,哈哈哈哈),生成了1000多个一句话 ### 准备 ------------ 阅读全文 2021-03-05 huoji 3 条评论
python一线开发 [2021]一些常见的机器视觉用到的神经网络结构(keras) 收藏一些常见的机器视觉用到的神经网络结构,以后不用自己构造网络了! 这些都咋用呢? 我已经写好祖传代码了: ```python def build_save_model(train_data, test_data): # 构建模型 CBAPD network_model = VGG16() network_model.compile(optimizer='adam', loss=tensorflow.keras.losses.SparseCategoricalCrossentropy( from_logits=False), metrics=['accuracy']) #cp_callback = tensorflow.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,save_weights_only=True,save_best_only=True) # 如果要保存点自己在fit加这个参数 # callbacks=[cp_callback] #checkpoint_save_path = "./checkpoint.ckpt" # if os.path.exists(checkpoint_save_path + '.index'): # print('-------------load the model-----------------') # network_model.load_weights(checkpoint_save_path) network_model.fit(train_data, epochs=100, validation_data=test_data, batch_size=64) network_model.summary() network_model.evaluate(test_data) tensorflow.saved_model.save( network_model, '\\model\\') ``` VGG网络: 阅读全文 2021-02-24 huoji 1 条评论