在做数据分析时,因实际数据量较大,请问有什么方法可以实现自动在给定参数范围内得出概率的最优解,数据表结构如下图
import pandas as pd
data_A=pd.read_csv(r'E:\数据分析\数据.csv',encoding='gbk')
#求符合“周期”为T+n,且“偏离度”介于x,y之间,所对应大于等于z的“实际值”,在全部“实际值”中出现的概率(PR)
def get_PR(n,x,y,z):
data_B=data_A[(data_A["周期"]=='T+'+str(n))&(data_A["偏离度"]<=x)&(data_A["偏离度"]>=y)]
PR=len(data_B[data_B["实际值"]>=z])/len(data_A["实际值"])
return(PR)
因为python刚学不久,我只找到了GridSearch好像可以解决参数调优,但网上的资料都是讲算法的,没有直观直接应用函数的,所以不知道怎么套用
因为实际数据较大,请问有什么方法可以实现自动在给定参数(n,x,y,z)范围内得出概率(PR)的最大值(或者记录所有参数组合及相应的PR结果)比如给定n范围1到5,x范围0到5,y范围-5到-1,z范围0到3,自动计算z在取0 1 2 3时,PR数值最大对应的n,x,z的数值,感谢解答!
下有代码,可直接复制使用。如有帮助,敬请采纳,你的采纳是我前进的动力,O(∩_∩)O谢谢!!!!!!!!
路过的朋友也可以点个赞~(≧▽≦)/~
import pandas as pd
import numpy as np
n = 2
x = -3
y = -2
z = 0
data_A = pd.read_csv(r'E:\数据分析\数据.csv',encoding='gbk')
d1 = data_A.偏离度.values
d2 = data_A.周期.values
d3 = data_A.实际值.values
# 求符合“周期”为T+n,
d2_index = np.where('T+' + str(n) == d2)[0]
# 且“偏离度”介于x,y之间,所对应大于等于z的“实际值”,
d1_index = np.where((x < d1) & (d1 < y))[0]
# 大于等于z的“实际值”
d3_index = np.where(d3 >= z)[0]
# 依次求交集
inter_12 = set(d1_index).intersection(set(d2_index))
inter_123 = inter_12.intersection(set(d3_index))
pr_index = list(inter_123)
# 这个是筛选出来的值,如果不需要可以注释掉
d_all = np.concatenate((d3.reshape(-1, 1), d1.reshape(-1, 1), d2.reshape(-1, 1)), axis=1)
pr_d = d_all[pr_index, :]
# 计算概率
PR = len(pr_index) / d1.size
print(f"出现的概率:{PR}")
我的想法是如果看不懂网上的GridSearch实现可以尝试自己实现一个GridSearch。
自变量都有一个范围,然后设定一个合理的步长,最后暴力遍历所有可能结果。
但是我看你说数据量比较大,这样可能很耗时间
虽然题目是打印素数,我写成打印质数的程序了,如果是打印质数改动最小找到思路了:
begin = int(input('请输入开始数:'))
end = int(input('请输入结束数:'))
while begin <= end:
for i in range(1,begin):
if (begin%i == 0) and (i != 1): #从1开始除,但是不打印可以整除1的,这样就可以有2了
break
if (i == (begin-1)):
print(begin,end=' ')
begin += 1
梯度下降算法