Текст запроса:
-0.3738, -0.5226]])
In [67]: y[:5] Out[67]: array([ 0.4279, -0.6735, -0.0909, -0.4895,-0.1289])
像之前Patsy看到的,线性模型通常要拟合一个截距。sm.add_constant函数可以添加一个截��кт的列到现存的矩阵:
```python
In [68]: X_model = sm.add_constant(X)
In [69]: X_model[:5]
Out[69]:
array([[ 1. , -0.1295, -1.2128, 0.5042],
[ 1. , 0.3029, -0.4357, -0.2542],
[ 1. , -0.3285, -0.0253, 0.1384],
[ 1. , -0.3515, -0.7196, -0.2582],
[ 1. , 1.2433, -0.3738, -0.5226]])
sm.OLS类可以拟合一个普通最小二乘回归:
In [70]: model = sm.OLS(y, X)
这个模型的fit方法返回了一个回归结果对象,它包含估计的模型参数和其它内容:
In [71]: results = model.fit()
In [72]: results.params
Out[72]: array([ 0.1783, 0.223 , 0.501 ])
对结果使用summary方法可以打印模型的详细诊断结果:
In [73]: print(results.summary())
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.430
Model: OLS Adj. R-squared: 0.413
Method: Least Squares F-statistic: 24.42
Date: Mon, 25 Sep 2017 Prob (F-statistic): 7.44e-12
Time: 14:06:15 Log-Likelihood: -34.305
No. Observations: 100 AIC: 74.61
Df Residuals: 97 BIC: 82.42
Df Model: 3
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
x1 0.1783 0.053 3.364 0.001 0.073 0.283
x2 0.2230 0.046 4.818 0.000 0.131 0.315
x3 0.5010 0.080 6.237 0.000 0.342 0.660
==============================================================================
Omnibus: 4.662 Durbin-Watson: 2.201
Prob(Omnibus): 0.097 Jarque-Bera (JB): 4.098
Skew: 0.481 Prob(JB): 0.129
Kurtosis: 3.243 Cond. No.
1.74
==============================================================================
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly
specified.
Перевод текста на русский язык:
Здесь представлен текст, связанный с разработкой и тестированием программного обеспечения. В тексте описывается использование библиотеки statsmodels для анализа данных и построения линейной модели.
В тексте используются следующие команды и функции:
Также в тексте описываются различные методы анализа данных, такие как построение графиков и оценка параметров модели. Перевод текста на русский язык:
Этот набор данных имеет структуру AR(2) (два запаздывания), параметры равны 0,8 и -0,4. При подгонке модели AR вы можете не знать количество запаздывающих членов, поэтому можно использовать большее количество запаздываний для подгонки этой модели:
In [82]: MAXLAGS = 5
In [83]: model = sm.tsa.AR(values)
In[84]: results = model.fit(MAXLAGS)
Оценочные параметры в результатах начинаются с точки пересечения, а затем следуют оценочные значения первых двух параметров:
In [85]: results.params
Out[85]: array([-0.0062, 0.7845, -0.4085, -0.0136, 0.015 , 0.0143])
Для получения более подробной информации и объяснения результатов, рекомендуется обратиться к документации statsmodels.
13.4 Введение в scikit-learn
Scikit-learn — это широко используемый и многофункциональный Python-пакет машинного обучения. Он содержит множество стандартных методов контролируемого и неконтролируемого машинного обучения, выбора и оценки моделей, преобразования данных, загрузки данных и инструментов сохранения моделей. Эти модели могут использоваться для классификации, кластеризации, прогнозирования и других задач.
Существует множество онлайн- и печатных материалов по машинному обучению и применению scikit-learn и TensorFlow для решения реальных проблем. В этом разделе я кратко представлю стиль API scikit-learn.
Во время написания этой книги scikit-learn ещё не был тесно интегрирован с pandas, но существуют сторонние пакеты в разработке. Несмотря на это, pandas хорошо подходит для предварительной обработки наборов данных перед подбором моделей.
В качестве примера я использую классический набор данных Kaggle о выживаемости пассажиров «Титаника». Мы используем pandas для загрузки тестового и обучающего наборов данных:
In [86]: train = pd.read_csv('datasets/titanic/train.csv')
In [87]: test = pd.read_csv('datasets/titanic/test.csv')
In [88]: train[:4]
Out[88]:
PassengerId Survived Pclass \
0 1 0 3
1 2 1 1
2 3 1 3
3 4 1 1
Statsmodels и scikit-learn обычно не могут принимать пропущенные данные, поэтому мы должны проверить, содержат ли столбцы пропущенные значения:
In [89]: train.isnull().sum()
Out[89]:
PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64
In [90]: test.isnull().sum()
Out[90]:
PassengerId 0
Pclass 0
Name 0
Sex 0
Age 86
SibSp 0
Parch 0
Ticket 0
Fare 1
Cabin 327
Embarked 0
dtype: int64
В статистических и машинных примерах обучения, основываясь на характеристиках данных, типичной задачей является прогнозирование того, сможет ли пассажир выжить. Модель теперь подогнана к данным обучающего набора, а затем используется для оценки на основе данных тестового набора.
Я хочу использовать возраст в качестве прогностической переменной, но он содержит пропущенные значения. Существует несколько методов заполнения пропущенных данных, и я использовал простой метод, заполняя медианное значение обучающего набора для двух таблиц пустых значений:
In [91]: impute_value = train['Age'].median()
In [92]: train['Age'] = train['Age'].fillna(impute_value)
In [93]: test['Age'] = test['Age'].fillna(impute_value)
Теперь нам нужно указать модель. Я добавил столбец IsFemale как кодирование столбца «Sex»:
In [94]: train['IsFemale'] = (train['Sex'] == 'female').astype(int)
In [95]: test['IsFemale'] = (test['Sex'] == 'female').astype(int)
Затем мы определяем некоторые переменные модели и создаём массив NumPy:
In [96]: predictors = ['Pclass', 'IsFemale', 'Age']
In [97]: X_train = train[predictors].values
In [98]: X_test = test[predictors].values
In [99]: y_train = train['Survived'].values
In [100]: X_train[:5]
Out[100]:
array([[ 3., 0., 22.],
[ 1., 1., 38.],
[ 3., 1., 26.],
[ 1., 1., 35.],
[ 3., 0., 35.]])
In [101]: y_train[:5]
Out[101]: array([0, 1, 1, 1, 0])
Я не могу гарантировать, что это хорошая модель, но её характеристики соответствуют требованиям. Мы используем модель LogisticRegression из scikit-learn, создавая экземпляр модели:
In [102]: from sklearn.linear_model import LogisticRegression
In [103]: model = LogisticRegression()
Как и в случае со statsmodels, мы можем использовать метод fit модели для её подгонки к обучающим данным:
In [104]: model.fit(X_train, y_train)
Out[104]:
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
verbose=0, warm_start=False)
Теперь мы можем использовать model.predict для прогнозирования на тестовых данных:
In [105]: y_predict = model.predict(X_test)
In [106]: y_predict[:10]
Out[106]: array([0, 0, 0, 0, 1, 0, 1, 0, 1, 0])
Если у вас есть истинные значения тестового набора данных, вы можете вычислить точность или другие показатели ошибок:
(y_true == y_predict).mean()
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )