Как получить 4-й порядок многочлена из случайно сгенерированных значений и изменить форму массива от (100) до (100,4)? - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь реализовать четвертый порядок полинома и реализовал следующую логику со следующими инструкциями:

  1. прежде всего, импортируем функцию PolynomialFeatures из scikit-learn
  2. и использовать его для генерации нового массива X_4d, который имеет все признаки вплоть до элементов 4-го порядка
  3. Форма должна быть (100,4) после преобразования, чтобы добавить полиномиальные элементы высшего порядка и первые 5
  4. сэмплы должны выглядеть следующим образом

Код:

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

def forth_order(m, a=-3.15, b=1.18, c=3.52, d=3.92, mu=0.0, sigma=0.33):
    new_x = np.random.uniform(low=-1.0, high=1.0, size=(m,)).reshape(100,4)
    new_y =  a*x**3 + b*x**2 + c*x + d + np.random.randn(m)*sigma
    return(new_x, new_y)

print(new_x)
print(new_x.shape)

print(new_y)    
print(new_y.shape)

# to find the 4th order for random generated values
np.random.seed(42)
# call your function to generate the artificial cubic data set
new_x,new_y = make_cubic_dataset(100)

transformer = PolynomialFeatures(degree=4, include_bias=False)
transformer.fit(new_x).reshape(100,4)
x_ = transformer.transform(new_x)
X_4d = np.polyfit(x, y, 3) # fit a degree 4 (cubic) polynomial to the data

print(X_4d)
print(X_4d.shape)

Ошибка:

ValueError: cannot reshape array of size 100 into shape (100,4)

Ожидаемый результат:

Форма должна быть (100,4) после преобразования, чтобы добавить полиномиальные элементы высшего порядка, и первые 5 и выборки должны выглядетькак следующий

print(X_4d.shape)
>>> (100, 4)

print(X_4d[:5,:])
>>> [[-0.25091976  0.06296073 -0.01579809  0.00396405]
    [ 0.90142861  0.81257354  0.73247704  0.66027576]
    [ 0.46398788  0.21528476  0.09988952  0.04634753]
    [ 0.19731697  0.03893399  0.00768234  0.00151586]
    [-0.68796272  0.4732927  -0.32560773  0.22400598]]

Я столкнулся с проблемой, чтобы решить эту проблему.

1 Ответ

0 голосов
/ 21 октября 2019

Это было небольшое изменение в коде, и это не требует пояснений:

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

def forth_order(m, a=-3.15, b=1.18, c=3.52, d=3.92, mu=0.0, sigma=0.33):
    new_x = np.random.uniform(low=-1.0, high=1.0, size=(m,)).reshape(-1,1)
    new_y =  a*x**3 + b*x**2 + c*x + d + np.random.randn(m)*sigma
    return(new_x, new_y)

np.random.seed(42)

# call your function to generate the artificial cubic data set for forth order
new_x,new_y = forth_order(100)

X_4d = transformer.transform(new_x)
X_4d = PolynomialFeatures(degree=4, include_bias=False).fit_transform(new_x)
transformer.fit(new_x)

print(X_4d.shape)
print(X_4d[:5,:])

Вывод

print(X_4d.shape)
>>> (100, 4)

print(X_4d[:5,:])
>>> [[-0.25091976  0.06296073 -0.01579809  0.00396405]
    [ 0.90142861  0.81257354  0.73247704  0.66027576]
    [ 0.46398788  0.21528476  0.09988952  0.04634753]
    [ 0.19731697  0.03893399  0.00768234  0.00151586]
    [-0.68796272  0.4732927  -0.32560773  0.22400598]]
...