机器学习技术(三)——机器学习实践案例总体流程

机器学习实践案例总体流程

文章目录

  • 机器学习实践案例总体流程
    • 一、引言
    • 二、案例
      • 1、决策树对鸢尾花分类
        • 1.数据来源
        • 2.数据导入及描述
        • 3.数据划分与特征处理
        • 4.建模预测
      • 2、各类回归波士顿房价预测
        • 1.案例数据
        • 2.导入所需的包和数据集
        • 3.载入数据集,查看数据属性,可视化
      • 3、分割数据集,并对数据集进行预处理
      • 4、利用各类回归模型,对数据集进行建模
      • 5、利用网格搜索对超参数进行调节

在这里插入图片描述

一、引言

前面学习了一些基础知识,但还没有步入机器学习算法。通过两个案例,来掌握机器学习模型的训练与评估、机器学习模型搭建的总体流程以及特征处理、决策树模型、交叉检验、网格搜索等常用数据挖掘方法的知识。

二、案例

1、决策树对鸢尾花分类

1.数据来源

本道题目使用数据集为“iris.data”。这份数据集包含3种不同类型的鸢尾花 (Setosa, Versicolour, and Virginica) 的数据,数据形状为150x5, 五列字段分别为sepal_length(萼片长度)、sepal_width(萼片宽度)、petal_length(花瓣长度)、petal_width(花瓣宽度)、类别。

2.数据导入及描述

导入数组处理numpy、数据分析pandas模块、可视化模块matplotlib。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

导入数据集文件 “iris.data”,命名为iris_data,将5列数据列名设置为’sepal_length_cm’, ‘sepal_width_cm’, ‘petal_length_cm’, ‘petal_width_cm’, ‘class’。

iris_data = pd.read_csv('./iris.data')
iris_data.columns = ['sepal_length_cm', 'sepal_width_cm', 'petal_length_cm', 'petal_width_cm', 'class']

查看(除表头外)前 5 行数据,查看数据描述信息。

iris_data.head()
iris_data.describe()

输出:

sepal_length_cmsepal_width_cmpetal_length_cmpetal_width_cm
count150.000000150.000000150.000000150.000000
mean5.8433333.0573333.7580001.199333
std0.8280660.4358661.7652980.762238
min4.3000002.0000001.0000000.100000
25%5.1000002.8000001.6000000.300000
50%5.8000003.0000004.3500001.300000
75%6.4000003.3000005.1000001.800000
max7.9000004.4000006.9000002.500000

3.数据划分与特征处理

将数据集切分为4列特征和类别,导入sklearn库中的train_test_split方法将数据集的75%作为训练集和25%作为测试集。

from sklearn.model_selection import train_test_split
all_inputs = iris_data[['sepal_length_cm', 'sepal_width_cm', 'petal_length_cm', 'petal_width_cm']].values
all_classes = iris_data['class'].values
(training_inputs,testing_inputs,training_classes,testing_classes) = train_test_split(all_inputs, all_classes, train_size=0.75, random_state=1)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wCJdleQM-1688539473388)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230703151156315.png)]

4.建模预测

导入sklearn中的DecisionTreeClassifier,构建决策树模型进行分类模型训练,并在测试集上进行评分。

from sklearn.tree import DecisionTreeClassifier
decision_tree_classifier = DecisionTreeClassifier()
decision_tree_classifier.fit(training_inputs, training_classes)
decision_tree_classifier.score(testing_inputs, testing_classes)

输出:

0.9736842105263158

导入sklearn中的cross_val_score,构建决策树模型,进行10次交叉验证,并输出评分。

from sklearn.model_selection import cross_val_score
decision_tree_classifier = DecisionTreeClassifier()
cv_scores = cross_val_score(decision_tree_classifier, all_inputs, all_classes, cv=10)
print (cv_scores)

输出:

[1.         0.93333333 1.         0.93333333 0.93333333 0.866666670.93333333 1.         1.         1.        ]

