An open API service indexing awesome lists of open source software.

https://github.com/luccifer/logistics-datamining

NSU HSE grade work
https://github.com/luccifer/logistics-datamining

bigdata datamining hse logistics machine-learning ml nru nruhse python

Last synced: about 1 year ago
JSON representation

NSU HSE grade work

Awesome Lists containing this project

README

          

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Выполним импорт необходимых библиотек"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn import cross_validation, grid_search, linear_model, metrics, pipeline, preprocessing\n",
"\n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Загрузим данные в наш DataFrame"
]
},
{
"cell_type": "code",
"execution_count": 190,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"raw_data = pd.read_csv('train.csv', header=0, sep=',')"
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"

\n",
"\n",
" \n",
" \n",
" \n",
" datetime\n",
" season\n",
" holiday\n",
" workingday\n",
" weather\n",
" temp\n",
" atemp\n",
" humidity\n",
" windspeed\n",
" casual\n",
" registered\n",
" count\n",
" \n",
" \n",
" \n",
" \n",
" 0\n",
" 2011-01-01 00:00:00\n",
" 1\n",
" 0\n",
" 0\n",
" 1\n",
" 9.84\n",
" 14.395\n",
" 81\n",
" 0\n",
" 3\n",
" 13\n",
" 16\n",
" \n",
" \n",
" 1\n",
" 2011-01-01 01:00:00\n",
" 1\n",
" 0\n",
" 0\n",
" 1\n",
" 9.02\n",
" 13.635\n",
" 80\n",
" 0\n",
" 8\n",
" 32\n",
" 40\n",
" \n",
" \n",
" 2\n",
" 2011-01-01 02:00:00\n",
" 1\n",
" 0\n",
" 0\n",
" 1\n",
" 9.02\n",
" 13.635\n",
" 80\n",
" 0\n",
" 5\n",
" 27\n",
" 32\n",
" \n",
" \n",
" 3\n",
" 2011-01-01 03:00:00\n",
" 1\n",
" 0\n",
" 0\n",
" 1\n",
" 9.84\n",
" 14.395\n",
" 75\n",
" 0\n",
" 3\n",
" 10\n",
" 13\n",
" \n",
" \n",
" 4\n",
" 2011-01-01 04:00:00\n",
" 1\n",
" 0\n",
" 0\n",
" 1\n",
" 9.84\n",
" 14.395\n",
" 75\n",
" 0\n",
" 0\n",
" 1\n",
" 1\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" datetime season holiday workingday weather temp atemp \\\n",
"0 2011-01-01 00:00:00 1 0 0 1 9.84 14.395 \n",
"1 2011-01-01 01:00:00 1 0 0 1 9.02 13.635 \n",
"2 2011-01-01 02:00:00 1 0 0 1 9.02 13.635 \n",
"3 2011-01-01 03:00:00 1 0 0 1 9.84 14.395 \n",
"4 2011-01-01 04:00:00 1 0 0 1 9.84 14.395 \n",
"\n",
" humidity windspeed casual registered count \n",
"0 81 0 3 13 16 \n",
"1 80 0 8 32 40 \n",
"2 80 0 5 27 32 \n",
"3 75 0 3 10 13 \n",
"4 75 0 0 1 1 "
]
},
"execution_count": 191,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"raw_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Data Fields"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* datetime - hourly date + timestamp \n",
"* season - 1 = spring, 2 = summer, 3 = fall, 4 = winter \n",
"* holiday - whether the day is considered a holiday\n",
"* workingday - whether the day is neither a weekend nor holiday\n",
"* weather \n",
" * 1: Clear, Few clouds, Partly cloudy, Partly cloudy \n",
" * 2: Mist + Cloudy, Mist + Broken clouds, Mist + Few clouds, Mist \n",
" * 3: Light Snow, Light Rain + Thunderstorm + Scattered clouds, Light Rain + Scattered clouds \n",
" * 4: Heavy Rain + Ice Pallets + Thunderstorm + Mist, Snow + Fog \n",
" \n",
"* temp - temperature in Celsius\n",
"* atemp - \"feels like\" temperature in Celsius\n",
"* humidity - relative humidity\n",
"* windspeed - wind speed\n",
"* casual - number of non-registered user rentals initiated\n",
"* registered - number of registered user rentals initiated\n",
"* count - number of total rentals"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Посмотрим на размерность данных"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(10886, 12)\n"
]
}
],
"source": [
"print raw_data.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Посмотрим на пропущенные значения"
]
},
{
"cell_type": "code",
"execution_count": 193,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 193,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"raw_data.isnull().values.any()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Предобработка данных"
]
},
{
"cell_type": "code",
"execution_count": 194,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Int64Index: 10886 entries, 0 to 10885\n",
"Data columns (total 12 columns):\n",
"datetime 10886 non-null object\n",
"season 10886 non-null int64\n",
"holiday 10886 non-null int64\n",
"workingday 10886 non-null int64\n",
"weather 10886 non-null int64\n",
"temp 10886 non-null float64\n",
"atemp 10886 non-null float64\n",
"humidity 10886 non-null int64\n",
"windspeed 10886 non-null float64\n",
"casual 10886 non-null int64\n",
"registered 10886 non-null int64\n",
"count 10886 non-null int64\n",
"dtypes: float64(3), int64(8), object(1)\n",
"memory usage: 1.1+ MB\n"
]
}
],
"source": [
"raw_data.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Почти все данные являются числовыми кроме поля datetime, но мы знаем, что это дата (необходимо преобразование)"
]
},
{
"cell_type": "code",
"execution_count": 195,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"raw_data.datetime = raw_data.datetime.apply(pd.to_datetime)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Построим два новых признака month/hour"
]
},
{
"cell_type": "code",
"execution_count": 196,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"raw_data['month'] = raw_data.datetime.apply(lambda x: x.month)\n",
"raw_data['hour'] = raw_data.datetime.apply(lambda x: x.hour)"
]
},
{
"cell_type": "code",
"execution_count": 197,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
" \n",
" \n",
" \n",
" datetime\n",
" season\n",
" holiday\n",
" workingday\n",
" weather\n",
" temp\n",
" atemp\n",
" humidity\n",
" windspeed\n",
" casual\n",
" registered\n",
" count\n",
" month\n",
" hour\n",
" \n",
" \n",
" \n",
" \n",
" 0\n",
" 2011-01-01 00:00:00\n",
" 1\n",
" 0\n",
" 0\n",
" 1\n",
" 9.84\n",
" 14.395\n",
" 81\n",
" 0\n",
" 3\n",
" 13\n",
" 16\n",
" 1\n",
" 0\n",
" \n",
" \n",
" 1\n",
" 2011-01-01 01:00:00\n",
" 1\n",
" 0\n",
" 0\n",
" 1\n",
" 9.02\n",
" 13.635\n",
" 80\n",
" 0\n",
" 8\n",
" 32\n",
" 40\n",
" 1\n",
" 1\n",
" \n",
" \n",
" 2\n",
" 2011-01-01 02:00:00\n",
" 1\n",
" 0\n",
" 0\n",
" 1\n",
" 9.02\n",
" 13.635\n",
" 80\n",
" 0\n",
" 5\n",
" 27\n",
" 32\n",
" 1\n",
" 2\n",
" \n",
" \n",
" 3\n",
" 2011-01-01 03:00:00\n",
" 1\n",
" 0\n",
" 0\n",
" 1\n",
" 9.84\n",
" 14.395\n",
" 75\n",
" 0\n",
" 3\n",
" 10\n",
" 13\n",
" 1\n",
" 3\n",
" \n",
" \n",
" 4\n",
" 2011-01-01 04:00:00\n",
" 1\n",
" 0\n",
" 0\n",
" 1\n",
" 9.84\n",
" 14.395\n",
" 75\n",
" 0\n",
" 0\n",
" 1\n",
" 1\n",
" 1\n",
" 4\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" datetime season holiday workingday weather temp atemp \\\n",
"0 2011-01-01 00:00:00 1 0 0 1 9.84 14.395 \n",
"1 2011-01-01 01:00:00 1 0 0 1 9.02 13.635 \n",
"2 2011-01-01 02:00:00 1 0 0 1 9.02 13.635 \n",
"3 2011-01-01 03:00:00 1 0 0 1 9.84 14.395 \n",
"4 2011-01-01 04:00:00 1 0 0 1 9.84 14.395 \n",
"\n",
" humidity windspeed casual registered count month hour \n",
"0 81 0 3 13 16 1 0 \n",
"1 80 0 8 32 40 1 1 \n",
"2 80 0 5 27 32 1 2 \n",
"3 75 0 3 10 13 1 3 \n",
"4 75 0 0 1 1 1 4 "
]
},
"execution_count": 197,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"raw_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Обучение и отложенный тест "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Данные отсортированы по дате, обучимся на более поздних датах, и предскажем на более новых"
]
},
{
"cell_type": "code",
"execution_count": 198,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"train_data = raw_data.iloc[:-1000, :]\n",
"hold_out_test_data = raw_data.iloc[-1000:, :]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Оценим размеры полученных наборов данных"
]
},
{
"cell_type": "code",
"execution_count": 199,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(10886, 14) (9886, 14) (1000, 14)\n"
]
}
],
"source": [
"print raw_data.shape, train_data.shape, hold_out_test_data.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Убедимся, что вся обучающая выборка в более раннем периоде времени"
]
},
{
"cell_type": "code",
"execution_count": 200,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"train period from 2011-01-01 00:00:00 to 2012-10-16 06:00:00\n",
"test period from 2012-10-16 07:00:00 to 2012-12-19 23:00:00\n"
]
}
],
"source": [
"print 'train period from {} to {}'.format(train_data.datetime.min(),\n",
" train_data.datetime.max())\n",
"print 'test period from {} to {}'.format(hold_out_test_data.datetime.min(),\n",
" hold_out_test_data.datetime.max())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Данные и целевая функция"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Удалим дату и целевую переменную, чтобы было удобнее работать с признаками"
]
},
{
"cell_type": "code",
"execution_count": 201,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#обучение\n",
"train_labels = train_data['count'].values\n",
"train_data = train_data.drop(['datetime','count'], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 202,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#тест\n",
"test_labels = hold_out_test_data['count'].values\n",
"test_data = hold_out_test_data.drop(['datetime','count'], axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Целевая функция на обучающей выборке и на отложенном тесте"
]
},
{
"cell_type": "code",
"execution_count": 203,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 203,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nkiRJkqTOMtRKkiRJkjrLUCtJkiRJ6qw1oy5A0lydStLe22yOj29kcvLAqMuQJEnSKmOolTrjOdp7\nk3WYmmpv4JYkSdLK5enHkiRJkqTOMtRKkiRJkjrLUCtJkiRJ6ixDrSRJkiSps7xQlCRJkqQhaucd\nG7xTw8plqJUkSZI0RO28Y4N3ali5PP1YkiRJktRZhlpJkiRJUmcZaiVJkiRJnWWolSRJkiR1lqFW\nkiRJktRZhlpJkiRJUmd5Sx9JQ9LOe9KB96WTJElayQy1koaknfekA+9LJ0mStJJ5+rEkSZIkqbMM\ntZIkSZKkzjLUSpIkSZI6y1ArSZIkSeosQ60kSZIkqbMMtZIkSZKkzvKWPpJWgfbeQxe8j64kSdJi\nGGolrQLtvYcueB9dSZKkxTDUStLIeSRZkqSl185+a59dPEOtJI2cR5IlSVp67ey39tnFW/YLRSW5\nMMl/TvKtJB9Z7veXJEkvZG+WpFHqH0Fu27Ju3aZRT8ycLWuoTXIK8L8DFwBvAX41yZuXs4bVozfq\nAlaA3qgLWAF6oy5gBeiNugCtcPbm5dQbdQErQG/UBawAvVEXsAL0hvx6J44gt2uZmnpqyJ9z6Sz3\nkdqtwP6qeqqqjgJ3AJcscw2rRG/UBawAvVEXsAL0Rl3ACtAbdQFa+ezNy6Y36gJWgN6oC1gBeqMu\nYAXojboAnWS5Q+164ODA40PNmCRJGg17sySp01p7oahXv/qXR13CtP76r58cdQmStMzaebVI8IqR\ny61tvfn48SM8++yoq5AkjVqqlu8KYEl+Fri2qi5sHm8HqqpuOGm79l2WTJLUaVXVzmQ+YvZmSdKo\nDKs3L3eofRnwJPCLwHeAh4Ffrap9y1aEJEn6EXuzJKnrlvX046r6YZIPAvfR/z3v52yakiSNjr1Z\nktR1y3qkVpIkSZKkYVruqx+/JG/+PjdJNiR5MMk3kzyR5EPN+Nok9yV5MsnuJGMD++xIsj/JviTn\nj676dklySpKvJ7mreewczkOSsSS/18zJN5Nscw7nJ8lvJvlGkseT3J7k5c7h7JJ8LslUkscHxuY9\nb0nObeb+W0k+udyfowvszXNjbx4ee/Pi2JsXz968MCPtzVXVioV+wP5TYCPwY8CjwJtHXVcbF2Ad\nsKVZfxX930K9GbgB+CfN+EeAjzXr5wCP0D/dfFMzzxn152jDAvwm8LvAXc1j53B+83cL8GvN+hpg\nzDmc1/y9Dvgz4OXN4y8C73UO5zR3fwfYAjw+MDbveQO+CvxMs34PcMGoP1ubFnvzvObK3jy8ubQ3\nL27+7M2Lmz9788LnbmS9uU1Har35+xxV1WRVPdqsPwvsAzbQn6+dzWY7gUub9YuBO6rqWFUdAPbT\nn+9VLckG4J3AZweGncM5SvJq4O9W1ecBmrk5gnM4Xy8DXplkDfAK4DDO4ayq6svAMycNz2vekqwD\nTq+qPc12tw7soz578xzZm4fD3rw49uahsTcvwCh7c5tCrTd/X4Akm+h/I/IQMF5VU9BvrsAZzWYn\nz+1hnFuATwD/GBj8YblzOHc/DXw/yeeb08T+TZIfxzmcs6r6C+DjwLfpz8eRqnoA53ChzpjnvK2n\n32tOsO+8mL15AezNi2JvXhx78yLZm4duWXpzm0Kt5inJq4AvAR9uvhU++apfXgVsBkn+HjDVfKv+\nUvfHcg5ntgY4F/jXVXUu8P8B2/GfwzlL8hP0v8HcSP90p1cmeQ/O4bA4b1p29uaFszcPhb15kezN\nS25J5q1NofYw8PqBxxuaMU2jOR3iS8BtVXVnMzyVZLx5fh3w3Wb8MHDmwO7OLZwHXJzkz4D/A/iF\nJLcBk87hnB0CDlbVnzSPf59+I/Wfw7l7B/BnVfV0Vf0Q+APgb+McLtR85835nJ29eR7szYtmb148\ne/Pi2ZuHa1l6c5tC7R7gjUk2Jnk58C7grhHX1Ga/A+ytqk8NjN0FvK9Zfy9w58D4u5ort/008Ebg\n4eUqtI2q6qNV9fqqegP9f9YerKq/D9yNczgnzakkB5Oc1Qz9IvBN/OdwPr4N/GyS05KE/hzuxTmc\nq/DCoznzmrfmNKgjSbY283/5wD7qszfPj715EezNi2dvHgp78+KMpjcv1dWvFrIAF9K/WuB+YPuo\n62nrQv+bzB/SvwrlI8DXm7n7SeCBZg7vA35iYJ8d9K8qtg84f9SfoU0L8PM8f4VF53B+c/e36P/R\n+yjwb+lfYdE5nN8cXtPMx+P0L6DwY87hnObtC8BfAM/R/wPk14C185034L8Dnmj6zqdG/bnauNib\n5zxP9ubhzqe9eeFzZ29e/Bzamxc2byPrzScumyxJkiRJUue06fRjSZIkSZLmxVArSZIkSeosQ60k\nSZIkqbMMtZIkSZKkzjLUSpIkSZI6y1ArSZIkSeosQ60kSZIkqbMMtZIkSZKkzvqvhfGl5ksvuHwA\nAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pylab.figure(figsize=(16, 6))\n",
"\n",
"pylab.subplot(1,2,1)\n",
"pylab.hist(train_labels)\n",
"pylab.title('train data')\n",
"\n",
"\n",
"pylab.subplot(1,2,2)\n",
"pylab.hist(test_labels)\n",
"pylab.title('test data')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Так как мы решаем задачу регрессии, то возьмем пока только числовые признаки"
]
},
{
"cell_type": "code",
"execution_count": 204,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"numeric_columns = ['temp', 'atemp', 'humidity', 'windspeed', 'casual', 'registered', 'month', 'hour']"
]
},
{
"cell_type": "code",
"execution_count": 205,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"train_data = train_data[numeric_columns]\n",
"test_data = test_data[numeric_columns]"
]
},
{
"cell_type": "code",
"execution_count": 206,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
" \n",
" \n",
" \n",
" temp\n",
" atemp\n",
" humidity\n",
" windspeed\n",
" casual\n",
" registered\n",
" month\n",
" hour\n",
" \n",
" \n",
" \n",
" \n",
" 0\n",
" 9.84\n",
" 14.395\n",
" 81\n",
" 0\n",
" 3\n",
" 13\n",
" 1\n",
" 0\n",
" \n",
" \n",
" 1\n",
" 9.02\n",
" 13.635\n",
" 80\n",
" 0\n",
" 8\n",
" 32\n",
" 1\n",
" 1\n",
" \n",
" \n",
" 2\n",
" 9.02\n",
" 13.635\n",
" 80\n",
" 0\n",
" 5\n",
" 27\n",
" 1\n",
" 2\n",
" \n",
" \n",
" 3\n",
" 9.84\n",
" 14.395\n",
" 75\n",
" 0\n",
" 3\n",
" 10\n",
" 1\n",
" 3\n",
" \n",
" \n",
" 4\n",
" 9.84\n",
" 14.395\n",
" 75\n",
" 0\n",
" 0\n",
" 1\n",
" 1\n",
" 4\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" temp atemp humidity windspeed casual registered month hour\n",
"0 9.84 14.395 81 0 3 13 1 0\n",
"1 9.02 13.635 80 0 8 32 1 1\n",
"2 9.02 13.635 80 0 5 27 1 2\n",
"3 9.84 14.395 75 0 3 10 1 3\n",
"4 9.84 14.395 75 0 0 1 1 4"
]
},
"execution_count": 206,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 207,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
" \n",
" \n",
" \n",
" temp\n",
" atemp\n",
" humidity\n",
" windspeed\n",
" casual\n",
" registered\n",
" month\n",
" hour\n",
" \n",
" \n",
" \n",
" \n",
" 9886\n",
" 17.22\n",
" 21.210\n",
" 67\n",
" 6.0032\n",
" 20\n",
" 505\n",
" 10\n",
" 7\n",
" \n",
" \n",
" 9887\n",
" 18.04\n",
" 21.970\n",
" 62\n",
" 0.0000\n",
" 35\n",
" 800\n",
" 10\n",
" 8\n",
" \n",
" \n",
" 9888\n",
" 19.68\n",
" 23.485\n",
" 55\n",
" 16.9979\n",
" 32\n",
" 323\n",
" 10\n",
" 9\n",
" \n",
" \n",
" 9889\n",
" 20.50\n",
" 24.240\n",
" 48\n",
" 19.0012\n",
" 65\n",
" 157\n",
" 10\n",
" 10\n",
" \n",
" \n",
" 9890\n",
" 20.50\n",
" 24.240\n",
" 45\n",
" 27.9993\n",
" 56\n",
" 172\n",
" 10\n",
" 11\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" temp atemp humidity windspeed casual registered month hour\n",
"9886 17.22 21.210 67 6.0032 20 505 10 7\n",
"9887 18.04 21.970 62 0.0000 35 800 10 8\n",
"9888 19.68 23.485 55 16.9979 32 323 10 9\n",
"9889 20.50 24.240 48 19.0012 65 157 10 10\n",
"9890 20.50 24.240 45 27.9993 56 172 10 11"
]
},
"execution_count": 207,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Модель"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Обучим SGDRegressor - регрессия на основе стохастического градиентного спуска"
]
},
{
"cell_type": "code",
"execution_count": 208,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"regressor = linear_model.SGDRegressor(random_state=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Используем параметры по умолчанию"
]
},
{
"cell_type": "code",
"execution_count": 209,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"23756929732818.266"
]
},
"execution_count": 209,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"regressor.fit(train_data, train_labels)\n",
"metrics.mean_absolute_error(test_labels, regressor.predict(test_data))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Выведим тестовые метки и те что предсказали, чтобы увидеть разницу"
]
},
{
"cell_type": "code",
"execution_count": 210,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[525 835 355 222 228 325 328 308 346 446]\n"
]
}
],
"source": [
"print test_labels[:10]"
]
},
{
"cell_type": "code",
"execution_count": 211,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ -5.49937759e+13 -8.85325874e+13 -3.70533023e+13 -2.25065153e+13\n",
" -2.37308393e+13 -3.38802477e+13 -3.40698991e+13 -3.17048874e+13\n",
" -3.61620909e+13 -4.69681797e+13]\n"
]
}
],
"source": [
"print regressor.predict(test_data)[:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Мы выводим слишком большие значения"
]
},
{
"cell_type": "code",
"execution_count": 212,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3.32334025e+10, 2.30830830e+10, 3.12573533e+10,\n",
" -4.53893233e+10, -1.00561685e+11, -1.09157806e+11,\n",
" -7.94127090e+10, 1.01775965e+10])"
]
},
"execution_count": 212,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"regressor.coef_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Линейные модели сильно зависят от масштаба признаков"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Scaling"
]
},
{
"cell_type": "code",
"execution_count": 213,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.preprocessing import StandardScaler"
]
},
{
"cell_type": "code",
"execution_count": 214,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"## создаем стандартный scaler\n",
"scaler = StandardScaler()\n",
"scaler.fit(train_data, train_labels)\n",
"scaled_train_data = scaler.transform(train_data)\n",
"scaled_test_data = scaler.transform(test_data)"
]
},
{
"cell_type": "code",
"execution_count": 215,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.1179376296343153"
]
},
"execution_count": 215,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"regressor.fit(scaled_train_data, train_labels)\n",
"metrics.mean_absolute_error(test_labels, regressor.predict(scaled_test_data))"
]
},
{
"cell_type": "code",
"execution_count": 216,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[525 835 355 222 228 325 328 308 346 446]\n"
]
}
],
"source": [
"print test_labels[:10]"
]
},
{
"cell_type": "code",
"execution_count": 217,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 524.82767322 834.83176277 354.85768824 221.89221002 227.84049612\n",
" 324.88196372 327.8982227 307.9347954 345.90146969 445.90141764]\n"
]
}
],
"source": [
"print regressor.predict(scaled_test_data)[:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Отличаются примерно на 1. Скорее всего присутствует переобучение"
]
},
{
"cell_type": "code",
"execution_count": 218,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1.41019246e+00 -1.40725539e+00 1.45346928e-02 -4.38984175e-02\n",
" 5.08589954e+01 1.48004811e+02 -8.23376876e-03 6.37720415e-03]\n"
]
}
],
"source": [
"print regressor.coef_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Выведим коэффициенты с округлением"
]
},
{
"cell_type": "code",
"execution_count": 219,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1.41, -1.41, 0.01, -0.04, 50.86, 148.0, -0.01, 0.01]\n"
]
}
],
"source": [
"print map(lambda x : round(x, 2), regressor.coef_)"
]
},
{
"cell_type": "code",
"execution_count": 220,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
" \n",
" \n",
" \n",
" temp\n",
" atemp\n",
" humidity\n",
" windspeed\n",
" casual\n",
" registered\n",
" month\n",
" hour\n",
" \n",
" \n",
" \n",
" \n",
" 0\n",
" 9.84\n",
" 14.395\n",
" 81\n",
" 0\n",
" 3\n",
" 13\n",
" 1\n",
" 0\n",
" \n",
" \n",
" 1\n",
" 9.02\n",
" 13.635\n",
" 80\n",
" 0\n",
" 8\n",
" 32\n",
" 1\n",
" 1\n",
" \n",
" \n",
" 2\n",
" 9.02\n",
" 13.635\n",
" 80\n",
" 0\n",
" 5\n",
" 27\n",
" 1\n",
" 2\n",
" \n",
" \n",
" 3\n",
" 9.84\n",
" 14.395\n",
" 75\n",
" 0\n",
" 3\n",
" 10\n",
" 1\n",
" 3\n",
" \n",
" \n",
" 4\n",
" 9.84\n",
" 14.395\n",
" 75\n",
" 0\n",
" 0\n",
" 1\n",
" 1\n",
" 4\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" temp atemp humidity windspeed casual registered month hour\n",
"0 9.84 14.395 81 0 3 13 1 0\n",
"1 9.02 13.635 80 0 8 32 1 1\n",
"2 9.02 13.635 80 0 5 27 1 2\n",
"3 9.84 14.395 75 0 3 10 1 3\n",
"4 9.84 14.395 75 0 0 1 1 4"
]
},
"execution_count": 220,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Похоже casual + registered = count\n",
"#### Необходимо проверить гипотезу"
]
},
{
"cell_type": "code",
"execution_count": 221,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([16, 40, 32, 13, 1, 1, 2, 3, 8, 14], dtype=int64)"
]
},
"execution_count": 221,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_labels[:10]"
]
},
{
"cell_type": "code",
"execution_count": 222,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 222,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.all(train_data.registered + train_data.casual == train_labels)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### У нас линейная зависимость, которая полностью восстанавливает закономерность, значит, необходимо удалить эти признаки из выборки"
]
},
{
"cell_type": "code",
"execution_count": 223,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"train_data.drop(['registered', 'casual'], axis=1, inplace=True)\n",
"test_data.drop(['registered', 'casual'], axis=1, inplace=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Масштабируем признаки"
]
},
{
"cell_type": "code",
"execution_count": 224,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"scaler.fit(train_data, train_labels)\n",
"scaled_train_data = scaler.transform(train_data)\n",
"scaled_test_data = scaler.transform(test_data)"
]
},
{
"cell_type": "code",
"execution_count": 225,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"121.81123864993025"
]
},
"execution_count": 225,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"regressor.fit(scaled_train_data, train_labels)\n",
"metrics.mean_absolute_error(test_labels, regressor.predict(scaled_test_data))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Мы ошибаемся примерно на 122 велосипеда - реалистичная оценка"
]
},
{
"cell_type": "code",
"execution_count": 226,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[31.03, 29.96, -41.93, 6.17, 14.08, 49.6]\n"
]
}
],
"source": [
"print map(lambda x : round(x, 2), regressor.coef_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Теперь все признаки имеют хорошие коэффициенты"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Мы уже имеем некоторую базовую модель, которую считаем правильной. Проведем ее улучшения"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Подберем оптимальные параметры для нашей модели"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Pipeline"
]
},
{
"cell_type": "code",
"execution_count": 227,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# создаем pipeline из 2х шагов: scaling и классификация\n",
"pipe_line = pipeline.Pipeline(steps = [('scaling', scaler), ('regression', regressor)])"
]
},
{
"cell_type": "code",
"execution_count": 228,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\got\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\__init__.py:93: DeprecationWarning: Function transform is deprecated; Support to use estimators as feature selectors will be removed in version 0.19. Use SelectFromModel instead.\n",
" warnings.warn(msg, category=DeprecationWarning)\n"
]
},
{
"data": {
"text/plain": [
"121.81123864993025"
]
},
"execution_count": 228,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pipe_line.fit_transform(train_data, train_labels)\n",
"metrics.mean_absolute_error(test_labels, pipe_line.predict(test_data))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Перебор параметров"
]
},
{
"cell_type": "code",
"execution_count": 229,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['regression__random_state',\n",
" 'regression__n_iter',\n",
" 'regression__epsilon',\n",
" 'regression__power_t',\n",
" 'regression__alpha',\n",
" 'regression__eta0',\n",
" 'regression__loss',\n",
" 'scaling',\n",
" 'steps',\n",
" 'scaling__copy',\n",
" 'regression__fit_intercept',\n",
" 'regression__warm_start',\n",
" 'regression__penalty',\n",
" 'regression__learning_rate',\n",
" 'regression__average',\n",
" 'regression__verbose',\n",
" 'regression__shuffle',\n",
" 'regression__l1_ratio',\n",
" 'regression',\n",
" 'scaling__with_std',\n",
" 'scaling__with_mean']"
]
},
"execution_count": 229,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pipe_line.get_params().keys()"
]
},
{
"cell_type": "code",
"execution_count": 230,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"parameters_grid = {\n",
" 'regression__loss' : ['huber', 'epsilon_insensitive', 'squared_loss', ],\n",
" 'regression__n_iter' : [3, 5, 10, 50], \n",
" 'regression__penalty' : ['l1', 'l2', 'none'],\n",
" 'regression__alpha' : [0.0001, 0.01],\n",
" 'scaling__with_mean' : [0., 0.5],\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 231,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"grid_cv = grid_search.GridSearchCV(pipe_line, parameters_grid, scoring='mean_absolute_error', cv=4)"
]
},
{
"cell_type": "code",
"execution_count": 232,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 27 s\n"
]
},
{
"data": {
"text/plain": [
"GridSearchCV(cv=4, error_score='raise',\n",
" estimator=Pipeline(steps=[('scaling', StandardScaler(copy=True, with_mean=True, with_std=True)), ('regression', SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,\n",
" fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',\n",
" loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,\n",
" random_state=0, shuffle=True, verbose=0, warm_start=False))]),\n",
" fit_params={}, iid=True, n_jobs=1,\n",
" param_grid={'regression__n_iter': [3, 5, 10, 50], 'regression__loss': ['huber', 'epsilon_insensitive', 'squared_loss'], 'scaling__with_mean': [0.0, 0.5], 'regression__alpha': [0.0001, 0.01], 'regression__penalty': ['l1', 'l2', 'none']},\n",
" pre_dispatch='2*n_jobs', refit=True, scoring='mean_absolute_error',\n",
" verbose=0)"
]
},
"execution_count": 232,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"grid_cv.fit(train_data, train_labels)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Лучшая оценка и лучшие параметры равны"
]
},
{
"cell_type": "code",
"execution_count": 233,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-108.614496603\n",
"{'regression__n_iter': 3, 'regression__loss': 'squared_loss', 'scaling__with_mean': 0.0, 'regression__alpha': 0.01, 'regression__penalty': 'l2'}\n"
]
}
],
"source": [
"print grid_cv.best_score_\n",
"print grid_cv.best_params_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Оценка лучшей модели на отложенном тесте"
]
},
{
"cell_type": "code",
"execution_count": 234,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"119.98978845935379"
]
},
"execution_count": 234,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"metrics.mean_absolute_error(test_labels, grid_cv.best_estimator_.predict(test_data))"
]
},
{
"cell_type": "code",
"execution_count": 235,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"232.15899999999999"
]
},
"execution_count": 235,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.mean(test_labels)"
]
},
{
"cell_type": "code",
"execution_count": 236,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"test_predictions = grid_cv.best_estimator_.predict(test_data)"
]
},
{
"cell_type": "code",
"execution_count": 237,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[525 835 355 222 228 325 328 308 346 446]\n"
]
}
],
"source": [
"print test_labels[:10]"
]
},
{
"cell_type": "code",
"execution_count": 238,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 139.60470681 159.80765341 207.55935972 237.76288054 257.83836668\n",
" 267.44558034 272.49537469 297.70688522 304.29818873 313.58821156]\n"
]
}
],
"source": [
"print test_predictions[:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Предсказанные и реальные метки сильно отличаются"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Изобразим графически отображение в пространстве правильных целевых меток и наших предсказаний\n",
"#### (ожидаем диагональ в облаке точек)"
]
},
{
"cell_type": "code",
"execution_count": 239,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 239,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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