住宅価格予測のための機械学習

住宅価格予測のための機械学習

序文

Python は機械学習において当然の利点を持っているので、今日から機械学習技術に取り組んでみましょう。以下は学習プロセスからのメモで、なぜこの操作が行われるのかを理解するための多くのコメントが付いています。

コードは次のように実装されます。

Numpy と Pandas と Matplotlib と Ipython

 #NumPy ( Numerical Python ) は、多次元配列や行列演算をサポートするPython言語の拡張ライブラリです。また、配列演算用の数学関数ライブラリも多数提供しています。
numpyをnp としてインポートする

#Pandasは、データのマージ、再形成、選択、データのクリーニング、データ処理機能など​​、データに対してさまざまな操作を実行できます。
pandaspd としてインポートする

#MatplotlibPython用のプロットライブラリです NumPy と連携し MatLab に代わる効率的なオープンソースを提供します。
matplotlib.pyplot plt としてインポートします

#Ipython . displayライブラリは画像の表示に使用されます
IPython.display からImage をインポートします
sklearn.model_selection からtrain_test_split インポートします

輸入警告
警告. filterwarnings ( 'ignore' )

データ= pd.read_csv ( "train.csv" )
印刷( タイプ( データ))
print ( データ. 情報())
印刷( データ. 形状)
print ( データ. ヘッド())
print ( データ[[ 'MSSubClass' , 'LotArea' ]])

データセットと欠損値

 #データセット内のいくつかの重要な特徴を選択する
data_select = data [[ '寝室面積' , '敷地面積' , '近隣地域' , '販売価格' ]]

# データセット内のフィールドの名前を変更する
data_select = data_select . rename ( columns = { 'BedroomAbvGr' : 'room' , 'LotArea' : 'area' })
印刷( データ選択)
印刷( data_select . shape )
印刷( "*" * 100 )

#isnull () は欠損値を決定するために一般的に使用されますが、生成されるのはすべてのデータからなる真偽行列です。
印刷( data_select . isnull ())

#df . isnull (). any () は、 どの「列」に欠損値があるかを判断します。
印刷( data_select . isnull () . any ())

#欠損値のある行と列のみを表示し、欠損値の位置を明確に識別します
print ( data_select .isnull () .values ​​== True )

#欠落データをフィルタリング
data_select = data_select.dropna ( axis = 0 )
印刷( data_select . shape )
印刷( data_select . head ())

#print ( np . take ( data_select . columns ,[ 0 , 1 , 3 ]))
#print ( type ( np . take ( data_select . columns ,[ 0 , 1 , 3 ])))

正規化

 #数値が大きすぎる場合は正規化してデータ分布を同じ範囲にします最も単純なデータ調整方法を選択し各数値を最大値で割ります。
col in np . take ( data_select . columns , [ 0 , 1 , - 1 ] ):
# 印刷( )
# print ( data_select [ ] )
data_select [ ] /= data_select [ ] .max ()

印刷( data_select . head ())

#テストデータとトレーニングデータを配布する
トレーニングテスト= train_test_split ( data_select . copy ()、 test_size = 0.9 )
印刷( 列車. 形状)
印刷( テスト. 形状)
印刷( テスト. 記述())


#numpyaxis = 0 axis = 1を使用する例:
印刷( "=" * 50 )
データ= np . 配列([[ 1 , 2 , 3 , 4 ],[ 5 , 6 , 7 , 8 ],[ 9 , 10 , 11 , 12 ]])
印刷( データ)
print ( data . shape ) #shape = [ 3 , 4 ] は3行4列を意味します
print ( np . sum ( data )) #numpyで軸が指定されていない場合は、デフォルトですべてのデータが追加されます

print ( np . sum ( data , axis = 0 )) #axis = 0 が指定された場合計算は最初の次元の方向に沿って実行されますつまり、 列内の3つのデータが計算され、4セットの列データの計算結果が得られます。

print ( np . sum ( data , axis = 1 )) #axis = 1 が指定された場合計算は2次元目の方向に沿って実行されますつまり、 行内の4つのデータが計算され、3セットの行データ計算結果が得られます。