构建决策树模型,设置max_depth=1,进行10次交叉验证,并输出评分。

decision_tree_classifier = DecisionTreeClassifier(max_depth=1)
cv_scores = cross_val_score(decision_tree_classifier, all_inputs, all_classes, cv=10)
print (cv_scores)

输出:

[0.66666667 0.66666667 0.66666667 0.66666667 0.66666667 0.666666670.66666667 0.66666667 0.66666667 0.66666667]

导入sklearn中的GridSearchCVStratifiedKFold,构建决策树模型,对决策树模型参数进行网格搜索,设置parameter_grid = {'max_depth': [1, 2, 3, 4, 5],'max_features': [1, 2, 3, 4]},进行10次交叉验证,输出最优模型评分和最佳参数。

from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import StratifiedKFold
decision_tree_classifier = DecisionTreeClassifier()
parameter_grid = {'max_depth': [1, 2, 3, 4, 5],'max_features': [1, 2, 3, 4]}
cross_validation = StratifiedKFold(n_splits=10)
grid_search = GridSearchCV(decision_tree_classifier, param_grid=parameter_grid, cv=cross_validation)
grid_search.fit(all_inputs, all_classes)print('Best score: {}'.format(grid_search.best_score_))
print('Best parameters: {}'.format(grid_search.best_params_))

输出:

Best score: 0.96
Best parameters: {'max_depth': 3, 'max_features': 4}

在这里插入图片描述

2、各类回归波士顿房价预测

由于本案例使用的数据集样本量较小,且数据来自于scikit-learn自带的开源波士顿房价数据。波士顿房价预测项目是一个简单的回归模型,通过此案例可以学会一些关于机器学习库sklearn的基本用法和一些基本的数据处理方法。

1.案例数据

该案例主要内容是进行波士顿数据集,共有13个特征,总共506条数据,每条数据包含房屋以及房屋周围的详细信息。其中包含城镇犯罪率,一氧化氮浓度,住宅平均房间数,到中心区域的加权距离以及自住房平均房价等等。具体如下:

CRIM:城镇人均犯罪率。
ZN:住宅用地超过 25000 sq.ft.的比例。
INDUS:城镇非零售商用土地的比例。
CHAS:查理斯河空变量(如果边界是河流,则为1;否则为0)。
NOX:一氧化氮浓度。
RM:住宅平均房间数。
AGE:1940 年之前建成的自用房屋比例。
DIS:到波士顿五个中心区域的加权距离。
RAD:辐射性公路的接近指数。
TAX:每 10000 美元的全值财产税率。
PTRATIO:城镇师生比例。
B:1000(Bk-0.63)^ 2,其中 Bk 指代城镇中黑人的比例。
LSTAT:人口中地位低下者的比例。
target:自住房的平均房价,以千美元计。

2.导入所需的包和数据集

保证下方引入的内容已经被安装。

pip install xgboost

# 防止不必要的警告
import warnings
warnings.filterwarnings("ignore")# 引入数据科学基础包
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
import scipy.stats as st
import seaborn as sns# 引入机器学习,预处理,模型选择,评估指标
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import r2_score# 引入本次所使用的波士顿数据集
from sklearn.datasets import load_boston# 引入算法
from sklearn.linear_model import RidgeCV, LassoCV, LinearRegression, ElasticNet
#对比SVC,是svm的回归形式
from sklearn.svm import SVR
# 集成算法
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from xgboost import XGBRegressor

3.载入数据集,查看数据属性,可视化

  1. 载入波士顿房价数据集,获取特征和标签,查看相关属性
# 载入波士顿房价数据集
boston = load_boston()# x是特征,y是标签
x = boston.data
y = boston.target# 查看相关属性
print('特征的列名')
print(boston.feature_names)
print("样本数据量:%d, 特征个数:%d" % x.shape)
print("target样本数据量:%d" % y.shape[0])

输出:

