получение коэффициентов полинома - PullRequest
0 голосов
/ 05 мая 2019

Я делаю это как часть задания.у меня есть 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 - уникальное целое число, соответствующее определенному классу.поэтому у меня есть значение fx для каждого x.

, код ниже - это то, что я использовал для кодирования.

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, как это можно сделать?

1 Ответ

0 голосов
/ 05 мая 2019

Найти полиномиальные коэффициенты с использованием точек просто с помощью метода polyfit из пакета numpy:

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()

enter image description here

...