1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/it-ebooks-pyda-2e-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
13.md 12 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 16:49 0ce2ae9

Текст запроса:

-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 для анализа данных и построения линейной модели.

В тексте используются следующие команды и функции:

  • In [67] — команда для вывода первых пяти элементов массива;
  • sm.add_constant — функция для добавления столбца константы в матрицу;
  • Out[67] — результат выполнения предыдущей команды;
  • X_model — переменная, содержащая матрицу с добавленным столбцом константы;
  • model — объект класса OLS, представляющий модель линейной регрессии;
  • results — объект, содержащий результаты подгонки модели;
  • summary — метод объекта results, который выводит подробную информацию о модели;
  • data — DataFrame, содержащий данные для модели;
  • predict — метод объекта results, который позволяет предсказать значения зависимой переменной для новых данных.

Также в тексте описываются различные методы анализа данных, такие как построение графиков и оценка параметров модели. Перевод текста на русский язык:

Этот набор данных имеет структуру 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/it-ebooks-pyda-2e-zh.git
git@api.gitlife.ru:oschina-mirror/it-ebooks-pyda-2e-zh.git
oschina-mirror
it-ebooks-pyda-2e-zh
it-ebooks-pyda-2e-zh
master