IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> HCIA-AI_机器学习_波士顿房价预测 -> 正文阅读

[人工智能]HCIA-AI_机器学习_波士顿房价预测

1 波士顿房价预测

1.2 实验代码

1.2.1 引入依赖包

# 忽略不必要的警告
import warnings
warnings.filterwarnings('ignore')

# 引入数据科学基础包
import numpy
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import scipy.stats as st

# 设置属性防止画图中文乱码
# mpl.rcParams.keys()
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 引入机器学习、预处理、模型选择、评估指标
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score

# 引入波士顿数据集
from sklearn.datasets import load_boston

# 引入各种线性机器学习算法
from sklearn.linear_model import LinearRegression,RidgeCV,LassoCV,ElasticNet

# 引入支持向量机的回归形式
from sklearn.svm import SVR

# 引入集成算法
from sklearn.ensemble import RandomForestRegressor,GradientBoostingRegressor
from xgboost import XGBRegressor

1.2.2 加载数据集,查看数据属性,可视化

# 加载波士顿房价数据集
boston = load_boston()

# x是特征,y是标签
x = boston.data
y = boston.target

# 查看相关属性
print('特征的列名')
print(boston.feature_names)
print('样本数据量:%d, 特征个数:%d' %x.shape)
print('标签样本数据量:%d' %y.shape[0])
特征的列名
['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
 'B' 'LSTAT']
样本数据量:506, 特征个数:13
标签样本数据量:506
# 转化为DataFrame形式
x = pd.DataFrame(boston.data, columns=boston.feature_names)
x.head()
CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTAT
00.0063218.02.310.00.5386.57565.24.09001.0296.015.3396.904.98
10.027310.07.070.00.4696.42178.94.96712.0242.017.8396.909.14
20.027290.07.070.00.4697.18561.14.96712.0242.017.8392.834.03
30.032370.02.180.00.4586.99845.86.06223.0222.018.7394.632.94
40.069050.02.180.00.4587.14754.26.06223.0222.018.7396.905.33
sns.distplot(tuple(y), kde=False, fit=st.norm)
<matplotlib.axes._subplots.AxesSubplot at 0x7f65b61d4828>

在这里插入图片描述

1.2.3 分割数据集,并对数据集进行预处理

# 数据分割
x_train,x_test,y_train,y_test = train_test_split(x, y, test_size=0.2, random_state=28)

# 标准化数据集
# 为什么要这个步骤?
ss = StandardScaler()
x_train = ss.fit_transform(x_train)
x_test = ss.transform(x_test)
x_train[0:100]
array([[-0.35703125, -0.49503678, -0.15692398, ..., -0.01188637,
         0.42050162, -0.29153411],
       [-0.39135992, -0.49503678, -0.02431196, ...,  0.35398749,
         0.37314392, -0.97290358],
       [ 0.5001037 , -0.49503678,  1.03804143, ...,  0.81132983,
         0.4391143 ,  1.18523567],
       ...,
       [-0.34697089, -0.49503678, -0.15692398, ..., -0.01188637,
         0.4391143 , -1.11086682],
       [-0.39762221,  2.80452783, -0.87827504, ...,  0.35398749,
         0.4391143 , -1.28120919],
       [-0.38331362,  0.41234349, -0.74566303, ...,  0.30825326,
         0.19472652, -0.40978832]])

1.2.4 利用各类回归模型,对数据集进行建模

# 模型的名称
names = [
    '线性回归',
    '岭回归',
    'Lasso回归',
    '随机森林',
    '梯度提升树GBDT',
    '支持向量机',
    '弹性网络',
    'XGBoost'
]
# 定义模型
# CV 交叉验证
models = [
    LinearRegression(),
    RidgeCV(alphas=(0.001, 0.1, 1), cv=3),
    LassoCV(alphas=(0.001, 0.1, 1), cv=5),
    RandomForestRegressor(n_estimators=10),
    GradientBoostingRegressor(n_estimators=30),
    SVR(C=5, kernel='rbf', gamma=0.1),
    ElasticNet(alpha=0.001, max_iter=10000),
    XGBRegressor()
]

# 输出所有回归模型的R2评分
# 定义R2评分的函数
def R2(model, x_train, x_test, y_train, y_test):
    model_fitted = model.fit(x_train, y_train)
    y_pred = model_fitted.predict(x_test)
    return r2_score(y_test, y_pred)

# 遍历所有模型进行评分
for name,model in zip(names, models):
    score = R2(model, x_train, x_test, y_train, y_test)
    print('{}: {:.6f}, {:.4f}'.format(name, score.mean(), score.std()))

线性回归: 0.564115, 0.0000
岭回归: 0.563673, 0.0000
Lasso回归: 0.564049, 0.0000
随机森林: 0.716249, 0.0000
梯度提升树GBDT: 0.733582, 0.0000
支持向量机: 0.618320, 0.0000
弹性网络: 0.563992, 0.0000
XGBoost: 0.761123, 0.0000

1.2.5 利用网格搜索对超参数进行调节

# 模型构建

'''
  超参数
  'kernel': 核函数
  'C': SVR的正则化因子
  'gamma': 'rbf','ploy', 'sigmoid'核函数的系数,影响模型性能
'''
params = {
    'kernel': ['rbf', 'linear'],
    'C': [0.1, 0.5, 0.9, 1, 5],
    'gamma': [0.001, 0.01, 0.1, 1]
}
# 使用网格搜索,以及交叉验证
model = GridSearchCV(SVR(), param_grid=params, cv=3)
model.fit(x_train, y_train)
# 获取最优参数
print('最优参数列表:', model.best_params_)
print('最优模型:', model.best_estimator_)
print('最优R2值:', model.best_score_)

# 可视化
ln_x_test = range(len(x_test))
y_pred = model.predict(x_test)

plt.figure(figsize=(16,8))
plt.plot(ln_x_test, y_test, 'r-', label=u'真实值')
plt.plot(ln_x_test, y_pred, 'b-', label=u'SVR估计值,$R^2$=%.3f' %model.best_score_)
plt.legend(loc='upper right')
plt.grid(True)
plt.title(u'波士顿房价预测-支持向量机')
plt.show()
最优参数列表: {'C': 5, 'gamma': 0.1, 'kernel': 'rbf'}
最优模型: SVR(C=5, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma=0.1,
  kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False)
最优R2值: 0.7963412572047208

在这里插入图片描述

1.3 笔记

在这里插入图片描述

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:11:32  更:2022-04-04 12:15:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:36:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码