机器学习实战项目总结

2023-11-19

1、预测模型新项目模板

  • 机器学习是针对数据进行自动挖掘,找出数据的内在规律,并应用这个规律来预测新数据。
  • 一个很好的实践机器学习项目的方法:使用从UCI机器学习仓库链接,获取的数据集开启一个机器学习项目。
  • 分类或回归模型的机器学习项目可以分成以下六个步骤:
    • 1、定义问题
    • 2、理解数据
    • 3、数据准备
    • 4、评估算法
    • 5、优化模型
    • 6、结果部署
    • 注意:有时这些步骤可能被合并或进一步分解。
  • 项目模板:
# python机器学习项目的模板

# 1.定义问题
# a.导入类库
# b.导入数据集

# 2.理解数据
# a.描述性统计
# b.数据可视化

# 3.数据准备
# a.数据清洗
# b.特征选择
# c.数据转换

# 4.评估算法
# a.分离数据集
# b.定义模型评估标准
# c.算法审查
# d.算法比较

# 5.优化模型
# a.算法调参
# b.集成算法

# 6.结果部署
# a.预测评估数据集
# b.利用整个数据集生成模型
# c.序列化模型

2、回归项目实例

  • 定义问题:
    • 该项目将分析研究波士顿房价数据集(Boston House Price),该数据集中的每一行数据都是对波士顿周边或城镇房价的描述,数据是1978年统计收集的,数据中包含以下14个特征和506条数据。
      • CRIM:城镇人均犯罪率
      • ZN:住宅用地所占比例
      • INDUS:城镇中非住宅用地所占比例
      • CHAS:CHAS虚拟变量,用于回归分析
      • NOX:环保指数
      • RM:每栋住宅的房间数
      • AGE:1940年以前建成的自住单位的比例
      • DIS:距离5个波士顿的就业中心的加权距离
      • RAD:距离高速公路的便利指数
      • TAX:每一万美元的不动产税率
      • PRTATIO:城镇中的教师学生比例
      • B:城镇中的黑人比例
      • LSTAT:地区中有多少房东属于低收入人群
      • MEDV:自住房屋房价中位数
      • 添加链接描述
  • 概念2
  • 代码
# 1.定义问题

import numpy as np
from numpy import arange
from matplotlib import pyplot
from pandas import read_csv
from pandas import set_option
from pandas.plotting import scatter_matrix
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import ElasticNet
from sklearn.tree import DecisionTreeRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.svm import SVR
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.ensemble import AdaBoostRegressor
from sklearn.metrics import mean_squared_error

# 2.导入数据
filename = '../housing.csv'
names = ['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PRTATIO','B','LSTAT','MEDV']
data = read_csv(filename,names=names,delim_whitespace=True)

# 3.理解数据
# print(data.shape)
# print(data.dtypes)

# set_option('display.line_width',120)    # 这里指定输出宽度为120个字符,保证所有特征属性值显示在一行内

# print(data.head(30))

# set_option('precision',1)
# print(data.describe())

# set_option('precision',2)
# print(data.corr(method='pearson'))

# 数据可视化
# 直方图
# data.hist(sharex=False,sharey=False,xlabelsize=1,ylabelsize=1)
# pyplot.show()

# 密度图
# data.plot(kind='density',subplots=True,layout=(4,4),sharex=False,fontsize=1)
# pyplot.show()

# 箱线图
# data.plot(kind='box',subplots=True,layout=(4,4),sharex=False,sharey=False,fontsize=4)
# pyplot.show()

# 多重数据图表
# 散点矩阵图
# scatter_matrix(data)
# pyplot.show()

# 相关矩阵图
# fig = pyplot.figure()
# ax = fig.add_subplot(111)
# cax = ax.matshow(data.corr(),vmin=-1,vmax=1,interpolation='none')
# fig.colorbar(cax)
# ticks = np.arange(0,14,1)
# ax.set_xticks(ticks)
# ax.set_yticks(ticks)
# ax.set_xticklabels(names)
# ax.set_yticklabels(names)
# pyplot.show()

'''
- 从以下几个方面处理数据,从而提高模型准确度
    - 通过特征选择来减少大部分相关性高的特征
    - 通过标准化数据来降低不同数据度量单位带来的影响
    - 通过正态化数据来降低不同的数据分布结构,以提高算法的准确度
'''

