使用sklearn进行机器学习案例(1)

news/2024/11/8 9:08:32/

文章目录

    • 案例一. 加州房价预测
    • 案例二. MNIST手写数字识别
    • 案例三. 波士顿房价预测

案例一. 加州房价预测

线性回归通过对训练集进行训练,拟合出一个线性方程,使得预测值与实际值之间的平均误差最小化。这个过程可以使用梯度下降法等优化算法来实现。即通过最小化预测值(线性函数)与实际值之间的误差(成本函数)来训练出的模型。
sklearn中提供了可直接调用的线性回归算法模型LinearRegression()

案例一将加州房价数据集的80%用作训练集,其余20%用作测试集,通过给出的数据样本进行推理,得到一个函数模型后,就可以用于推断加州其他地区的房价(中位数)。

Python代码:

import pandas as pd #导入Pandas,用于数据读取和处理
# 读入房价数据,示例代码中的文件地址为internet链接,读者也可以下载该文件到本机进行读取
# 如,当数据集和代码文件位于相同本地目录,路径名应为"./house.csv",或直接放"house.csv"亦可
df_housing = pd.read_csv("https://raw.githubusercontent.com/huangjia2019/house/master/house.csv")
df_housing.head #显示加州房价数据的部分信息
X = df_housing.drop("median_house_value",axis = 1) #构建特征集X,去掉"median_house_value",其余赋给X
y = df_housing.median_house_value #构建标签集y,将df_housing.median_house_value单独赋给yfrom 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) #以80%/20%的比例进行数据集的拆分from sklearn.linear_model import LinearRegression #导入线性回归算法模型
model = LinearRegression() #使用线性回归算法
model.fit(X_train, y_train) #用训练集数据,训练模型,拟合函数,确定参数y_pred = model.predict(X_test) #预测测试集的y值
print('房价中位数的真值(测试集)', y_test)
print('预测的房价中位数(测试集)', y_pred)print("给预测评分:", model.score(X_test, y_test)) #评估预测结果import matplotlib.pyplot as plt #导入matplotlib画图库
#用散点图显示家庭收入中位数和房价中位数的分布
plt.scatter(X_test.median_income, y_test, color='brown', s=10)
#画出回归函数(从特征到预测标签)
plt.plot(X_test.median_income, y_pred, color='green', linewidth=0.1)
plt.xlabel('Median Income') #X轴-家庭收入中位数
plt.ylabel('Median House Value') #Y轴-房价中位数
plt.show() #显示房价分布和习得的函数图形

在这里插入图片描述
训练结果:

房价中位数的真值(测试集) 3873     171400.0
3625     189600.0
3028     500001.0
13814    229400.0
15398    163400.0...   
1363     212500.0
7947     210500.0
14574    142900.0
10009    128300.0
9149      84700.0
Name: median_house_value, Length: 3400, dtype: float64
预测的房价中位数(测试集) [211157.06335416 218581.64298576 465317.31295563 ... 201751.23969632160873.51846958 138847.26913351]
给预测评分: 0.6321014171579509

案例二. MNIST手写数字识别

