// 未分类
【调包侠的机器学习】kaggle房价预测
发布 2022-08-24 · 永久链接
尝试参与了Kaggle的房价预测项目[【house-prices-advanced-regression-techniques】](https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques/overview),初步直接使用所有特征参与训练。(~才不是因为不会特征工程~)
效果一般般:

```python
import tensorflow as tf
import pandas as pd
import numpy as np
from matplotlib.pyplot import plot
import seaborn as sns
```
```python
def mean_norm(df_input): #@save
return df_input.apply(lambda x: (x-x.mean())/ x.std(), axis=0)
def de_mean_norm(result, df_input:pd.DataFrame): #@save
return result * df_input.std() + df_input.mean()
```
```python
train_data = pd.read_csv("../data/house-prices-advanced-regression-techniques/train.csv")
test_data = pd.read_csv("../data/house-prices-advanced-regression-techniques/test.csv")
```
```python
id_data = train_data['Id']
test_id_data = test_data["Id"]
y_data = train_data["SalePrice"]
train_data.drop("Id",axis=1, inplace=True)
test_data.drop("Id",axis=1, inplace=True)
train_data.drop("SalePrice",axis=1, inplace=True)
all_data = pd.concat([train_data, test_data])
all_data.fillna(value=0, inplace=True)
```
```python
all_data = pd.get_dummies(all_data, dummy_na=True)
all_data.fillna(value=0, inplace=True)
# all_data.describe
```
```python
train_data_dummy_x = all_data[:len(train_data)]
test_data_dummy_x = all_data[len(train_data):]
train_data_dummy_x_mean = mean_norm(train_data_dummy_x)
train_data_dummy_x_mean.fillna(value=0, inplace=True)
y_data_mean = mean_norm(pd.DataFrame(y_data))
train_data_dummy_x_mean.describe, y_data_mean.describe
```
(,
)
```python
train_data_dummy_x_mean.shape, y_data_mean[:100]
```
((1460, 354),
SalePrice
0 0.347154
1 0.007286
2 0.535970
3 -0.515105
4 0.869545
.. ...
95 0.051343
96 0.416387
97 -1.084699
98 -1.232605
99 -0.654199
[100 rows x 1 columns])
适当dropout防止过拟合
```python
net = tf.keras.Sequential([
tf.keras.layers.Dense(units=708, input_dim=354, activation=tf.keras.activations.tanh),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(units=177, activation=tf.keras.activations.tanh),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation=tf.keras.activations.sigmoid),
tf.keras.layers.Dense(1)
])
opt = tf.keras.optimizers.SGD(learning_rate=0.001)
net.compile(optimizer=opt, loss=tf.keras.losses.MeanSquaredError(), metrics=['accuracy'])
```
```python
train_data_dummy_X = tf.constant(train_data_dummy_x_mean)
train_data_y = tf.constant(y_data_mean)
train_data_dummy_X.shape, train_data_y.shape
```
(TensorShape([1460, 354]), TensorShape([1460, 1]))
```python
history = net.fit(train_data_dummy_X, train_data_y, batch_size=50, epochs=200, validation_split=0.2, callbacks=[], shuffle= True)
net.summary()
```
Epoch 1/200
24/24 [==============================] - 0s 10ms/step - loss: 2.6157 - accuracy: 0.0000e+00 - val_loss: 2.2767 - val_accuracy: 0.0000e+00
Epoch 2/200
24/24 [==============================] - 0s 7ms/step - loss: 1.9880 - accuracy: 0.0000e+00 - val_loss: 1.7652 - val_accuracy: 0.0000e+00
Epoch 3/200
Epoch 200/200
24/24 [==============================] - 0s 5ms/step - loss: 0.1689 - accuracy: 0.0000e+00 - val_loss: 0.2754 - val_accuracy: 0.0000e+00
Model: "sequential_6"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_24 (Dense) (None, 708) 251340
dropout_8 (Dropout) (None, 708) 0
dense_25 (Dense) (None, 177) 125493
dropout_9 (Dropout) (None, 177) 0
dense_26 (Dense) (None, 10) 1780
dense_27 (Dense) (None, 1) 11
=================================================================
Total params: 378,624
Trainable params: 378,624
Non-trainable params: 0
_________________________________________________________________
```python
import matplotlib.pyplot as plt
print(history.history.keys())
plt.plot(history.history["loss"], label="Training Loss")
plt.plot(history.history["accuracy"], label="accuracy")
plt.plot(history.history["val_loss"], label="val_loss")
plt.plot(history.history["val_accuracy"], label="val_accuracy")
# plt.plot(history.history["sparse_categorical_accuracy"], label="sparse_categorical_accuracy")
# plt.plot(history.history["val_sparse_categorical_accuracy"], label="val_sparse_categorical_accuracy")
plt.legend()
plt.show()
```
dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])

```python
test_data_dummy_x_mean = mean_norm(test_data_dummy_x)
train_data_dummy_x_mean.fillna(value=0, inplace=True)
# train_data_dummy_x_mean.describe
```
```python
test_data_dummy_x_mean.fillna(0, inplace=True)
py = net.predict(test_data_dummy_x_mean)
pp = de_mean_norm(py, y_data)
pp[:100]
```
array([[120861.6 ],
[179080.06 ],
[197782.52 ],
[ 82506.18 ],
[129601.914]], dtype=float32)
```python
with open("../data/house-prices-advanced-regression-techniques/test_submission.csv", "w") as f:
f.write("Id,SalePrice\n")
i = 0
for p in pp:
f.write("%d,%f\n"%(i+1461, p[0]))
i = i + 1
f.close()
```
```python
```