использование numpy.newaxis в машинном обучении - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь увеличить размерность моего начального массива:

import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
x = 10*rng.rand(50)
y = np.sin(x) + 0.1*rng.rand(50)

poly = PolynomialFeatures(7, include_bias=False)
poly.fit_transform(x[:,np.newaxis])

Во-первых, я знаю, что np.newaxis создает дополнительный столбец. Зачем это нужно?

Теперь я буду тренировать обновленные данные x (поли) с линейной регрессией

test_x = np.linspace(0,10,1000)
from sklearn.linear_model import LinearRegression

model = LinearRegression()
# train with increased dimension(x=poly) with its target
model.fit(poly,y)
# testing
test_y = model.predict(x_test)

Когда я запускаю это, оно дает мне: ValueError: Ожидаемый 2D-массив, вместо этого получен скалярный массив: в строке model.fit (poly, y). Я уже добавил измерение в поли, что происходит?

Кроме того, в чем разница между x [:, np.newaxis] и Vs. х [:, None]

?

1 Ответ

0 голосов
/ 03 апреля 2019
In [55]: x=10*np.random.rand(5)                                                 
In [56]: x                                                                      
Out[56]: array([6.47634068, 6.25520837, 7.58822106, 4.65466951, 2.35783624])
In [57]: x.shape                                                                
Out[57]: (5,)

newaxis не добавляет столбец, он добавляет измерение:

In [58]: x1 = x[:,np.newaxis]                                                   
In [59]: x1                                                                     
Out[59]: 
array([[6.47634068],
       [6.25520837],
       [7.58822106],
       [4.65466951],
       [2.35783624]])
In [60]: x1.shape                                                               
Out[60]: (5, 1)

np.newaxis имеет значение None, поэтому оба работают одинаково.

In[61]: x[:,None].shape                                                        
Out[61]: (5, 1)

Один из них немного понятнее читателям, другой немного легче напечатать.https://www.numpy.org/devdocs/reference/constants.html

Работает ли x или x1, зависит от ожиданий кода обучения.Некоторый обучающий код ожидает ввод данных формы (samples, features).Можно предположить, что (50,) массив формы равен 50 выборкам, 1 объекту или 1 случаю, 50 объектам.Но лучше, если вы точно скажете, что вы имеете в виду.


Посмотрите документы:

https://scikit -learn.org / stable / modules / generate / sklearn.preprocessing.PolynomialFeatures.html # sklearn.preprocessing.PolynomialFeatures.fit_transform

poly.fit_transform
X : numpy array of shape [n_samples, n_features]

Конечно, fit_transform ожидает 2-й вход.

https://scikit -learn.org / stable / modules / generate / sklearn.linear_model.LinearRegression.html # sklearn.linear_model.LinearRegression.fit

И X, и y должны быть 2d.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...