import numpy as np # 导入NumPy数学工具箱
import pandas as pd # 导入Pandas数据处理工具箱
from keras.datasets import mnist #从Keras中导入mnist数据集
#读入训练集和测试集
(X_train_image, y_train_lable), (X_test_image, y_test_lable) =  mnist.load_data()print("特征集张量形状:", X_train_image.shape) #用shape方法显示张量的形状
print("第一个数据样本:\n", X_train_image[0]) #注意Python的索引是从0开始的
print("第一个数据样本的标签:", y_train_lable[0])from tensorflow.keras.utils import to_categorical # 导入keras.utils工具箱的类别转换工具
X_train = X_train_image.reshape(60000,28,28,1) # 给标签增加一个维度
X_test = X_test_image.reshape(10000,28,28,1) # 给标签增加一个维度
y_train = to_categorical(y_train_lable, 10) # 特征转换为one-hot编码
y_test = to_categorical(y_test_lable, 10) # 特征转换为one-hot编码
print("数据集张量形状:", X_train.shape) # 特征集张量的形状
print("第一个数据标签:",y_train[0]) # 显示标签集的第一个数据from keras import models # 导入Keras模型, 和各种神经网络的层
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
model = models.Sequential() # 用序贯方式建立模型
model.add(Conv2D(32, (3, 3), activation='relu', # 添加Conv2D层input_shape=(28,28,1))) # 指定输入数据样本张量的类型
model.add(MaxPooling2D(pool_size=(2, 2))) # 添加MaxPooling2D层
model.add(Conv2D(64, (3, 3), activation='relu')) # 添加Conv2D层
model.add(MaxPooling2D(pool_size=(2, 2))) # 添加MaxPooling2D层
model.add(Dropout(0.25)) # 添加Dropout层
model.add(Flatten()) # 展平
model.add(Dense(128, activation='relu')) # 添加全连接层
model.add(Dropout(0.5)) # 添加Dropout层
model.add(Dense(10, activation='softmax')) # Softmax分类激活,输出10维分类码
# 编译模型
model.compile(optimizer='rmsprop', # 指定优化器loss='categorical_crossentropy', # 指定损失函数metrics=['accuracy']) # 指定验证过程中的评估指标model.fit(X_train, y_train, # 指定训练特征集和训练标签集validation_split = 0.3, # 部分训练集数据拆分成验证集epochs=5, # 训练轮次为5轮batch_size=128) # 以128为批量进行训练score = model.evaluate(X_test, y_test) # 在测试集上进行模型评估
print('测试集预测准确率:', score[1]) # 打印测试集上的预测准确率pred = model.predict(X_test[0].reshape(1, 28, 28, 1)) # 预测测试集第一个数据
print(pred[0],"转换一下格式得到:",pred.argmax()) # 把one-hot码转换为数字
import matplotlib.pyplot as plt # 导入绘图工具包
plt.imshow(X_test[0].reshape(28, 28),cmap='Greys') # 输出这个图片
plt.show() #显示图片

训练结果:

特征集张量形状: (60000, 28, 28)
第一个数据样本:[[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   3  18  18  18 126 136175  26 166 255 247 127   0   0   0   0][  0   0   0   0   0   0   0   0  30  36  94 154 170 253 253 253 253 253225 172 253 242 195  64   0   0   0   0][  0   0   0   0   0   0   0  49 238 253 253 253 253 253 253 253 253 25193  82  82  56  39   0   0   0   0   0][  0   0   0   0   0   0   0  18 219 253 253 253 253 253 198 182 247 2410   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0  80 156 107 253 253 205  11   0  43 1540   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0  14   1 154 253  90   0   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0 139 253 190   2   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0  11 190 253  70   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0  35 241 225 160 108   10   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0  81 240 253 253 11925   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0   0  45 186 253 253150  27   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  16  93 252253 187   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 249253 249  64   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0   0  46 130 183 253253 207   2   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0  39 148 229 253 253 253250 182   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0  24 114 221 253 253 253 253 20178   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0  23  66 213 253 253 253 253 198  81   20   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0  18 171 219 253 253 253 253 195  80   9   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0  55 172 226 253 253 253 253 244 133  11   0   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0 136 253 253 253 212 135 132  16   0   0   0   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   00   0   0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   00   0   0   0   0   0   0   0   0   0]]
第一个数据样本的标签: 5
数据集张量形状: (60000, 28, 28, 1)
第一个数据标签: [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
Epoch 1/5
329/329 [==============================] - 9s 27ms/step - loss: 1.0503 - accuracy: 0.8201 - val_loss: 0.1492 - val_accuracy: 0.9578
Epoch 2/5
329/329 [==============================] - 12s 35ms/step - loss: 0.1949 - accuracy: 0.9464 - val_loss: 0.0734 - val_accuracy: 0.9794
Epoch 3/5
329/329 [==============================] - 11s 35ms/step - loss: 0.1417 - accuracy: 0.9618 - val_loss: 0.0663 - val_accuracy: 0.9834
Epoch 4/5
329/329 [==============================] - 12s 35ms/step - loss: 0.1132 - accuracy: 0.9697 - val_loss: 0.0683 - val_accuracy: 0.9818
Epoch 5/5
329/329 [==============================] - 11s 34ms/step - loss: 0.0917 - accuracy: 0.9745 - val_loss: 0.0669 - val_accuracy: 0.9817
313/313 [==============================] - 1s 3ms/step - loss: 0.0638 - accuracy: 0.9826
测试集预测准确率: 0.9825999736785889
1/1 [==============================] - 0s 41ms/step
[1.5436295e-13 3.0449864e-12 3.0315375e-11 3.1523032e-13 8.0739130e-159.7735735e-15 1.6785966e-18 1.0000000e+00 6.6133326e-15 1.2456733e-09] 转换一下格式得到: 7

在这里插入图片描述
其中onehot编码[[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]]显示为[1.5436295e-13 3.0449864e-12 3.0315375e-11 3.1523032e-13 8.0739130e-15 9.7735735e-15 1.6785966e-18 1.0000000e+00 6.6133326e-15 1.2456733e-09] 是因为默认采用了科学计数法形式显示,当数值非常小时会用浮点数精确表示。要想取消这样表示可通过:np.set_printoptions(suppress=True) # 取消科学计数法的形式显示 来设置。

案例三. 波士顿房价预测

更换案例一的数据集为波士顿房价,数据集存在于keras及很多其它框架内部,可以通过下述语句导入
from keras.datasets import boston_housing #从Keras中导入Boston Housing数据集,使用案例一的线性回归模型对波士顿房价数据训练集进行房价中位数的预测。

由于keras中调用了tensorflow(相当于精简版的tf),所以要先pip install tensorflow

Boston Housing
该数据集包含美国人口普查局收集的美国马萨诸塞州波士顿住房价格的有关信息, 数据集很小,只有506个案例。
数据集都有以下14个属性:
0-CRIM–城镇人均犯罪率 ------【城镇人均犯罪率】
1-ZN - 占地面积超过25,000平方英尺的住宅用地比例。 ------【住宅用地所占比例】
2-INDUS - 每个城镇非零售业务的比例。 ------【城镇中非商业用地占比例】
3-CHAS - Charles River虚拟变量(如果是河道,则为1;否则为0 ------【查尔斯河虚拟变量,用于回归分析】
4-NOX - 一氧化氮浓度(每千万份) ------【环保指标】
5-RM - 每间住宅的平均房间数 ------【每栋住宅房间数】
6-AGE - 1940年以前建造的自住单位比例 ------【1940年以前建造的自住单位比例 】
7-DIS -波士顿的五个就业中心加权距离 ------【与波士顿的五个就业中心加权距离】
8-RAD - 径向高速路的可达性指数 ------【距离高速公路的便利指数】
9-TAX - 每10,000美元的全额物业税率 ------【每一万美元的不动产税率】
10-PTRATIO - 城镇的学生与教师比例 ------【城镇中教师学生比例】
11-B - 1000(Bk - 0.63)^ 2其中Bk是城镇黑人的比例 ------【城镇中黑人比例】
12-LSTAT - 人口状况下降% ------【房东属于低等收入阶层比例】
13-MEDV - 自有住房的中位数报价, 单位1000美元 ------【自住房屋房价中位数】

同样是将0-12赋值给X_train作为训练集中的特征集,13给y_train作为标签集

import numpy as np # 导入NumPy数学工具箱
import pandas as pd # 导入Pandas数据处理工具箱
from keras.datasets import boston_housing #从Keras中导入Boston Housing数据集
#读入训练集和测试集
(X_train, y_train), (X_test, y_test) = boston_housing.load_data()print ("数据集张量形状:", X_train.shape) #shape方法显示张量的形状
print ("第一个数据样本:\n", X_train[0]) #注意Python的索引是从0开始的
print ("第一个数据样本的标签:", y_train[0])from sklearn.linear_model import LinearRegression #导入线性回归算法模型
model = LinearRegression() #使用线性回归算法
model.fit(X_train, y_train) #用训练集数据,训练机器,拟合函数,确定参数y_pred = model.predict(X_test) #预测测试集的Yprint ('房价的真值(测试集)',y_test)
print ('预测的房价(测试集)',y_pred)print("给预测评分:", model.score(X_test, y_test)) #评估预测结果

训练结果:

数据集张量形状: (404, 13)
第一个数据样本:[  1.23247   0.        8.14      0.        0.538     6.142    91.73.9769    4.      307.       21.      396.9      18.72   ]
第一个数据样本的标签: 15.2
房价的真值(测试集) [ 7.2 18.8 19.  27.  22.2 24.5 31.2 22.9 20.5 23.2 18.6 14.5 17.8 50.20.8 24.3 24.2 19.8 19.1 22.7 12.  10.2 20.  18.5 20.9 23.  27.5 30.19.5 22.  21.2 14.1 33.1 23.4 20.1  7.4 15.4 23.8 20.1 24.5 33.  28.414.1 46.7 32.5 29.6 28.4 19.8 20.2 25.  35.4 20.3  9.7 14.5 34.9 26.67.2 50.  32.4 21.6 29.8 13.1 27.5 21.2 23.1 21.9 13.  23.2  8.1  5.621.7 29.6 19.6  7.  26.4 18.9 20.9 28.1 35.4 10.2 24.3 43.1 17.6 15.416.2 27.1 21.4 21.5 22.4 25.  16.6 18.6 22.  42.8 35.1 21.5 36.  21.924.1 50.  26.7 25. ]
预测的房价(测试集) [ 9.69267239 21.05859431 20.94145461 34.25223414 25.95902598 20.5674103828.15310405 25.07113862 20.30519458 22.82489511 20.29027213 18.0793891716.46141024 35.31166595 19.41369959 19.34727116 24.58140904 21.0134625219.99079236 23.79286427 12.20780045 17.14218992 22.51468752 12.9257051121.18070615 23.94073547 33.46176314 24.2631555  13.35213096 20.7193925223.45082103 19.1486881  36.09743765 23.47113531 19.03141995  5.9242573314.02090469 22.96425377 16.01731242 27.09134249 22.06997029 28.6175538917.75679772 34.75579014 31.29455712 24.73234165 31.12655323 18.0926899222.62638989 24.21208909 30.5854317  18.71860574 10.50163617 13.7377929234.4022841  27.53140317 18.08151522 40.05101982 37.63271513 24.6402142225.73823434 20.64369987 20.33514699 21.38393124 24.63485497 23.5307180517.42141466 26.76911736  3.83782148 11.97063636 24.2602519  23.6719179923.66639182  8.4403269  28.52690962 20.94071229 20.44489658 24.7767816933.77299778  7.02038331 24.55379254 36.73923493 16.09878612 18.1466398720.48899554 18.7928142  22.45683561 26.19154506 23.36585592 28.8958379117.48243942 16.05642916 26.69532678 28.1393996  35.04164989 20.0530805236.25269116 38.51475052 25.13506119 41.49062194 34.65500235 25.33950895]
给预测评分: 0.7213535934621558

参考文献:
[1] 黄佳——《零基础学机器学习》


http://www.ppmy.cn/news/97794.html

相关文章

【MCS-51】中断系统原理及应用

中断是单片机中一个十分重要的功能,它的出现能够让我们的单片机在顺序执行命令时,具备应对特殊情况的能力。 目录 🌙通信方式 🍃无条件传送 🍃有条件传送 🍃DMA通信 🍃中断传送 &#x1…

CGAL4.4+VC2008编译

CGAL4.4VC2008编译 CGAL 一: CGAL是欧盟资助的基础几何库,很底层, 纯算法, 对于你的项目和科研都是不可多得的好东西, 废话一句, 国内做这样的东西, 估计会活不下去交不了差的. 不多介绍.送上 英文原址, 从软件角度, CGAL架构与STL模板库, 需要你有较好的C功底. 英文功底就不…

c primer plus学习笔记

1.int的大小恒定就是32位么? 不是的,int大小是跟着系统走的,不是在各个系统里固定不变的。 32位系统int就是32位。64位系统,int就是64位。short 和long的长度则跟着long走,一般来说int是32位,short就是16…

阻焊设计~焊盘阻焊开窗、阻焊桥

阻焊设计 焊盘阻焊开窗 阻焊开窗应比焊盘尺寸大6mils以上(单边3mils),见下图: 阻焊桥 a) 相邻的SMD焊盘,SMD焊盘和插件孔、SMD焊盘和过孔、过孔与过孔之间需要保留阻焊桥;最小阻焊桥宽度2mils &#x…

Qt编写视频监控系统76-Onvif跨网段组播搜索和单播搜索的实现

一、前言 在视频监控行业一般会用国际onvif工具来测试设备是否支持onvif协议,工具的名字叫ONVIF Device Manager(还有个工具叫ONVIF Device Test Tool,专用于程序员测试各种数据交互),可以自行搜索下载,此…

每日学术速递5.26

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Text2NeRF: Text-Driven 3D Scene Generation with Neural Radiance Fields 标题:Text2NeRF:具有神经辐射场的文本驱动 3D 场景生成 作者:Jingb…

阿里系文生图(PAI+通义)

PAI-Diffusion模型来了!阿里云机器学习团队带您徜徉中文艺术海洋 - 知乎作者:汪诚愚、段忠杰、朱祥茹、黄俊导读近年来,随着海量多模态数据在互联网的爆炸性增长和训练深度学习大模型的算力大幅提升,AI生成内容(AI Gen…