scikit-learnで北京のpm 2を予測した.5
2758 ワード
機械の勉強に一番いいのは何ですか.基礎は何ですか.分類だと思います.
もちろん具体的な分類アルゴリズムの実現は言いませんが、Scikit-learnを直接使います.scikit-learnについて、唯一知っておくべきことは、深い学習を除いて、伝統的な機械学習はすべて使いやすくて、つまり直接関数を調整することです(もしあなたがそんなにpythonができるならば).
しかし、今回使うのは分類ではなく、回帰です.私から見れば、それらの差は多くありません.連続した数を一つずつ見ると、分類されます.
uciから北京のpm 2を取得した.5データ
このcsvサイトから直接データを得ることができます.
開けてみると、多分こんな感じです.
第1列は番号で、第2列は年で、第3列は月で、第4列は日付で、第5時間で、第6列はpm 2です.5の値、単位はug/m^3で、7番目は露点(Dew point)で、露点温度とも呼ばれ、8番目は温度、9番目は気圧、10番目は風向き、降りては風速、降りては積雪量と積雪量です.
データが欠落している場合は、NAで表します.
1.まずpythonでデータをロード
これは簡単ですnumpyライブラリのgenfromtxt関数を使うだけです
2.データセットの前処理
トレーニングデータとして100個のデータをランダムに選択した.
pm 2を選択します.5の値を目標値として残りの値を特徴値とする.
文字列を数字に変換し、平均値で欠落値を処理し、リストからnumpyの配列に変換します.
trainXの文字列の特徴、例えば風向きの「cv」、「nw」を数字に変換する
3.Scikit-learn線形回帰の使用
scikit-learnはXが特徴行列であり、yがNumPyベクトルであることを要求する.リストをnumpyのベクトルに変換しました
LinearRegressionのfitで線形回帰モデルを構築すると、X_を予測することができます.testはテスト対象ベクトルです.
linregを使用して、対応する回帰係数を簡単に出すことができます.
4.エラー率を検証するために、自分でテストセットのデータを使用する必要があります.
もちろん具体的な分類アルゴリズムの実現は言いませんが、Scikit-learnを直接使います.scikit-learnについて、唯一知っておくべきことは、深い学習を除いて、伝統的な機械学習はすべて使いやすくて、つまり直接関数を調整することです(もしあなたがそんなにpythonができるならば).
しかし、今回使うのは分類ではなく、回帰です.私から見れば、それらの差は多くありません.連続した数を一つずつ見ると、分類されます.
uciから北京のpm 2を取得した.5データ
このcsvサイトから直接データを得ることができます.
開けてみると、多分こんな感じです.
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
第1列は番号で、第2列は年で、第3列は月で、第4列は日付で、第5時間で、第6列はpm 2です.5の値、単位はug/m^3で、7番目は露点(Dew point)で、露点温度とも呼ばれ、8番目は温度、9番目は気圧、10番目は風向き、降りては風速、降りては積雪量と積雪量です.
データが欠落している場合は、NAで表します.
1.まずpythonでデータをロード
これは簡単ですnumpyライブラリのgenfromtxt関数を使うだけです
import numpy as np
//dtype , , float
2.データセットの前処理
トレーニングデータとして100個のデータをランダムに選択した.
from random import sample
tran = sample(rawdata, 100)
pm 2を選択します.5の値を目標値として残りの値を特徴値とする.
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])
文字列を数字に変換し、平均値で欠落値を処理し、リストからnumpyの配列に変換します.
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の文字列の特徴、例えば風向きの「cv」、「nw」を数字に変換する
from sklearn import preprocessing
tmpcol4=preprocessing.LabelEncoder().fit_transform(trainX[:,4])
trainX[:,4]=tmpcol4
3.Scikit-learn線形回帰の使用
scikit-learnはXが特徴行列であり、yがNumPyベクトルであることを要求する.リストを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で線形回帰モデルを構築すると、X_を予測することができます.testはテスト対象ベクトルです.
linreg.predict(X_test)
linregを使用して、対応する回帰係数を簡単に出すことができます.
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]
4.エラー率を検証するために、自分でテストセットのデータを使用する必要があります.