![見出し画像](https://assets.st-note.com/production/uploads/images/155118606/rectangle_large_type_2_53ac00bb75af69a0ccccdf50105b8522.png?width=1200)
【IT】Pythonで数値最適化してみた
1. はじめに
一時期Pythonの勉強にハマってnoteにも少し成果を書かせて頂きました。
が、しばらく勉強を怠っておりました…
久しぶりに勉強を再開しましたので、今回も少し書かせて下さい…
得意な方に見せたら笑われそうですが…笑
Pyhonを勉強したい初心者の方は書籍から勉強するのもいいですよね。
評価が高そうなこちらはいかがでしょうか?
2. 多目的最適化をやってみた
そもそも多目的最適化とは複数の目的変数を最適化する手法とのことです。
簡単にいうと、y=x+zでyを10とした時にxとzの組み合わせを機械学習で出すみたいな感じです。
手頃なデータがないので、Pythonで簡単にデータ取得できるカリフォルニア住宅データセットを使用させて頂きます。
#カリフォルニア住宅データセットを取得する
from sklearn.datasets import fetch_california_housing
# データの取得
california_housing = fetch_california_housing(as_frame=True)
df_housing = california_housing.data
# ターゲット列(MedHouseVal)を追加
df_housing['MedHouseVal'] = california_housing.target
# データの先頭5行を表示
df_housing.head()
ダウンロードしたデータはこんな感じです(一部抜粋)。
各データの意味は以下に書かせて頂きました。
MedInc: 収入の中央値(例: 8.3252 = 83,252ドル)
HouseAge: 築年数の中央値(例: 41年)
AveRooms: 平均部屋数(例: 6.98部屋)
AveBedrms: 平均寝室数(例: 1.02寝室)
Population: 地域の人口(例: 322人)
AveOccup: 平均居住者数(例: 2.55人)
Latitude: 緯度(例: 37.88)
Longitude: 経度(例: -122.23)
MedHouseVal: 住宅価格の中央値(例: 4.526 = 452,600ドル)
![](https://assets.st-note.com/img/1726476357-UV5LOPu1QTN2wyqg7hbxa0AK.png?width=1200)
今回は、住宅価格の中央値と平均部屋数を固定した場合、その他パラメータの組み合わせ最適化をAIにやってもらうことにします。
イメージとしては、家を買う予算と欲しい部屋数が決まっている時、購入者の年収とか築年数はどれくらいなんだろう…というのを調べるといった感じです。
今回はLightGBMを使って住宅価格の予測モデルを作り、その後、遺伝的アルゴリズム(NSGA-II)で最適化しました。
固定したパラメータは以下の通りです。
AveRooms: 平均部屋数=6
MedHouseVal: 住宅価格の中央値=3
解析結果は以下の感じになりました。
とりあえず5パターンを提案して頂きました。
![](https://assets.st-note.com/img/1726477101-F2WhTXHqBywNaoVzY4MD3USC.png?width=1200)
築年数は7.9~15.6年くらいで、収入の中央値は5.2~6.4万ドルとの回答でした。
これが妥当な結果かはよく分かりません…が一応解析はできました。
ハイパーパラメータや重み付けを変えるとまた違った結果が出てくるようです。
この辺りはまだまだ勉強不足ですので、引き続き勉強していきたいと思います。
3. 最後に
さて、今回は最適化に挑戦してみました。
なんとか解析はできましたが、難しいです…
詳しい方はぜひ教えて下さい!!!