特征的列名
['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO''B' 'LSTAT']
样本数据量:506, 特征个数:13
target样本数据量:506
  1. 数据转化为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
  1. 对标签的分布进行可视化
sns.distplot(tuple(y), kde=False, fit=st.norm)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g5fr0emz-1688539473390)(D:\Administrator\Downloads\Untitled.png)]

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]])

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

  1. 输入模型名字
# 模型的名字
names = ['LinerRegression','Ridge','Lasso','Random Forrest','GBDT','Support Vector Regression','ElasticNet','XgBoost']
  1. 创建模型列表
# 定义模型
# 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(),ElasticNet(alpha=0.001,max_iter=10000),XGBRegressor()]
  1. 输出所有回归模型的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)score = r2_score(y_test, y_pred)return score
  1. 遍历所有模型进行评分
# 遍历所有模型进行评分
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()))

输出:

LinerRegression: 0.564115, 0.0000
Ridge: 0.563673, 0.0000
Lasso: 0.564049, 0.0000
Random Forrest: 0.735384, 0.0000
GBDT: 0.730172, 0.0000
Support Vector Regression: 0.517260, 0.0000
ElasticNet: 0.563992, 0.0000
XgBoost: 0.759977, 0.0000

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

  1. 使用网格搜索,以及交叉验证
# 模型构建
''''kernel': 核函数'C': SVR的正则化因子,'gamma': 'rbf', 'poly' and 'sigmoid'核函数的系数,影响模型性能
'''parameters = {'kernel': ['linear', 'rbf'],'C': [0.1, 0.5,0.9,1,5],'gamma': [0.001,0.01,0.1,1]
}# 使用网格搜索,以及交叉验证
model = GridSearchCV(SVR(), param_grid=parameters, cv=3)
model.fit(x_train, y_train)

输出:

GridSearchCV(cv=3, estimator=SVR(),param_grid={'C': [0.1, 0.5, 0.9, 1, 5],'gamma': [0.001, 0.01, 0.1, 1],'kernel': ['linear', 'rbf']})
  1. 获取最优参数
# 获取最优参数
print ("最优参数列表:", model.best_params_)
print ("最优模型:", model.best_estimator_)
print ("最优R2值:", model.best_score_)

输出:

最优参数列表: {'C': 5, 'gamma': 0.1, 'kernel': 'rbf'}
最优模型: SVR(C=5, gamma=0.1)
最优R2值: 0.7965173649188232
  1. 可视化
ln_x_test = range(len(x_test))
y_predict = model.predict(x_test)# 设置画布
plt.figure(figsize=(16,8), facecolor='w')
# 用红实线画图
plt.plot(ln_x_test, y_test, 'r-', lw=2, label=u'真实值')
# 用绿实线画图
plt.plot(ln_x_test, y_predict, 'g-', lw = 3, label=u'SVR算法估计值,$R^2$=%.3f' % (model.best_score_))# 图形显示
plt.legend(loc = 'upper left')
plt.grid(True)
plt.title(u"波士顿房屋价格预测(SVM)")
plt.xlim(0, 101)
plt.show()

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l9kGygQf-1688539473390)(D:\Administrator\Downloads\service-course_7672b82e_273.PNG)]

如汉字不能正常显示,请设置为英文或将字体文件放到指定路径中,在使用时调用字体文件。

如不能解决请参考:https://blog.csdn.net/hfy1237/article/details/128218567

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/23445.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu netplan工具原理(网络配置、ip修改ip、固定ip)(NetworkManager)

https://netplan.io/ 文章目录 netplan工作原理netplan -h原翻译命令释义- help:显示netplan的帮助消息。- apply:将当前netplan配置应用到运行系统。示例命令:netplan apply --debug- generate:从/etc/netplan/*.yaml生成特定于后…

no main manifest attribute, in schoolspringboot-0.0.1-SNAPSHOT.jar

no main manifest attribute, in schoolspringboot-0.0.1-SNAPSHOT.jar 部署springboot项目jar包报错。解决方案&#xff1a; pom文件添加 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

