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

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

序文

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天気予報には依然として人間の介入が必要

ブログ    

推薦する

...

まだ分​​からない?約20以上の自動運転データセット、ランキング、ベンチマークのコレクション

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

...

「人工知能+教育」はどのような機会と課題をもたらすのでしょうか?

人工知能がどのような新しい形で登場するかが話題になっている一方で、教育分野では新たな一連の変化が起こ...

企業は AI、IoT、AR、VR、ブロックチェーン、ビッグデータをどのように活用して顧客を維持できるでしょうか?

企業は、顧客維持率と顧客体験を向上させ、競合他社に負けないようにするために、人工知能 (AI)、モノ...

生成型AIの7つの秘密

誇大宣伝されているかどうかは別として、人工知能アルゴリズムの可能性は依然として有望です。しかし、今日...

AIは40の言語を理解でき、15の言語で22の部門で1位を獲得しました。その背景には、中国チームの22年間の粘り強さがあります。

一気に15言語で22の1位を獲得!いや、もっとすごいのは、彼は40以上の言語を読んで理解できるという...

ニューラルネットワークの詳細な説明、順方向伝播と逆方向伝播

主にロジスティック回帰について説明します。ロジスティック回帰には多くの基本概念が含まれており、ニュー...

AIとIoTはどのように連携するのでしょうか?

人工知能 (AI) とモノのインターネット (IoT) の統合により、技術革新と機能の新しい時代が到...

AIoTは自律時代を推進します。人工知能はIoTインフラに新たな競争上の優位性をもたらします。

人工知能とモノのインターネット (AIoT) は、テクノロジー分野における新しいプレーヤーの 1 つ...

MITの自律ロボットはUVC光を使用して表面のコロナウイルス粒子を殺します

MITの研究者らは新型コロナウイルスとの戦いに役立つ新しいロボットを開発した。この自律型機械は、微生...

失敗が頻発する中、AI 翻訳者はどのように進歩の道を続けるべきでしょうか?

[[248512]]当時、英語に支配されていた恐怖を覚えている人がどれだけいるでしょうか?前日に覚...

複雑なネットワーク分析の効率を向上!中国の科学者が強化学習の新しい枠組みを開発

最近、中国の国立国防科学技術大学、カリフォルニア大学ロサンゼルス校、ハーバード大学医学部の研究者らが...

AI技術を活用してより強力な処理チップを開発

現在、ますます多くのスタートアップ企業と大手半導体企業が新しい AI チップの発売を競っています。 ...

...