波士顿房价预测案例---多元线性回归【机器学习】

在这里插入图片描述

boston 房价预测

1、介绍

我们采用波士顿房价预测数据集进行回归任务分析。数据集分为训练集和测试集,训练集可用于训练回归模型,测试集需要进行预测。

2、要求

  1. linear regression,或使用现成的线性回归函数,方法尝试使用Gradient DescentSGD 以及 ADAM
  2. 比较不同learning rate的结果。例如损失函数曲线图;
  3. 比较有无加上regularization的结果;
  4. 比较有无否使用 feature scaling的结果。

3、实现方案

code as follows

1、机器学习(LinearRegression)
2、深度学习(待开始

3.1、数据未处理

"""
Author:cold
Date:2021-04-01
Version:1.0
Info:baseline
"""
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import pandas as pd
from sklearn.preprocessing import StandardScaler


# 加载数据(455)
dataset =read_csv('train_dataset.csv').values


# 划分训练集和测试集
X = dataset[:,0:13]
Y = dataset[:,13]

x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size=0.3)


# 创建线性回归模型
lr = LinearRegression()
# 拟合训练数据
lr.fit(x_train,y_train)
# 得到预测结果
y_test_pred = lr.predict(x_test)
y_train_pred = lr.predict(x_train)


# 计算相应的评测指标
error_test = mean_squared_error(y_test,y_test_pred)
error_train = mean_squared_error(y_train,y_train_pred)
print("训练集误差为:{},测试集误差为:{}".format(error_train,error_test))


#预测结果
testset =read_csv('test_dataset.csv').values
x_pred = testset[:,1:14]
y_pred = lr.predict(x_pred)
ID = []
for i in range(len(y_pred)):
    ID.append("id_"+str(i+1))
res = pd.DataFrame()
res['ID']=ID
res['value']=y_pred
res.to_csv('res.csv',index=False)
print("res.csv 已生成")

3.2、数据标准化处理

"""
Author:cold
Date:2021-04-04
Version:2.0
Info:baselineStd
"""
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import pandas as pd
from sklearn.preprocessing import StandardScaler


# 加载数据(455)
dataset =read_csv('train_dataset.csv').values


# 划分训练集和测试集(+数据标准化)
X = dataset[:,0:13]
Y = dataset[:,13]
stand = StandardScaler()
X_std=stand.fit_transform(X)
x_train,x_test,y_train,y_test = train_test_split(X_std,Y,test_size=0.3)


# 创建线性回归模型
lr = LinearRegression()
# 拟合训练数据
lr.fit(x_train,y_train)
# 得到预测结果
y_test_pred = lr.predict(x_test)
y_train_pred = lr.predict(x_train)


# 计算相应的评测指标
error_test = mean_squared_error(y_test,y_test_pred)
error_train = mean_squared_error(y_train,y_train_pred)
print("训练集误差为:{},测试集误差为:{}".format(error_train,error_test))


#预测结果
testset =read_csv('test_dataset.csv').values
x_pred = testset[:,1:14]
y_pred = lr.predict(x_pred)
ID = []
for i in range(len(y_pred)):
    ID.append("id_"+str(i+1))
res = pd.DataFrame()
res['ID']=ID
res['value']=y_pred
res.to_csv('res.csv',index=False)
print("res.csv 已生成")

3.3、数据标准化处理+特征提取

"""
Author:cold
Date:2021-04-04
Version:3.0
Info:baselineSelFeatures
"""
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest,f_regression
from matplotlib import pyplot as plt


#字典结果:{提取k个最佳特征,及索引}
def ToBeStdAndSel(X,Y,k):
    stand = StandardScaler()
    X_std = stand.fit_transform(X)
    best = SelectKBest(f_regression, k=k)
    X_best = best.fit_transform(X_std, Y)#A
    best_index = best.get_support()#B AB顺序不能换
    BEST = {}
    BEST['best_index'] = best_index
    BEST['X_best'] = X_best # 等价于 X_std[:,best_index]
    return BEST

#标准化
def ToBeStd(X):
    stand = StandardScaler()
    X_std = stand.fit_transform(X)
    return X_std

