深度学习与大模型第2课:机器学习实战

news2024/11/13 10:48:24

文章目录

  • 深度学习与大模型第2课:机器学习实战
    • 1. Iris鸢尾花数据集分类
      • 1.1 数据预处理
      • 1.2 模型训练与评估
    • 2. 美国加州房价预测
      • 2.1 数据预处理
      • 2.2 模型训练与调优
    • 3. 房价数据的回归分析
      • 3.1 数据预处理与建模
    • 4. 时尚衣物识别:MNIST 数据集分类
      • 4.1 数据读取与可视化
      • 4.2 批量可视化数据
      • 4.3 模型构建与优化
    • 总结

深度学习与大模型第2课:机器学习实战

课程代码及数据集:https://pan.baidu.com/s/1Mp6deFtxIJVgUwmhuKLh1w?pwd=fepk

本篇博客主要分享如何利用Python和常见的机器学习库,完成一些基础的机器学习任务。涉及的内容包括经典的数据集处理、模型训练及评估。代码细节将会有所保留,以便初学者可以更好地理解整个流程。

1. Iris鸢尾花数据集分类

1.1 数据预处理

首先,我们从pandas库导入iris数据集,并对数据进行初步处理。代码如下:

import pandas as pd

# 读取数据集
iris = pd.read_csv('./iris.csv')

# 特征矩阵和标签
x = iris.drop('species', axis=1).iloc[:, :-2].values
y = iris['species']

# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.1, random_state=99)

在这里插入图片描述

1.2 模型训练与评估

使用Logistic Regression进行模型训练,并计算模型在测试集上的准确率:

from sklearn.linear_model import LogisticRegression

# 初始化模型
log_reg = LogisticRegression(solver="liblinear", random_state=66)

# 模型训练
log_reg.fit(X_train, y_train)

# 模型评估
accuracy = log_reg.score(X_test, y_test)
print(f'模型准确率: {accuracy:.4f}')

2. 美国加州房价预测

2.1 数据预处理

同样使用pandas读取房价数据,并对缺失值进行填充。这里采用SimpleImputer的中位数策略:

import pandas as pd
from sklearn.impute import SimpleImputer

# 读取数据集
housing = pd.read_csv('D:/tmp/housing.csv')

# 处理缺失值
imputer = SimpleImputer(strategy="median")
housing['total_bedrooms'] = imputer.fit_transform(housing[['total_bedrooms']])

# 特征选择
X = housing.drop(['households', 'total_bedrooms', 'population', 'longitude'], axis=1)
y = housing['median_house_value']

# 处理分类特征
X_cat = X[['ocean_proximity']]
X_num = X.drop('ocean_proximity', axis=1)

# 独热编码与标准化
from sklearn.preprocessing import OneHotEncoder, StandardScaler
import numpy as np

X_1hot = OneHotEncoder(sparse=False).fit_transform(X_cat)
X_std = StandardScaler().fit_transform(X_num)
X_prepared = np.c_[X_std, X_1hot]

2.2 模型训练与调优

采用随机森林回归模型,并利用RandomizedSearchCV进行参数调优:

from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import RandomizedSearchCV

# 初始化模型
forest_reg = RandomForestRegressor()

# 参数网格
param_grid = [
    {'n_estimators': [3, 10, 30], 'max_features': [2, 4, 6, 8]},
    {'bootstrap': [False], 'n_estimators': [3, 10], 'max_features': [2, 3, 4]},
]

# 随机搜索
random_search = RandomizedSearchCV(forest_reg, param_grid, n_iter=10, cv=5, scoring='neg_mean_squared_error')
random_search.fit(X_train, y_train)

# 最佳模型
random_final_model = random_search.best_estimator_
score = random_final_model.score(X_test, y_test)
print(f'模型预测得分: {score:.4f}')

在这里插入图片描述

3. 房价数据的回归分析

3.1 数据预处理与建模