自然语言处理(扩展学习1):Scheduled Sampling(计划采样)与2. Teacher forcing(教师强制)

自然语言处理&#xff08;扩展学习1&#xff09;&#xff1a;Scheduled Sampling(计划采样)与2. Teacher forcing&#xff08;教师强制&#xff09; 作者&#xff1a;安静到无声 个人主页 作者简介&#xff1a;人工智能和硬件设计博士生、CSDN与阿里云开发者博客专家&#xff0…

vscode 无法格式化python代码、无法格式化C++代码(vscode格式化失效)另一种解决办法:用外部工具yapf格式化(yapf工具)

文章目录 我真的解决方法&#xff1a;用yapfyapf工具使用方法示例格式化单个文件&#xff08;格式化前先用-d参数预先查看格式化更改内容&#xff0c;以决定是否要更改&#xff09;格式化某个目录递归格式化某个目录 20230716 齐拉帕&#xff0c;我删除了虚拟环境目录&#xff…

electron globalShortcut 快捷键与系统全局快捷键冲突

用 electron 开发自己的接口测试工具&#xff08;Post Tools&#xff09;&#xff0c;在设置了 globalShortcut 快捷键后&#xff0c;发现应用中的快捷键与系统全局快捷键冲突了&#xff0c;导致系统快捷键不可正常使用。 快捷键配置 export function initGlobalShortcut(main…

Java设计模式之结构型-外观模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 外观模式&#xff0c;为子系统中的一组接口提供一个一致的界面&#xff0c;此模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。 二、UML类图 三、角色设计 角…

Modbus协议是什么?Modbus协议类型解析

什么是Modbus协议?Modbus 是由 Modicon(现为施耐德电气公司的一个品牌)在 1979 年发明的一种工业控制总线协议&#xff0c;是全球第一个真正用于工业现场的总线协议。Modbus 以其简单、健壮、开放而且不需要特许授权的特点&#xff0c;成为通用通信协议。为了适应以太网环境&a…

RDS-Tools RDS-Knight Crack

RDS 高级安全性 利用全面的网络安全工具箱中有史以来最强大的安全功能集来保护您的 RDS 基础架构。 全方位 360 保护 无与伦比的功能集 无与伦比的物有所值 企业远程桌面安全。现代工作空间的智能解决方案。 办公室正在权力下放。远程办公室和移动员工数量创历史新高。随…

细节:双花括号({{ ... }})在Vue.js中的用法

问题&#xff1a; 为什么后端返回的是数字类型时&#xff0c; {{ form.orderPrice }}可以拿到值展示&#xff0c; {{ form.orderPrice || "-" }} 不可以&#xff1f; 接口返回数据&#xff1a; <el-form-item label"订单金额&#xff1a;" prop"…

Qt Creator常用快捷键及技巧

文章目录 1.[Qt Creator常用快捷键及技巧提升编码效率]2.win10上安装QT &#xff0c;选择安装组件3.qt配置过程中主要注意的几点4.目录结构附&#xff1a;网友整理快捷方式&#xff1a; 1.[Qt Creator常用快捷键及技巧提升编码效率] (https://blog.csdn.net/luoyayun361/artic…

ChatGPT 最佳实践指南之:使用外部工具

Use external tools 使用外部工具 Compensate for the weaknesses of GPTs by feeding them the outputs of other tools. For example, a text retrieval system can tell GPTs about relevant documents. A code execution engine can help GPTs do math and run code. If a …

graylog源码搭建

这里主要讲如何源码安装graylog 下载地址&#xff1a; https://www.graylog.org/downloads/ 下载带有JVM的源码文件源码安装 下载graylog-5.1.3-linux-x64.tgz&#xff0c;并上传到Centos中&#xff0c;执行以下操作 tar -zxvf graylog-5.1.3-linux-x64.tgzcd /etcmkdir -p …