印刷( "=" * 50 )

#pandasaxis = 0 axis = 1 を使用する例:
#df.mean ( axis = 1 ) を呼び出すと行ごとに計算された平均が得られます。
df = pd.DataFrame (np.arange ( 12 ) .reshape ( 3,4 ) )
印刷( df )

print ( df . mean ()) #pandasでは、axisが指定されていない場合、デフォルトの計算はaxis = 0に基づいて行われます。

print ( df . mean ( axis = 0 )) # axis = 0 が指定された場合最初の次元の変化方向に従って計算が実行されますつまり、 列内の3つのデータが計算され、4セットの列データ計算結果が得られます。

print ( df . mean ( axis = 1 )) # axis = 1 が指定された場合2番目の次元の変化方向に従って計算が実行されますつまり、 行内の4つのデータが計算され、3セットの行データ計算結果が得られます。

線形回帰モデル

 #h ( x ) = wx + b が線形であると仮定した線形回帰モデル
定義線形( 特徴部分):
print ( "pars は: " , pars )
印刷( pars [: - 1 ])
価格= np . sum ( 特徴* pars [: - 1 ], = 1 ) + pars [ - 1 ]
返品価格

印刷( "*" * 100 )
train [ 'predict' ] = linear ( train [[ 'room' , 'area' ]]. values ​​,np.array ( [ 0.1 , 0.1 , 0.0 ]))

# このパラメータではモデルの予測価格と実際の価格の間に大きなギャップがあることがわかりますしたがって、適切なパラメータ値を見つけることが、必要なことです。
print ( 列車. ヘッド())


#予測関数はh ( x ) = wx + b
#偏差の二乗和関数:
平均二乗誤差を定義します( 予測y実y ):
合計を返します( np . array ( pred_y - real_y ) ** 2 )

#損失関数:
def lost_function ( dffeaturespars ):
df [ '予測' ] = linear ( df [ 特徴]. ​​, pars )
コスト= 平均二乗誤差( df.predict df.SalePrice ) / len ( df )
返品費用

コスト= lost_function ( 列車,[ '部屋' , 'エリア' ], np . 配列([ 0.1 , 0.1 , 0.1 ]))
印刷費用

#linspace 関数のプロトタイプ: linspace ( startstopnum = 50endpoint = Trueretstep = Falsedtype = None )
#この関数は、指定された大きな間隔内で固定間隔のデータを返します。 [ start , stop ] の間隔で等間隔​​に並べられた「num」個のサンプルを返します。間隔の終了点は除外できますが、デフォルトでは含まれます。
数値= 100
Xs = np . linspace ( 0 , 1 , num )
Ys = np . linspace ( 0 , 1 , num )
print ( Xs ) #if num = 5 - > [ 0. 0.25 0.5 0.75 1. ]
print ( Ys ) #if num = 5 - > [ 0. 0.25 0.5 0.75 1. ]

#zeros 関数プロトタイプ: zeros ( shape , dtype = float , order = 'C' )
#機能: 通常は配列を目的の行列に変換します。
# 例: np . zeros ( ( 2 , 3 ), dtype = np . int )
Zs = np . zeros ([ num , num ]) #100 * 100 行列、すべての値は 0 です
印刷( Zs )

#meshgridは座標ベクトルから座標行列を返します
Xs , Ys = np.meshgrid ( Xs , Ys ) です
印刷( Xs . 形状Ys . 形状)
print ( Xs ) #num = 5 の場合、処理された行列は次のようになります。
'' '
[[ 0. 0.25 0.5 0.75 1. ]
[ 0. 0.25 0.5 0.75 1. ]
[ 0. 0.25 0.5 0.75 1. ]
[ 0. 0.25 0.5 0.75 1. ]
[ 0. 0.25 0.5 0.75 1. ]]
'' '
print ( Ys ) #num = 5の場合、処理された行列は次のようになります。
'' '
[[ 0. 0. 0. 0. 0. ]
[ 0.25 0.25 0.25 0.25 0.25 ]
[ 0.5 0.5 0.5 0.5 0.5 ]
[ 0.75 0.75 0.75 0.75 0.75 ]
[ 1. 1. 1. 1. 1. ]]
'' '
W1 = []
W2 = []
費用= []

