機器學習(十)使用sklearn庫對時間特徵進行處理
轉自寒老師的七月演算法ML課程,加了一點自己理解
# -*- coding: utf-8 -*-
"""
Created on Mon Oct 31 20:27:11 2016
@author: Sirius
特徵工程之時間型特徵處理
"""
import pandas as pd
data=pd.read_csv('kaggle_bike_competition_train.csv',
header=0,error_bad_lines=False)
t_data=data.head()
"""
資料結構>>>
datetime season holiday workingday weather temp atemp \
0 2011/1/1 0:00 1 0 0 1 9.84 14.395
1 2011/1/1 1:00 1 0 0 1 9.02 13.635
2 2011/1/1 2:00 1 0 0 1 9.02 13.635
3 2011/1/1 3:00 1 0 0 1 9.84 14.395
4 2011/1/1 4:00 1 0 0 1 9.84 14.395
humidity windspeed casual registered count
0 81 0 3 13 16
1 80 0 8 32 40
2 80 0 5 27 32
3 75 0 3 10 13
4 75 0 0 1 1
"""
"""--------------------時間型特徵-------------------------------------
既可以看作是連續型,也可以看作是離散型,比如瀏覽一個網頁的停留時間,
一週中的某天、24小時中的某時。。
比如收集到的時間資訊為2015-10-21 15:30:55,我們可以構造出季節特徵:
season=[0,0,1,1,1,2,2,2,3,3,3,0],每天24h的吃飯睡覺規律特徵: sleep:12-5,6-9
breakfast:10-14,luanch:14-17等等
這裡,把datetime細分為日期和時間兩部分
"""
temp=pd.DatetimeIndex(data['datetime' ])
data['date']=temp.date #新增date和time兩個鍵和值
data['time']=temp.time
#由於時間的部分最小粒度為小時,所以把time變為hour更加簡潔
data['hour']=pd.to_datetime(data.time,format="%H:%M:%S")#變換格式
data['hour']=pd.Index(data["hour"]).hour
data['dayofweek']=pd.DatetimeIndex(data.date).dayofweek #提取出星期幾這個特徵
data['dateDays']=(data.date-data.date[0 ]).astype('timedelta64[D]') #計算總共多少天
#統計每個星期沒註冊使用者的租賃情況
byday=data.groupby('dayofweek')
byday['casual'].sum().reset_index()
"""
dayofweek casual
0 0 46288
1 1 35365
2 2 34931
3 3 37283
4 4 47402
5 5 100782
6 6 90084
"""
byday['registered'].sum().reset_index()#註冊使用者
"""
dayofweek registered
0 0 249008
1 1 256620
2 2 257295
3 3 269118
4 4 255102
5 5 210736
6 6 195462
"""
#把週六和週日兩天單獨提取出來
data['Saturday']=0
data.Saturday[data.dayofweek==5]=1 #0表示沒用到車,1表示用了
data['Sunday']=0
data.Sunday[data.dayofweek==6]=1
#把舊的時間特徵去掉
dataRel=data.drop(['datetime','count','date','time','dayofweek'],axis=1)
"""------------------特徵向量化-------------------------------------------------
把連續值和離散值分放到兩個dict中,對連續值特徵進行標準化(使其均值為0、方差為1),
離散值特徵進行one-hot編碼出來,最後再把兩個dict進行合併
"""
from sklearn.feature_extraction import DictVectorizer
#連續值:
featureConCols = ['temp','atemp','humidity','windspeed','dateDays','hour']
dataFeatureCon = dataRel[featureConCols]
dataFeatureCon = dataFeatureCon.fillna( 'NA' ) #in case I missed any
X_dictCon = dataFeatureCon.T.to_dict().values()
#離散值:
featureCatCols = ['season','holiday','workingday','weather','Saturday', 'Sunday']
dataFeatureCat = dataRel[featureCatCols]
dataFeatureCat = dataFeatureCat.fillna( 'NA' ) #in case I missed any
X_dictCat = dataFeatureCat.T.to_dict().values()
#向量化特徵,轉換為numpy矩陣
vec=DictVectorizer(sparse=False)
X_vec_cat=vec.fit_transform(X_dictCat)
X_vec_con=vec.fit_transform(X_dictCon)
#連續值特徵標準化,對模型訓練的收斂和提高準確性有好處
from sklearn import preprocessing
scaler=preprocessing.StandardScaler().fit(X_vec_con)
X_vec_con_ed=scaler.transform(X_vec_con)
#對離散值進行one-hot編碼
enc=preprocessing.OneHotEncoder()
enc.fit(X_vec_cat)
X_vec_cat_ed=enc.transform(X_vec_cat).toarray()
#把離散特徵和連續特徵組合
import numpy as np
X_vec=np.concatenate((X_vec_con_ed,X_vec_cat_ed),axis=1)
"""
X_vec[:5,:]
>>>
[[-1.09273697 -1.70912256 -1.66894356 0.99321305 -1.33366069 -1.56775367
0. 1. 1. 0. 1. 0. 1.
0. 0. 0. 1. 0. 0. 0.
1. 0. ]
[-1.18242083 -1.70912256 -1.52434128 0.94124921 -1.43890721 -1.56775367
0. 1. 1. 0. 1. 0. 1.
0. 0. 0. 1. 0. 0. 0.
1. 0. ]
[-1.18242083 -1.70912256 -1.379739 0.94124921 -1.43890721 -1.56775367
0. 1. 1. 0. 1. 0. 1.
0. 0. 0. 1. 0. 0. 0.
1. 0. ]
[-1.09273697 -1.70912256 -1.23513672 0.68142998 -1.33366069 -1.56775367
0. 1. 1. 0. 1. 0. 1.
0. 0. 0. 1. 0. 0. 0.
1. 0. ]
[-1.09273697 -1.70912256 -1.09053444 0.68142998 -1.33366069 -1.56775367
0. 1. 1. 0. 1. 0. 1.
0. 0. 0. 1. 0. 0. 0.
1. 0. ]]
"""
相關推薦
機器學習(十)使用sklearn庫對時間特徵進行處理
轉自寒老師的七月演算法ML課程,加了一點自己理解 # -*- coding: utf-8 -*- """ Created on Mon Oct 31 20:27:11 2016 @author: Sirius 特徵工程之時間型特徵處理 """ imp
機器學習 (十) 優化演算法利器之梯度下降(Gradient Descend)
理解:機器學習各種演算法的求解最終出來的幾乎都是求解最優模型引數的優化問題。 前言 在優化問題領域有些很多優秀思想和演算法,從約束條件分類 分為無約束條件的優化和有約束條件的優化問題,有約束條
演算法工程師修仙之路:吳恩達機器學習(十)
吳恩達機器學習筆記及作業程式碼實現中文版 第七章 神經網路引數的反向傳播演算法 理解反向傳播 為了更好地理解反向傳播演算法,我們再來仔細研究一下前向傳播的原理: 反向傳播演算法做的是: 梯度檢測 當我們對一個較為複雜
機器學習(十)——指數族(The exponential family)
為了達到廣義線性模型,我們首先定義指數族分佈。我們說如果一個分佈是指數族分佈,那麼它可以用以下形式表示:這裡,η被稱為分佈的自然引數(也稱為規範引數);T(y)是充分統計量(對於我們所考慮的分佈,通常情況下有T(y)=y);a(η)被稱為對數劃分函式。這一項本質上是起到了正則
機器學習(一): python三種特徵選擇方法
特徵選擇的三種方法介紹: 過濾型: 選擇與目標變數相關性較強的特徵。缺點:忽略了特徵之間的關聯性。 包裹型: 基於線性模型相關係數以及模型結果AUC逐步剔除特徵。如果剔除相關係數絕對值較小特徵後
機器學習(5)、資料清洗和特徵選擇
正式進入機器學習啦,這節課還好,意外知道了莊家與賠率的計算(原來莊家真的是穩賺不賠呢,樓主表示很想設賭局去做莊);python庫好強大,Pandas包直接提供資料讀取和處理,Fuzzywuzzy支援字串模糊查詢,可用於字串糾錯;知道了機器學習處理的大概流程;之前
python機器學習(1)python.sklearn庫
1.安裝numpy、scipy、matplotlib、sklearn庫 安裝方法: (1).whl檔案 下載地址:http://www.lfd.uci.edu/~gohlke/pythonlibs (2)在下載路徑下開啟dos命令列依次執行 PS:35指python版本3.5、
機器學習之numpy和matplotlib學習(十)
今天繼續來學習numpy。 學習一件事情最重要的是持之以恆,我自己也知道這個部落格系列應該不會有很多人觀看和學習。 我自己覺得看視訊相對於看書學的快一些。 但是無論哪一種學習形式,你必須要自己動手實踐。 以後我儘量在程式碼裡面進行講解,大家直接看程式碼註釋就可以。 talk i
吳恩達機器學習(十六)機器學習流水線、上限分析
目錄 0. 前言 1. 流水線 2. 上限分析(Ceiling analysis) 學習完吳恩達老師機器學習課程的照片OCR,簡單的做個筆記。文中部分描述屬於個人消化後的理解,僅供參考。 如果這篇文章對你有一點小小的幫助,請給個關注
機器學習與深度學習系列連載: 第二部分 深度學習(十)卷積神經網路 1 Convolutional Neural Networks
卷積神經網路 Convolutional Neural Networks 卷積神經網路其實早在80年代,就被神經網路泰斗Lecun 提出[LeNet-5, LeCun 1980],但是由於當時的資料量、計算力等問題,沒有得到廣泛使用。 卷積神經網路的靈感來自50年代的諾貝爾生物學獎
機器學習 (十六)電商O2O優惠券使用預測-2
介紹 這篇文章是想繼續總結一遍優惠券預測,寫寫感受並進行一個記錄總結,零零散散以作為記錄整理之用。 本篇是選了三點本人覺得專案中重要的寫了一下,其它內容暫時略過 第一部分:資料清洗資料分析程式碼
機器學習 (十七)kaggle競賽之泰坦尼克號專案實戰-2
導航 想寫這篇部落格的由衷是做完幾個專案,有時對於圖的畫法和模型融合演算法原理理解還很膚淺,特此加深一下印象。 內容概覽 圖 pandas、matplotlib、seaborn 餅圖 直方圖
機器學習 (十五) 關聯分析之Apriori演算法
前言 目前隨著資料量迅速增多,從海量資料中尋找有價值的資訊帶來的成本也在不斷增加,傳統的搜尋資料方式已經不能滿足我們的需要,我們先來通過一個演算法看一下演算法時間複雜度快慢帶來的影響,通過計算耗時我們會有個感性
機器學習 (十四)輕鬆理解模型評價指標
篇首語 相信大家都知道下面的圖片是啥意思,每個無論在啥公司、無論哪個行業都有自己的KPI評價指標,公司會根據公司情況設定公司戰略KPI、部門KPI、以及每個人的指標,對於員工也是比較關心自己的KPI因為關係著你
機器學習 (十二)讓你輕鬆理解K-means 聚類演算法
前言 你還記得菜市場賣菜的嗎?書店賣書的或者是平時去超市買東西時的物品,它們是不是都根據相似性擺放在一起了呢,飲料、啤酒、零食分佈在各自區域,像這樣各級事物的相似特點或特性組織在一起的方法,在機器學習裡面即成為
機器學習 (十一) SVM-支援向量機
春夜喜雨 好雨知時節,當春乃發生。 隨風潛入夜,潤物細無聲。 野徑雲俱黑,江船火獨明。 曉看紅溼處,花重錦官城。 前言 週末很多城市下開了雨,下雨中也不乏忙忙碌碌的人們,有的天不亮已經忙碌匆
機器學習與深度學習系列連載: 第一部分 機器學習(十一)決策樹2(Decision Tree)
決策樹2 決策樹很容易出現過擬合問題,針對過擬合問題,我們採用以下幾種方法 劃分選擇 vs 剪枝 剪枝 (pruning) 是決策樹對付“過擬合”的 主要手段! 基本策略: 預剪枝 (pre-pruning): 提前終止某些分支的生長 後剪枝 (post-pr
機器學習與深度學習系列連載: 第一部分 機器學習(十四)非監督度學習-1 Unsupervised Learning-1
非監督度學習-1 Unsupervised Learning-1(K-means,HAC,PCA) 非監督學習方法主要分為兩大類 Dimension Reduction (化繁為簡) Generation (無中生有) 目前我們僅專注化繁為簡,降維的方法,
機器學習與深度學習系列連載: 第一部分 機器學習(十五)非監督度學習-2 Unsupervised Learning-2(Neighbor Embedding)
臨近編碼 Neighbor Embedding 在非監督學習降維演算法中,高緯度的資料,在他附近的資料我們可以看做是低緯度的,例如地球是三維度的,但是地圖可以是二維的。 那我們就開始上演算法 1. Locally Linear Embedding (LLE) 我
機器學習與深度學習系列連載: 第一部分 機器學習(十七)非監督度學習-2 Unsupervised Learning-4(Generative Models)
生成模型 Generative Models 用非監督學習生成結構化資料,是非監督模型的一個重要分支,本節重點介紹三個演算法: Pixel RNN ,VAE 和GAN(以後會重點講解原理) 1. Pixel RNN RNN目前還沒有介紹,,以後會重點講解,大家