機器學(xué)習(xí)最好入門的是什么晃琳?根基是什么寿羞?
我覺得是分類察滑。
我當(dāng)然不會講什么具體的分類算法的實現(xiàn)有勾,我們直接用Scikit-learn。關(guān)于scikit-learn,唯一需要知道的是林说,它除了深度學(xué)習(xí)煎殷,傳統(tǒng)機器學(xué)習(xí)它都很好用,也就是直接調(diào)個函數(shù)的事兒(如果你會那么一點點的python)述么。
但蝌数,這次要用到的不是分類愕掏,是回歸度秘。在我看來它們差不多,如果你把連續(xù)的數(shù)饵撑,一個一個來看剑梳,也就是分類了。
從uci獲取北京的pm2.5數(shù)據(jù)
從這個csv網(wǎng)址你可以直接獲得數(shù)據(jù)滑潘。
打開看一下垢乙,它大概是這個樣子:
No,year,month,day,hour,pm2.5,DEWP,TEMP,PRES,cbwd,Iws,Is,Ir
1,2010,1,1,0,NA,-21,-11,1021,NW,1.79,0,0
2,2010,1,1,1,NA,-21,-12,1020,NW,4.92,0,0
3,2010,1,1,2,NA,-21,-11,1019,NW,6.71,0,0
4,2010,1,1,3,NA,-21,-14,1019,NW,9.84,0,0
5,2010,1,1,4,NA,-20,-12,1018,NW,12.97,0,0
6,2010,1,1,5,NA,-19,-10,1017,NW,16.1,0,0
7,2010,1,1,6,NA,-19,-9,1017,NW,19.23,0,0
8,2010,1,1,7,NA,-19,-9,1017,NW,21.02,0,0
9,2010,1,1,8,NA,-19,-9,1017,NW,24.15,0,0
第一列是編號,第二個是年份语卤,第三個是月份追逮,第四個是日期,第五個小時粹舵,第六個是pm2.5的值钮孵,單位是ug/m^3,第七個是露點(Dew point)眼滤,又稱露點溫度巴席,第八個是溫度,第九個是氣壓诅需,第十個是風(fēng)向漾唉,下來是風(fēng)速荧库,下來是積累雪量與積累雨量。
如果數(shù)據(jù)缺失赵刑,就用NA,代表分衫。
1.先把數(shù)據(jù)用python加載了
這個很簡單,只需要用numpy庫的genfromtxt函數(shù)
import numpy as np
//dtype是轉(zhuǎn)換的數(shù)據(jù)類型料睛,這里是一個元組丐箩,分別是字符串與float
2.對數(shù)據(jù)集做些預(yù)處理
我們隨機選取100個數(shù)據(jù),作為訓(xùn)練數(shù)據(jù)恤煞。
from random import sample
tran = sample(rawdata, 100)
我們再選取pm2.5的值作為目標(biāo)值剩下的作為特征值屎勘。
tranX=[]
tranY=[]
for item in tran:
tranX.append([item[4],item[6],item[7],item[8],item[9],item[10],item[11],item[12]])
tranY.append(item[5])
把字符串轉(zhuǎn)化成數(shù)字,用平均值來處理缺失值,并把它們從列表轉(zhuǎn)化成numpy的數(shù)組居扒。
trainX=np.array(tranX)
tranytmp=[]
for item in tranY:
if item!='NA':
tranytmp.append(int(item))
mean=sum(tranytmp)/len(tranytmp)
for i in range(len(tranY)):
if tranY[i] == 'NA':
tranY[i]=mean
else:
tranY[i]=int(tranY[i])
trainY=np.array(tranY)
把trainX的字符串的特征概漱,例如風(fēng)向的‘cv','nw'轉(zhuǎn)換成數(shù)字
from sklearn import preprocessing
tmpcol4=preprocessing.LabelEncoder().fit_transform(trainX[:,4])
trainX[:,4]=tmpcol4
3.使用Scikit-learn線性回歸
scikit-learn要求X是一個特征矩陣,y是一個NumPy向量.所以我們上面已經(jīng)把列表轉(zhuǎn)成numpy的向量喜喂。
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(trainX,trainY)
Out[15]:
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
一旦你用LinearRegression的fit構(gòu)建好了線性回歸模型,接下來就可以拿它來預(yù)測了,其中的X_test是待測試向量瓤摧。
linreg.predict(X_test)
我們可以使用linreg來輕易的打出相應(yīng)的回歸系數(shù)
print linreg.intercept_
2889.16443903
print linreg.coef_
[ 7.28287635e-02 4.14856097e+00 -6.23696623e+00 -2.67270208e+00
6.20566609e+00 -2.70742577e-01 1.52082272e+02 -1.10300471e+01]