Я пытался войти в Python и использовал некоторые онлайн-курсы (я работаю с Jupyter Notebooks, если это имеет значение, и Python 3). В одном речь шла о статмоделях и регрессиях. Насколько мне сказали мои курсы по статистике, вы хотите включить перехват (я уверен, что есть причины не делать этого, но на самом деле это исключение).
1) Я попытался спросить Google и наткнулся на пример, который мне не совсем понятен: Это пример с сайта statsmodels :
import statsmodels.api as sm
Y = [1,3,4,5,2,3,4]
X = range(1,8)
X = sm.add_constant(X)
model = sm.OLS(Y,X)
results = model.fit()
results.params
Я понимаю, что они делают здесь. Тем не менее, просто для того, чтобы попробовать некоторые вещи, я решил пропустить перехват:
import statsmodels.api as sm
Y = [1,3,4,5,2,3,4]
X = range(1,8)
model = sm.OLS(Y,X)
results = model.fit()
results.params
Вопрос 1: Это возвращает ошибку: ValueError Traceback (most recent call last) <ipython-input-3-c8dfe3eb8b44> in <module>
. Она указывает на ошибку model = sm.OLS(Y,X)
- почему?
2a) Вот код, который был в курсе:
Речь идет о прогнозировании цены автомобиля на основе нескольких переменных (пробег, цилиндры, двери)
import pandas as pd
df = pd.read_excel('http://cdn.sundog-soft.com/Udemy/DataScience/cars.xls')
%matplotlib inline
import statsmodels.api as sm
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()
X = df[['Mileage', 'Cylinder', 'Doors']]
y = df['Price']
X[['Mileage', 'Cylinder', 'Doors']] = scale.fit_transform(X[['Mileage', 'Cylinder', 'Doors']].values)
print (X)
est = sm.OLS(y, X).fit()
est.summary()
Вопрос 2: Кажется, что это работает, но также возвращает ошибку: «Значение пытается быть установлено для копии среза из DataFrame. Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = value "- Что это значит? Это всего лишь предупреждение от pandas, чтобы предупредить о потенциально неправильном синтаксисе, , как кажется, это обсуждение предлагает ?
2b) Тот же код с перехватом:
import pandas as pd
df = pd.read_excel('http://cdn.sundog-soft.com/Udemy/DataScience/cars.xls')
%matplotlib inline
import statsmodels.api as sm
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()
X = df[['Mileage', 'Cylinder', 'Doors']]
y = df['Price']
X = sm.tools.tools.add_constant(X)
X[['Mileage', 'Cylinder', 'Doors']] = scale.fit_transform(X[['Mileage', 'Cylinder', 'Doors']].values)
print (X)
est = sm.OLS(y, X).fit()
est.summary()
Вопрос 3: Коэффициенты не меняются по сравнению с моделью без добавления константы - что я делаю не так? Кроме того, при выполнении print(X)
константа указывается как 1
наблюдение, потому что это в основном заполнитель в этой точке? Но почему бы не быть 0?
Вопрос 4: И чтобы оставаться на вершине c из того, что я не понимаю: Когда стандартизация применяется с scale.fit_transform
, имеет ли значение, если константа добавляется до или после нее?
Если бы кто-нибудь мог помочь мне с любым из этих вопросов, я был бы очень признателен.