我正在做此作业,作为作业的一部分。我有144位二进制密钥,每个密钥对应一个特定的类。每个密钥被分成8个16位段,其中每个段对应于系数(c8-c0)之一。我在功能中对其进行了编码:
f(x) = c8*x^8 + c7*x^7 + c6*x^6 + c5*x^5 + c4*x^4 + c3*x^3 + c2*x^2 + c1*x + c0
其中,x是对应于特定类的唯一整数。 所以每个x我都有一个fx值。
下面的代码是我用于编码的代码。
fx = []
n = 16
for j in range(0,len(train_unique_label)) :
split = [kcrc[j][i:i+n] for i in range(0, len(kcrc[j]), n)]
fx.append(int(split[8],2)*j**8 + int(split[7],2)*j**7 + int(split[6],2)*j**6 + int(split[5],2)*j**5 + int(split[4],2)*j**4
+ int(split[3],2)*j**3 + int(split[2],2)*j**2 + int(split[1],2)*j + int(split[0],2))
train_unique_label : a list of unique integers
n :number of bits in each segment
kcrc : list of keys
我编码后创建了一个字典,其中x是键,fx是它的值,如下所示:
x = train_unique_label
g = dict(zip(x,fx))
我想做的是。每当我得到特定类别的值时,我都想基于x和fx计算系数,怎么办?
答案 0 :(得分:0)
使用numpy
包中的polyfit
方法,可以很容易地使用点来查找多项式系数:
import numpy as np
x = np.arange(-4, 5) # array([-4, -3, -2, -1, 0, 1, 2, 3, 4])
y = np.array([-1,1]*4 + [0]) # array([-1, 1, -1, 1, -1, 1, -1, 1, 0])
c = np.polyfit(x, y, 8)
#array([-6.32440476e-03, 9.92063492e-05, 1.77430556e-01, -1.38888889e-03,
# -1.42100694e+00, 4.86111111e-03, 3.24990079e+00, -3.57142857e-03,
# -1.00000000e+00])
如文档中所述,该方法将平方误差最小化。对于阶数为n
的多项式,需要花费n+1
点或更多。
从图形上讲,MCVE给出:
import matplotlib.pyplot as plt
t = np.linspace(-4.1, 4.1, 100)
p = np.poly1d(c)
fig, axe = plt.subplots()
axe.plot(x, y, 'o')
axe.plot(t, p(t))
axe.grid()