# 分离数据集[20%数据作为评估数据集,80%数据作为训练数据集]
array = data.values
X = array[:,0:13]
Y = array[:,13]
validation_size = 0.2
seed = 7
X_train, X_validation, Y_train, Y_validation = train_test_split(X,Y,test_size=validation_size,random_state=seed)

# 评估算法--评估标准(采用10折交叉验证分离数据,通过均方误差来比较算法准确度,均方误差趋近0,算法准确度越高)
num_folds = 10
seed = 7
scoring = 'neg_mean_squared_error'

# 选择三个线性算法和三个非线性算法
models = {}
models['LR'] = LinearRegression()
models['LASSO'] = Lasso()
models['EN'] = ElasticNet()
models['KNN'] = KNeighborsRegressor()
models['CART'] = DecisionTreeRegressor()
models['SVM'] = SVR()

# 评估算法
results = []
for key in models:
    kfold = KFold(n_splits=num_folds,random_state=seed)
    cv_result = cross_val_score(models[key],X_train,Y_train,cv=kfold,scoring=scoring)
    results.append(cv_result)
    print('%s:%f(%f)' % (key,cv_result.mean(),cv_result.std()))

# 评估算法-箱线图
# fig = pyplot.figure()
# fig.suptitle('Algorithm Comparison')
# ax = fig.add_subplot(111)
# pyplot.boxplot(results)
# ax.set_xticklabels(models.keys())
# pyplot.show()

# 评估算法-正态化数据
pipelines = {}
pipelines['ScalerLR'] = Pipeline([('Scaler',StandardScaler()),('LR',LinearRegression())])
pipelines['ScalerLASSO'] = Pipeline([('Scaler',StandardScaler()),('LASSO',Lasso())])
pipelines['ScalerEN'] = Pipeline([('Scaler',StandardScaler()),('EN',ElasticNet())])
pipelines['ScalerKNN'] = Pipeline([('Scaler',StandardScaler()),('KNN',KNeighborsRegressor())])
pipelines['ScalerCART'] = Pipeline([('Scaler',StandardScaler()),('CART',DecisionTreeRegressor())])
pipelines['ScalerSVM'] = Pipeline([('Scaler',StandardScaler()),('SVM',SVR())])
results = []
for key in pipelines:
    kfold = KFold(n_splits=num_folds,random_state=seed)
    cv_result = cross_val_score(pipelines[key],X_train,Y_train,cv=kfold,scoring=scoring)
    results.append(cv_result)
    print('%s: %f (%f)' % (key,cv_result.mean(),cv_result.std()))
# 评估算法——箱线图
# fig = pyplot.figure()
# fig.suptitle('Algorithm Comparison')
# ax = fig.add_subplot(111)
# pyplot.boxplot(results)
# ax.set_xticklabels(models.keys())
# pyplot.show()

# 调参改善算法——KNN
scaler = StandardScaler().fit(X_train)
rescaledX = scaler.transform(X_train)
param_grid = {'n_neighbors':[1,3,5,7,9,11,13,15,17,19,21]}
model = KNeighborsRegressor()
kfold = KFold(n_splits=num_folds,random_state=seed)
grid = GridSearchCV(estimator=model,param_grid=param_grid,scoring=scoring,cv=kfold)
grid_result = grid.fit(X=rescaledX,y=Y_train)

print('最优:%s使用%s' % (grid_result.best_score_,grid_result.best_params_))
cv_results = zip(grid_result.cv_results_['mean_test_score'],grid_result.cv_results_['std_test_score'],grid_result.cv_results_['params'])
for mean,std,param in cv_results:
    print('%f (%f) with %r' % (mean,std,param))

# 集成算法
ensembles = {}
ensembles['ScaledAB'] = Pipeline([('Scaler',StandardScaler()),('AB',AdaBoostRegressor())])
ensembles['ScaledAB-KNN'] = Pipeline([('Scaler',StandardScaler()),('ABKNN',AdaBoostRegressor(base_estimator=KNeighborsRegressor(n_neighbors=3)))])
ensembles['ScaledAB-LR'] = Pipeline([('Scaler',StandardScaler()),('ABLR',AdaBoostRegressor(LinearRegression()))])
ensembles['ScaledRFR'] = Pipeline([('Scaler',StandardScaler()),('RFR',RandomForestRegressor())])
ensembles['ScaledRTR'] = Pipeline([('Scaler',StandardScaler()),('ETR',ExtraTreesRegressor())])
ensembles['ScaledGBR'] = Pipeline([('Scaler',StandardScaler()),('RBR',GradientBoostingRegressor())])
results = []
for key in ensembles:
    kfold = KFold(n_splits=num_folds,random_state=seed)
    cv_result = cross_val_score(ensembles[key],X_train,Y_train,cv=kfold,scoring=scoring)
    results.append(cv_result)
    print('%s:%f(%f)' % (key,cv_result.mean(),cv_result.std()))