本部分读取房价数据集,进行数据预处理(包括缺失值处理、特征编码和标准化),使用决策树回归模型进行训练,并评估模型性能,同时输出预测值与实际房价的对比结果。:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler

# 读取数据
file_path = 'D:/tmp/kc_house.csv'
data = pd.read_csv(file_path)

# 处理数据
# 缺失值处理(简单示例,视数据而定)
data_cleaned = data.dropna()

# 删除无关列
data_cleaned = data_cleaned.drop(columns=['Unnamed: 0'])

# 特征工程:将类别变量 house_age 进行 one-hot 编码
data_cleaned = pd.get_dummies(data_cleaned, columns=['house_age'], drop_first=True)

# 特征标准化
scaler = StandardScaler()
X = data_cleaned.drop(columns=['price'])
X_scaled = scaler.fit_transform(X)
y = data_cleaned['price']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 构建模型
tree_reg = DecisionTreeRegressor(max_depth=4)

# 训练模型
tree_reg.fit(X_train, y_train)

# 评估模型得分
final_score = tree_reg.score(X_test, y_test)
print("模型预测得分:", final_score)

# 使用模型预测并输出对比结果
for i in range(len(X_test)):
    guest_price = tree_reg.predict([X_test[i]])
    print(f"预测价格为 {guest_price[0]:.2f}, 真实价格是 {y_test.values[i]:.2f}")

在这里插入图片描述

4. 时尚衣物识别:MNIST 数据集分类

4.1 数据读取与可视化

首先读取mnist数据集,并展示一个样本图像:

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

# 读取数据
data = pd.read_csv('D:/tmp/mnist.csv')

# 处理数据
y = data['label']
X = data.iloc[:, :-1].values

# 可视化样本数据
some_digit = X[36000]
some_digit_image = some_digit.reshape(28, 28)
plt.imshow(some_digit_image, cmap=matplotlib.cm.binary, interpolation="nearest")
plt.axis("off")
plt.show()

4.2 批量可视化数据

定义一个函数来绘制多个图像,并展示更多的手写数字样本:

def plot_digits(instances, images_per_row=10, **options):
    size = 28
    images_per_row = min(len(instances), images_per_row)
    images = [instance.reshape(size, size) for instance in instances]
    n_rows = (len(instances) - 1) // images_per_row + 1
    row_images = []
    n_empty = n_rows * images_per_row - len(instances)
    images.append(np.zeros((size, size * n_empty)))
    for row in range(n_rows):
        rimages = images[row * images_per_row : (row + 1) * images_per_row]
        row_images.append(np.concatenate(rimages, axis=1))
    image = np.concatenate(row_images, axis=0)
    plt.imshow(image, cmap=matplotlib.cm.binary, **options)
    plt.axis("off")

plt.figure(figsize=(9,9))
example_images = np.r_[X[:12000:600], X[13000:30600:600], X[30600:60000:590]] 
plot_digits(example_images, images_per_row=10)
plt.show()

4.3 模型构建与优化

使用随机森林分类器对MNIST数据集进行分类,并通过RandomizedSearchCV优化模型:

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 构建随机森林分类器模型
forest_clf = RandomForestClassifier(n_estimators=100, max_depth=3, max_samples=500)
forest_clf.fit(X_train, y_train)

# 模型评估
accuracy = forest_clf.score(X_test, y_test)
print(f'初始模型准确率: {accuracy:.4f}')

# 定义参数网格进行优化
param_grid = [
    {'n_estimators': [50, 100, 200], 'max_depth': [2, 3, 4, 5]},
    {'bootstrap': [False], 'n_estimators': [50, 100], 'max_depth': [2, 3, 4]},
]

# 随机搜索
random_search = RandomizedSearchCV(forest_clf, param_grid, n_iter=10, cv=5, scoring='neg_mean_squared_error')
random_search.fit(X_train, y_train)

