Pythonのscikit-learnライブラリを用いて回帰予測を実現し,実戦による住宅価格の評価予測を実現した.


前言
自分で手を出して、58同城の賃貸サイトの情報を取り、このデータで未知の住宅源の価格を予測します.爬虫類の部分は私が書いたものではありません.私はその中の予測機能の一部を完成しただけです.予測は主に回帰予測を用い,予測結果は比較的粗末であるが,この小さな項目でPythonに基づく回帰予測を簡単に学習することもできる.本稿では,3つの回帰予測アルゴリズムを実現した:1.ベクトル回帰(SVR)2をサポートする.logistic回帰3.核技術を用いた嶺回帰(L 2回帰)
インプリメンテーションプロセス
データの準備
私たちはgithubにプロジェクトをアップロードしました.この部分の実現はここです.
https://github.com/TomorrowIsBetter/crawler/tree/master/price_prediction

このフォルダの下にあるindex.csvファイルは、這い出したファイルデータの一部です.ファイルのフォーマットを直接見ることができます.
_id,date,areas,square,methods,price,direction,type,houseAreas
http://cc.58.com/zufang/34009015301200x.shtml,1.53E+12,0,190,1,20000,0,4 2 2 ,   (  )
http://cc.58.com/zufang/33977466998861x.shtml,1.53E+12,0,190,1,20000,0,4 2 2 ,   (  )
http://cc.58.com/zufang/32214749419981x.shtml,1.53E+12,5,400,1,15000,0,4 3 3 ,    
http://cc.58.com/zufang/34129082983861x.shtml,1.53E+12,0,500,1,15000,0,5 3 2 ,      
http://cc.58.com/zufang/33587200250158x.shtml,1.53E+12,5,500,1,15000,0,5 3 4 ,    (  )
http://cc.58.com/zufang/34105507085903x.shtml,1.53E+12,1,320,1,15000,1,1 1 1 ,    
http://cc.58.com/zufang/31241630941227x.shtml,1.53E+12,0,143,1,12000,0,3 2 2 ,    

58同城は一線都市にあるため、例えば筆者がいる北京では、一般的にこの上で家を借りたり、家の源を発表したりする人はいません.データの多くは仲介に由来しています.しかし、58の二三線都市の可用性はまだ可能なので、この中のデータは国内のある二三線都市のデータをつかんでいます.
ここで、CSVファイルのtitleに気づくことができます.名前が怪しいので、咳をして、このようにしましょう.ツッコミを入れないでください.
モデルトレーニング
アルゴリズムは統計学習法であり,Python言語ベースのscikit-learnライブラリを用いて実現する.コードを見てから説明します.
df = pandas.read_csv("index.csv")
df = shuffle(df)
df = shuffle(df)
square = df['square'].values
square = normalization(square)
areas = df['areas'].values / 5
direction = df['direction'].values / 4
price = df['price'].values
#price = normalization(price)


print(areas.shape,square.shape,direction.shape)
data = np.array([areas,square,direction])
data = data.T
train_fraction = .8
train_number = int(df.shape[0] * train_fraction)
X_train = data[:train_number]
X_test = data[train_number:]
y_train = price[:train_number]
y_test = price[train_number:]

print(np.max(price))

# model
clf = GridSearchCV(SVR(kernel='rbf', gamma=0.1),{"C": [1e0, 1e1, 1e2, 1e3], "gamma": np.logspace(-2, 2, 5)},cv=5)
#clf = GridSearchCV(LogisticRegression(),{"C":[1e0,1e1,1e2,1e3],"random_state":list(range(10))},cv=5)
#clf = GridSearchCV(KernelRidge(kernel='rbf', gamma=0.1), {"alpha": [1e0, 1e1, 1e2, 1e3], "gamma": np.logspace(-2, 2, 5)},cv=5)
clf.fit(X_train,y_train)
result = clf.score(X_train,y_train)
test = clf.score(X_test,y_test)

c = clf.best_params_
y = clf.predict(X_test)
x = list(range(len(y)))
plt.subplot(2,1,1)
plt.scatter(x=x,y=y,color='r')
plt.scatter(x=x,y=y_test,color='g')

print(clf.best_params_,result,test)

deviation = y - y_test
deviation = deviation.flatten()
deviation = abs(deviation)
print(np.median(deviation))
plt.subplot(2,1,2)
plt.hist(deviation,10)
joblib.dump(clf,"model.m")
plt.show()

完全なコードはこの場所にあります.
https://github.com/TomorrowIsBetter/crawler/blob/master/price_prediction/train.py

まずここのコードの問題についてお話しします.
命名問題:正規化関数は動詞の語性と命名すべきである.
その时、名前をつけた时にこれを忘れて、コードが全部书いて、直すのがおっくうで、みんなが知っていればいいです.
モデルの説明
コードは主にこのようないくつかの部分に分けられます:1.データの前処理:データをロードして、データを乱して、データの正規化2.データセットの分割:データセットをトレーニングセットと検証セットに分割します.トレーニングモデル:最適なスーパーパラメータを自動的にテストし、トレーニングセットを使用してモデルをトレーニングする.データ可視化:予測結果と偏差分布を可視化
正規化
モデルの正規化は、次の式に従います.
X^i=Xi−X¯Xmax−Xmin X ^ i = X i − X ¯ X m a x − X m i n
ここで,カテゴリ部分は符号{0,1,...,N}を用いて表記された不通カテゴリであり,正規化の場合,直接Nで除算すればよい.
データセット乱れ
訓練データセットは,訓練データの傾きによる予測結果のばらつきを防止するために,乱れを行わなければならない.効果を観察したい場合は、この2つのコードをコメントしてください.
df = shuffle(df)
df = shuffle(df)

その後,非乱順データ訓練によるモデル予測結果を直感的に見ることができる(操作する時間がなければ,この結論を覚えるだけでよい).
データセット分割
これはクロス検証法を用い,データセットを訓練セットと検証セットの2つの部分に分割するが,実際には深さ学習のようなデータセットが多い場合には,訓練セット,テストセット,検証セットの3つの部分に分割するのが一般的であるが,ここではデータが少ないので,この2つの部分に分割しよう.トレーニングセットと検証セットの割合は8:2です.
テスト効果
図に示すように、プログラムの実行後の可視化画像です.
上の図から、予測結果はまだ可能であることがわかります.下図に予測結果と実際の値との偏差を示し、その偏差をヒストグラム形式で示した結果を示します.偏差は全体的に左バイアス分布を示し,主に[0500]区間範囲に集中し,このモデルが一定の予測効果を有することを示すことが分かった.
まとめ
このブログでは、具体的な実装についてのみ説明します.今後、実装の原理や、関連する機械学習アルゴリズムの説明をブログで紹介します.
githubにはトレーニングセットのデータとその他の実装部分があります.参考にしてください.
https://github.com/TomorrowIsBetter/crawler

このうち,この部分はprice_predictionディレクトリにあり,他の部分はNodeで実現した爬虫類とAntDesignで実現したWeb前段ページであり,筆者の美しいガールフレンドによって実現されている.