# 集成算法——箱线图
# fig = pyplot.figure()
# fig.suptitle('Algorithm Comparison')
# ax = fig.add_subplot(111)
# pyplot.boxplot(results)
# ax.set_xticklabels(ensembles.keys())
# pyplot.show()

# 集成算法GBM——调参
caler = StandardScaler().fit(X_train)
rescaledX = scaler.transform(X_train)
param_grid = {'n_estimators':[10,50,100,200,300,400,500,600,700,800,900]}
model = GradientBoostingRegressor()
kfold = KFold(n_splits=num_folds,random_state=seed)
grid = GridSearchCV(estimator=model,param_grid=param_grid,scoring=scoring,cv=kfold)
grid_result = grid.fit(X=rescaledX,y=Y_train)
print('最优:%s使用%s' % (grid_result.best_score_,grid_result.best_params_))

# 训练模型
caler = StandardScaler().fit(X_train)
rescaledX = scaler.transform(X_train)
gbr = ExtraTreesRegressor(n_estimators=80)
gbr.fit(X=rescaledX,y=Y_train)

# 评估算法模型
rescaledX_validation = scaler.transform(X_validation)
predictions = gbr.predict(rescaledX_validation)
print(mean_squared_error(Y_validation,predictions))


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习实战项目总结 的相关文章

  • CTF刷题

    刷题网站 bugku BUUCTF 本文记录了在刷题过程中所学到的知识点 坚持每天刷5道题 持续更新 坚持就是胜利鸭 CTF 1 bugku Simple SSLI 1 根据题目SSLI即服务端模板注入攻击 服务段接收用户输入 将其作为we