# 最佳模型评估
best_forest_clf = random_search.best_estimator_
final_accuracy = best_forest_clf.score(X_test, y_test)
print(f'优化后模型准确率: {final_accuracy:.4f}')

总结

通过这篇文章,我们简要介绍了如何使用Python和常见机器学习库(如Scikit-Learn、TensorFlow)进行模型训练和评估。希望这些实战示例能够帮助读者更好地理解机器学习的基本原理和操作流程。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跑Boundary-Aware Feature Propagation遇到的问题

跑Boundary-Aware Feature Propagation遇到的坑 1、运行不报错,也不显示结果 从train.py代码第一行import开始添加,print(“check1”),发现问题torch.encoding无法导入,反复地参考github源代码https://gith…

Axure RP9安装教程(Pro版)

[Axure RP 9.0下载链接]: https://ga90eobypbb.feishu.cn/docx/WKvldvZkMoKPnIx3Yl2cJhOBnqe 1.找到下载好的安装包,右键解压到“Axure RP 9.0”文件夹 2.双击打开解压出来的文件夹,选中”AxureRP-安装程序.exe“右键以管理员身份运行 3.点击"Nex…

测试小白入门-03测试理论知识看这一篇就够了

文章目录 前言一、软件开发过程模型瀑布开发模型(熟悉)快速原型模型(理解)螺旋模型(了解) 二、测试模型测试V模型(代表性)测试W模型(中大型企业)测试H模型(了解&#xff…

38集 ESP32 离线刷机教程

38集 ESP32 离线刷机教程 打开离线刷机工具 e:\technology\ESP32\esp32s3Qorvo\esp32-s3_rtc\ESP离线刷机\flash_download_tool_3.9.7_1\flash_download_tool_3.9.7\flash_download_tool_3.9.7.exe 设置如下: 要知道如何设置,需要知道esp32s3 工程的me…

【C++ Primer Plus习题】8.5

问题: 解答: #include <iostream> using namespace std;template <typename T> T max5(T arr[5]) {T max 0;for (int i 0; i < 5; i){if (arr[i] > max){max arr[i];}}return max; }int main() {int max 0;double max1 0.0;int a1[5] { 21,34,12,42,9…

【综合小项目】—— 爬取数据、数据处理、建立模型训练、自定义数据进行测试

文章目录 一、项目内容二、各步骤的代码实现1、爬取数据2、数据处理3、建立模型训练4、自定义数据进行预测 一、项目内容 1、爬取数据 本次项目的数据是某购物平台中某个产品的优质评价内容和差评内容采用爬虫的 selenium 方法进行爬取数据内容&#xff0c;并将爬取的内容分别…

C_11_位段,共同体,枚举

位段 位段也称 位域 ​ 1 字节 8 位域 概述&#xff1a; 特殊的结构体 大小按位分配 示例1&#xff1a; struct packed_data {unsigned int a : 2; // 占2 位unsigned int a : 4; // 占4 位unsigned int a : 6; // 占6 位unsigned int i; // 占4字节 32位 1b8位 } data…

打字练习神器与基础打字指法

先奉上链接&#xff1a;Learn Touch Typing Free - TypingClub 最近观察到一位计算机的学长打字哒哒哒哒停不下来&#xff0c;研究了一下发现是自己的指法有问题&#xff0c;只能从头开始学起啦。如果刚学打字的朋友们一定要学习指法&#xff0c;打好基础&#xff01; 基础指法…

基于微信小程序的挂号管理系统-小程序端

微信小程序端系统功能实现 登录功能 系统登录功能中&#xff0c;用户只需在登录界面输入正确的用户名和密码&#xff0c;即可快速进入系统。登录功能还采用了先进的加密技术&#xff0c;保障用户信息的安全性&#xff0c;让用户能够放心使用。 注册功能 系统注册功中&#xf…

js数据类型转换-----统一转成字符串String()

String&#xff08;&#xff09; 所有类型都可以转成字符串 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"…

告别无序 10款科研项目管理工具为您的科研之路加速

国内外主流的10 款科研单位科研项目管理系统对比&#xff1a;PingCode、Worktile、Wizard、ShowDoc、Asana、ClickUp、Notion、Wrike、Basecamp、智方科研管理系统。 在选择科研项目管理系统时&#xff0c;许多科研单位都面临着如何找到能够真正满足特定需求的系统这一挑战。市…

HALCON 深度学习异常检测实例

首先你需要下载软件&#xff0c;halcon 20的版本和 Deep Learning Tool 工具 注意了&#xff0c;下载的halcon 必须要专业版的电脑系统&#xff0c;win10或者win11 都可以但是版本必须是专业版的不能是家庭版的 详情可看我另一篇文章 halcon 深度学习软件工具安装以及用法…

《高等代数》行(列)和相等行列式

说明&#xff1a;此文章用于本人复习巩固&#xff0c;如果也能帮助到大家那就更加有意义了。 注&#xff1a;1&#xff09;行&#xff08;列&#xff09;和相等行列式的求解方法是将其于行都加到第一行&#xff08;列&#xff09;&#xff0c;然后再提取第一行 …

Xilinx系ZYNQ学习笔记(一)Vivado使用说明

系列文章目录 文章目录 系列文章目录前言启示界面介绍新建工程主界面RTL分析与描述设计与综合引脚分配约束设计实现比特流文件的下载固化程序 添加源文件 前言 最近买了块xilinx的FPGA进行学习 启示界面介绍 新建工程 主界面 鼠标放在选项上时会出现中文翻译 RTL分析与描述…

基于STM32心电模块学习笔记

一、项目简介 技术原理和优势:通过医疗电子单片机高级开发系统,读取人体生理参数监测系统发送过来的心率和心电导联信息数据包,并对这两个数据包进行解包,最后,将解包之后的心率值和心电导联信息显示在OLED显示屏上,如下图所示。该实验的数据源是人体生理参数监测系统,该…

牛牛替换(c语言)

1.//描述 //牛牛有一个长度为 n 的字符数组&#xff0c;他尝试把字符数组中其中一些字符替换成另一些字符。 //输入描述&#xff1a; //第一行输入一个正整数 n 表示字符数组的长度&#xff0c;四个个字符分别 a1 和 a2 &#xff0c; a3 和 a4&#xff0c; // 表示把字符数组中…

【Unity实战】Visual Studio Debug失败

Visual Studio&#xff0c;就像以前Eclipse在Java领域中的地位一样&#xff0c;至少在Jetbrains人人皆爱之前&#xff0c;它是主流。可能对于当下来说显得臃肿&#xff0c;而且没有Jetbrains智能准确的代码分析提示&#xff0c;但是依旧能用。而且开大工程来说&#xff0c;至少…

内存管理笔记

1、内存管理简介 在计算机系统中&#xff0c;变量、中间数据一般存放在系统存储空间中&#xff0c;只有在实际使用时才将它们从存储空间调入到中央处理器内部进行运算。通常存储空间可以分为两种&#xff1a;内部存储空间和外部存储空间。内部存储空间访问速度比较快&#xff…

【Redis】缓存(上)

为什么要使用缓存&#xff1f; 在日常开发中&#xff0c;通常使用Redis来做MySQL的缓存。究其原因&#xff0c;首先&#xff0c;根据二八定律&#xff0c;20%的数据可以应对80%的请求&#xff1b;其次&#xff0c;对于MySQL这样的关系型数据库来说&#xff0c;性能普遍都不是很…

复习:存储类别内存分配动态分配内存

目录 存储类别说明符 自动变量&#xff08;auto&#xff09; 寄存器变变量&#xff08;register&#xff09; 块作用域的静态变量&#xff08;static&#xff09; 外部链接的静态变量&#xff08;external&#xff09; 内存分配 概念回顾 动态分配内存 malloc函数 free函数 回…