iが範囲( 100 ) 内である場合:
j 範囲( 100 )の場合:
W1 . 追加( 0.01 * i )
W2 . 追加( 0.01 * j )
コスト.append ( lost_function ( train ,[ 'room' , 'area' ] ,np.array ( [ 0.01 * i , 0.01 * j , 0. ])))
#numpy . argmin ( aaxis = Noneout = None )
#a : 行列
#axis : 整数、オプション (選択されていない場合は配列全体が展開されます) (0 : 行、1: 列)
# 小さい値の添え字を返す
インデックス= np .array ( lost_function ) .argmin ()
print ( W1 [ インデックス], W2 [ インデックス], コスト[ インデックス])

mpl_toolkits からmplot3d をインポートしてAxes3D を作成します
= plt . ()
ax = fig.add_subplot ( 111 , projection = '3d' ) で、プロットの座標をプロットします。
ax.view_init ( 5 , -15 )
ax.scatter W1W2コストs = 10
ax.scatter ( 0.58,0.28 , zs = lost_function ( train ,[ 'room' , 'area' ] ,np.array ( [ 0.58,0.28,0.0 ] )), s = 100 , color = ' red ' )
plt . xlabel ( '部屋' )
plt . ylabel ( 'llotArea' )
plt . 表示()

<<:  Chen Danqi 氏のグループによるマスク言語モデルに関する研究: 15% のマスク率は最適ではないが、40% は維持可能か?

>>:  AI天気予報には依然として人間の介入が必要

ブログ    
ブログ    

推薦する

Facebookのスマートスピーカー「フィオナ」と「アロハ」が今月下旬に発売される

Facebookは、現在FionaとAlohaというコードネームがつけられている2つのスマートスピー...

13 のインテリジェントなインタラクティブ AI チャットボット プラットフォーム

[[399108]] [51CTO.com クイック翻訳]ご存知のとおり、チャットボットは企業のサー...

LSTM の父は Llama 2 に中傷されて激怒しました。メタは32年前にアイデアトレーニングモデルを盗用し、ルカンに責任を求めた。

LSTM の父はまた機嫌が悪いです!何が起こっているのか?今日、ユルゲン・シュミットフーバー氏はソ...

この記事では機械学習における3つの特徴選択手法を紹介します。

機械学習では特徴を選択する必要があり、人生でも同じではないでしょうか?特徴選択とは、利用可能な多数の...

AI 生成コンテンツには著作権がありますか?裁判所はこう判決した

[[312663]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...

OpenAIの創設者は、Nvidiaに対抗するチップを設計・製造するためのグローバルなチップ工場ネットワークを構築したいと考えている

OpenAIの共同創設者サム・アルトマン氏は最近、Nvidiaに対抗するために世界中にAIチップ工場...

ローコード プラットフォームに関する不完全な推奨事項!

ソフトウェア開発者向けのローコード機能それでは、ソフトウェア開発者に機械学習機能を提供するローコード...

今後10年間で、AIは次の10の分野で世界に革命を起こすだろう

21 世紀に実現可能かつ実現されるであろう AI の驚くべき応用例をすべて紹介します。 AI が世界...

...

Keras 3.0 が市場を席巻しています!この大きなアップデートではPyTorchとJAXが統合され、世界中の250万人の開発者が使用しています。

先ほど、Keras 3.0 が正式にリリースされました! 5 か月のパブリック ベータ テストを経て...

何百万人もの人々が「焼けた赤ちゃん」の写真を見ました!バークレー教授が噂を否定:AI画像検出器は役に立たない

AI画像検出器が再び攻撃を受けました!最近、中東紛争の写真が大量にインターネット上に公開され、極限状...

...

...