随机推荐

  • react数组遍历与onClick()点击事件

    import Component from react const user name Tom age 18 sex 男 name alice age 18 sex 女 name Time age 18 sex 女 class home e
  • MySQL_JDBC_jar包的下载与使用(for Windows)

    目录 1 下载 2 使用 1 下载 打开网站 MySQL Download Connector Jhttps dev mysql com downloads connector j 选择系统如下图 选择第二个下载 后缀为zip的 解压下载的
  • 分布式系统的特征

    分布式系统概念与设计 读书笔记 第一章 第一章 分布式系统的特征 1 0 简介 分布式系统是其组件分布在联网的计算机上 组件之间通过传递消息进行通信和动作协调的系统 该定义引出了分布式系统的下列重要特征 组建的并发性 缺乏全局时钟 组件故障
  • JS有小数保留两位,整数不显示小数

    在很多时候要展示数据 会有各种小数处理 碰到页面的数据要根据不同的情况展示不同格式的数据 比如得到的数据是一个小数 现在要将小数保留两位 而整数则不显示小数点 显示整数格式 使用toFixed n 方法 toFixed 2 里面的2表示保留
  • Python django jwt 报错 unexpected keyword argument ‘verify‘解决方法

    本文主要介绍Python中 使用django jwt时报错 TypeError decode got an unexpected keyword argument verify 的解决 原文地址 Python django jwt 报错 u
  • 【MongoDB】docker部署mongdb多机集群(跨主机副本集)

    目录 概述 MongoDB Replication 官方英文文档 冗余 数据可用性 MongoDB副本集 多主机多节点docker部署流程 概述 环境准备 部署步骤 参考文献 概述 MongoDB Replication 官方英文文档 单主
  • python转化为json格式

    转化为JSON格式 JSON是一种常用的数据交换格式 该格式在前端与后端数据传输和处理中非常常见 在Python中将数据转化为JSON格式是一个非常常见的需求 Python中自带的json模块可以非常方便地实现这个需求 转化为json格式
  • 【Linux】浅谈Linux内核定时器timer_list

    目录 1 平台说明 2 定时器timer list说明 2 1 所在头文件 2 2 结构体 2 3 重要函数说明 2 4 函数API 2 5 使用方法 3 实例 3 1 驱动程序代码 3 2 测试程序代码 3 3 结果 1 平台说明 Lin
  • 【源码篇】基于SpringBoot+thymeleaf图书馆管理系统

    1 系统介绍 系统总体功能介绍 1 分为系统管理员和用户两类用户 2 开放用户注册功能 3 系统管理员拥有用户管理 图书管理 以及用户的借书申请的确定和还书操作 4 用户只能查询图书 并进行借书操作 提出借书申请 每个用户最多借阅8本 即当
  • 2018年AI成败将见分晓;全球经济重心东移,上海料将在2035年超越巴黎

    2017临近结束 我们先来看看对于来年 都有些什么预测 埃森哲预测CES 2018 AI 5G 区块链以及无人车 明年1月9 12日 CES又将在拉斯维加斯举行 每年 咨询巨头埃森哲 Accenture 都会对CES上的技术趋势做出预测 这
  • 100天精通Python(可视化篇)——第91天:Pyecharts绘制各种折线图实战

    文章目录 专栏导读 1 基本流程 2 多条折线图 3 添加最小值最大值平均值 4 竖线提示信息 5 阶梯图 6 平滑曲线折线图 7 面积折线图 8 堆积图 9 双横坐标折线图 专栏导读 本文已收录于 100天精通Python从入门到就业 本
  • Windows Server 2008 R2 下配置AD证书服务器和HTTPS访问的图文教程 DNS+IIS+AD证书服务

    提前配置好虚拟机和客户机的访问 保证能ping通虚拟机 虚拟机和客户机网络的DNS填写为虚拟机的ip地址 接下来配置好DNS服务 配置域名解析服务 这个用于域名解析 不需要域名访问的可以不配置DNS 使用IP访问即可 安装DNS 进入DNS
  • (ros/qt报错) FATAL: ROS_MASTER_URI is not defined in the environment

    安装qt之后 明明打开roscore但是qt运行跟ros有关的节点时报错 FATAL 1450943695 306401842 ROS MASTER URI is not defined in the environment Either
  • 哪些 Java 知识不需要再学了

    张无忌在学太极拳的时候 他爹的师父张三丰告诫他一定要把之前所学习的武功全部忘掉 忘得越多就会学得越快 同样的 自学 Java 的时候一定要先知道哪些 Java 知识不需要再学了 毕竟技术的更新迭代就好像火箭一样快 Java 的一些知识点早已
  • OJ:algorithm头文件中sort函数的应用

    include
  • 【单片机笔记】STM32+ESP8266通过AT指令WIFI连接阿里云MQTT服务器

    上一篇使用USB转串口的方式通过ESP8266wifi模块的方式成功连接上了阿里云 现在就要通过单片机来替换电脑上位机了 这样单片机自动的去调用并发送串口数据更加方便 也更加符合一个产品的开发 板载的传感器有NTC温度 光强 这两个主要用来
  • 100流明相当于多少w_中艺光影秀揭秘一场大型灯光秀究竟要耗费多少电量呢?...

    炫酷的灯光秀 让城市景区的夜色被赋予了无限可能性 现代的灯光秀始于法国里昂 然而 现代技术的飞速发展 现在的灯光秀的技术也是越玩越炫丽 越来越复杂 在大家纷纷对灯光秀表示震撼的同时 也有一些人质疑 举办这么大规模的灯光秀 太 费 电 了 某
  • [Linux打怪升级之路]-文件操作

    前言 作者 小蜗牛向前冲 名言 我可以接受失败 但我不能接受放弃 如果觉的博主的文章还不错的话 还请点赞 收藏 关注 支持博主 如果发现有问题的地方欢迎 大家在评论区指正 目录 一 认识操纵系统下的文件 1 什么是文件 2 文件的类型 3
  • 医疗器械相关展会

    1 CMEF中国国际医疗器械博览会 始创于1979年 每年春秋两届 已成为亚太地区最大的医疗器械及相关产品 服务展览会
  • 机器学习实战项目总结

    1 预测模型新项目模板 机器学习是针对数据进行自动挖掘 找出数据的内在规律 并应用这个规律来预测新数据 一个很好的实践机器学习项目的方法 使用从UCI机器学习仓库链接 获取的数据集开启一个机器学习项目 分类或回归模型的机器学习项目可以分成以