# 保存csv
def ToSaveCsv(y_pred):
    ID = []
    for i in range(len(y_pred)):
        ID.append("id_" + str(i + 1))
    res = pd.DataFrame()
    res['ID'] = ID
    res['value'] = y_pred
    res.to_csv('res.csv', index=False)
    print("res.csv 已生成")

#预测
def TryToPredict(testset):
    x_pred = testset[:, 1:14]
    x_pred_best = ToBeStd(x_pred)[:, best_index]
    y_pred = lr.predict(x_pred_best)
    return y_pred


# 加载数据(455)
dataset =read_csv('train_dataset.csv').values
# 划分训练集和测试集(+数据标准化,+特征提取)X--> X_std--> X_best
X = dataset[:,0:13]
Y = dataset[:,13]
BEST = ToBeStdAndSel(X,Y,6)
X_best = BEST['X_best']
best_index = BEST['best_index']

x_train,x_test,y_train,y_test = train_test_split(X_best,Y,test_size=0.3)

# 创建线性回归模型
lr = LinearRegression()
# 拟合训练数据
lr.fit(x_train,y_train)
# 得到预测结果
y_test_pred = lr.predict(x_test)
y_train_pred = lr.predict(x_train)


# 计算相应的评测指标
error_test = mean_squared_error(y_test,y_test_pred)
error_train = mean_squared_error(y_train,y_train_pred)
print("训练集误差为:{},测试集误差为:{}".format(error_train,error_test))
plt.plot(y_test_pred,'r-',label='predict_value')
plt.plot(y_test,'b-',label='true_value')
plt.legend()
plt.show()

#预测、保存
testset =read_csv('test_dataset.csv').values
y_pred = TryToPredict(testset)
ToSaveCsv(y_pred)

3.4、特征可视化

"""
Author:cold
Date:2021-04-04
Version:1.0
Info: Features show
"""
from pandas import read_csv
import matplotlib.pyplot as plt
import math
# 加载数据(455)
dataset =read_csv('train_dataset.csv').values
X = dataset[:,0:13]
Y = dataset[:,13]
#(特征工程)
features = []
for i in read_csv('train_dataset.csv').keys():
    features.append(i)
nums = len(features)-1
columns =3
rows =math.ceil(nums /columns)
plt.figure(figsize=(12,10))

for i in range(nums):
    plt.subplot(rows,columns,i+1)
    plt.plot(X[:,i],Y,'b+')
    plt.title(features[i])
plt.subplots_adjust(hspace=1.5)
plt.show()

4、优化方向

  • 数据特征标准化
  • 特征提取
  • 异常值判断(箱线图)+数据清洗(较之前mean_square_error更低的原因)
  • 更换回归模型
  • 模型融合
  • 尝试深度学习模型
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
好的,下面我将为您介绍一个经典的机器学习案例--波士顿房价预测使用的是线性回归型。 首先,我们需要导入相关的库和数据集。可以通过以下代码实现: ```python import numpy as np import pandas as pd from sklearn.datasets import load_boston boston = load_boston() df = pd.DataFrame(boston.data, columns = boston.feature_names) df['Price'] = boston.target ``` 接下来,我们需要对数据集进行预处理和划分,以便于训练和测试型。可以通过以下代码实现: ```python X = df.iloc[:, :-1].values y = df.iloc[:, -1].values from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0) from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test) ``` 接着,我们可以使用线性回归型进行训练和预测。可以通过以下代码实现: ```python from sklearn.linear_model import LinearRegression regressor = LinearRegression() regressor.fit(X_train, y_train) y_pred = regressor.predict(X_test) ``` 最后,我们可以使用评估指标来评价型的表现。可以通过以下代码实现: ```python from sklearn.metrics import r2_score r2_score(y_test, y_pred) ``` 这里使用了平均绝对误差(MAE)、均方误差(MSE)和决定系数(R2)三个评估指标。常见的评估指标还包括均方根误差(RMSE)和平均绝对百分比误差(MAPE)等。 以上就是一个简单的线性回归案例--波斯顿房价预测的实现过程,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来杯Sherry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值