当前位置: 首页 > article >正文

机器学习介绍与数据集

一、机器学习介绍与定义

1.1 机器学习定义

机器学习(Machine Learning)是让计算机从数据中自动学习规律,并依据这些规律对未来数据进行预测的技术。它涵盖聚类、分类、决策树、贝叶斯、神经网络、深度学习(Deep Learning)等多种算法 ,基本思路是模拟人类学习行为,通过经验归纳总结规律来预测未来。

1.2 机器学习的发展历史

机器学习的发展历程丰富且具有标志性:

  • 萌芽发展期(20 世纪 50 年代):图灵测试提出,塞缪尔开发西洋跳棋程序,标志着机器学习进入发展阶段。
  • 发展停滞期(20 世纪 60 - 70 年代):发展几乎停滞。
  • 复兴时期(20 世纪 80 年代):神经网络反向传播(BP)算法训练的多参数线性规划(MLP)理念提出,使机器学习复兴。
  • 数据驱动转变期(20 世纪 90 年代):“决策树”(ID3 算法)和支持向量机(SVM)算法出现,机器学习从知识驱动转变为数据驱动。
  • 蓬勃发展期(21 世纪初至今):Hinton 提出深度学习,随着算力提升和海量训练样本支持,深度学习成为研究热点并广泛应用。

1.3 机器学习分类

机器学习按学习模式可分为以下几类:

  • 监督学习(Supervised Learning):从有标签的训练数据中学习模型,用于预测新数据标签,主要用于回归和分类。如预测房价(回归)和判断邮件是否为垃圾邮件(分类)。常见算法包括线性回归、朴素贝叶斯等。
  • 半监督学习(Semi - Supervised Learning):利用少量标注数据和大量无标注数据学习,侧重于在有监督分类算法中加入无标记样本实现半监督分类。例如在图像分类中,利用少量标注图像和大量未标注图像训练模型。常见算法有 Pseudo - Label、Π - Model 等。
  • 无监督学习(Unsupervised Learning):从未标注数据中寻找隐含结构,主要用于关联分析、聚类和降维。比如对客户进行聚类分析,找出不同客户群体特征。常见算法有稀疏自编码、主成分分析等。
  • 强化学习(Reinforcement Learning):通过不断试错学习,有智能体和环境两个交互对象,以及策略、回报函数、价值函数和环境模型(可选)四个核心要素。常用于机器人避障、棋牌类游戏等。如 AlphaGo 通过强化学习在围棋领域取得卓越成绩。

1.4 机器学习需要具备的基础的知识,如何学习机器学习

学习机器学习需具备线性代数、微积分、概率和统计等数学知识,以及编程基础。学习建议如下:

  • 数学基础:掌握线性代数、概率论和统计学概念,理解算法原理。
  • 编程语言:熟练掌握 Python 或 R 语言,它们有丰富的机器学习库和工具。
  • 机器学习算法:了解常见算法原理、应用和优缺点。
  • 机器学习工具和框架:熟悉 scikit - learn、TensorFlow、PyTorch 等工具和框架。
  • 实践项目:通过小型项目提升实践能力,如利用鸢尾花数据集进行分类预测。
  • 学习资源:利用 Coursera、Kaggle、GitHub 等平台的学习资源。
  • 参与机器学习社区:与他人交流经验,参加线下活动。
  • 持续学习和实践:机器学习不断发展,需持续关注研究成果,参与竞赛和项目。

1.5 机器学习的应用场合

机器学习应用广泛,涵盖多个行业领域:

  • 自然语言处理(NLP):实现语音识别、文本分析、情感分析等,用于智能客服、聊天机器人等。如智能音箱通过语音识别和自然语言处理理解用户指令。
  • 医疗诊断与影像分析:分析医疗图像、预测疾病、辅助药物发现。例如利用深度学习模型诊断医学影像中的疾病。
  • 金融风险管理:分析金融数据,预测市场波动性、信用风险等。银行利用机器学习模型评估客户信用风险。
  • 预测与推荐系统:进行销售预测、个性化推荐。电商平台根据用户购买历史推荐商品。
  • 制造业和物联网:处理传感器数据,实现设备预测性维护和质量控制。工厂利用机器学习预测设备故障,提前维护。
  • 能源管理与环境保护:优化能源管理,提高能源利用效率。通过分析能源数据,制定节能策略。
  • 决策支持与智能分析:分析大量数据,辅助决策制定。企业利用机器学习分析市场数据,制定营销策略。
  • 图像识别与计算机视觉:实现图像分类、目标检测等。安防系统利用图像识别技术识别人员身份。

1.6 机器学习趋势分析

机器学习热点研究包括深度神经网络、强化学习、卷积神经网络、循环神经网络等。以深度神经网络、强化学习为代表的深度学习技术研究热度持续上升,是当前研究热点。

1.7 机器学习项目开发步骤

机器学习项目开发通常包含以下 5 个基本步骤:

  1. 收集数据:收集原始数据,数据种类、密度和数量越多,学习效果越好。如收集电商用户购买数据。
  2. 准备数据:确定数据质量,处理缺失数据和异常值,进行探索性分析。例如对收集的用户购买数据进行清洗和预处理。
  3. 训练模型:选择合适算法和数据表示形式,将清理后的数据分为训练集和测试集,用训练集开发模型。以房价预测为例,选择线性回归算法,用部分数据训练模型。
  4. 评估模型:使用测试集评估模型准确性,查看模型在未使用数据上的性能。如用测试集数据评估房价预测模型的准确性。
  5. 提高性能:选择不同模型或引入更多变量提高效率。若房价预测模型准确性不高,尝试其他算法或增加更多特征。

二、scikit - learn 工具介绍

2.1 Python 语言机器学习工具

scikit - learn 是 Python 语言的机器学习工具,包含许多智能的机器学习算法实现,文档完善,上手容易,拥有丰富的 API 接口函数。

2.2 官网及文档

  • 官网:https://scikit - learn.org/stable/#
  • 中文文档:sklearn
  • 中文社区:https://scikit - learn.org.cn/

2.3 scikit - learn 安装

使用 pip 安装:

收起

bash

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit - learn

2.4 Scikit - learn 包含的内容

scikit - learn 包含分类、回归、聚类、降维、模型选择、预处理等内容,为机器学习提供全面支持。

三、数据集(重点)

3.1 sklearn 玩具数据集介绍

数据量小,存储在 sklearn 库本地,安装 sklearn 后无需联网即可获取,如鸢尾花数据集。

3.2 sklearn 现实世界数据集介绍

数据量大,需通过网络获取,如 20 分类新闻数据集。

3.3 sklearn 加载玩具数据集

以鸢尾花数据集为例:

收起

python

from sklearn.datasets import load_iris
iris = load_iris()  # 加载鸢尾花数据集

鸢尾花数据集特征包括花萼长、花萼宽、花瓣长、花瓣宽,为三分类数据集(0 - Setosa 山鸢尾 、1 - versicolor 变色鸢尾 、2 - Virginica 维吉尼亚鸢尾)。iris 对象重要属性有:

收起

python

# data 特征
# feature_names 特征描述
# target  目标
# target_names  目标描述
# DESCR 数据集的描述
# filename 下载到本地保存后的文件名

使用 pandas 展示特征和目标:

收起

python

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris()
feature = iris.data
target = iris.target
target.shape = (len(target), 1)
data = np.hstack([feature, target])
cols = iris.feature_names
cols.append("target")
pd.DataFrame(data, columns=cols)

3.4 sklearn 获取现实世界数据集

以获取 20 分类新闻数据为例:

收起

python

from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(data_home=None, subset='all')

  • 参数说明
    • data_home:默认 None,下载路径为 “C:/Users/ADMIN/scikit_learn_data/20news - bydate_py3.pkz”;也可自定义路径。
    • subset:“train” 只下载训练集,“test” 只下载测试集,“all” 下载训练集和测试集。
    • return_X_y:默认 False;为 True 时,返回值为元组,包含特征数据集和目标数据集。
  • 返回值说明
    • return_X_y 为 False 时:返回 Bunch 对象,包含 data(特征数据集)、target(目标数据集)、target_names(目标描述)、filenames(新闻数据位置路径)。
    • return_X_y 为 True 时:返回元组,包含特征数据集和目标数据集。

3.5 本地 csv 数据

3.5.1 创建 csv 文件

  • 方式 1:使用记事本编写数据,数据间用英文逗号分隔,保存后将后缀名改为 csv。
  • 方式 2:创建 excel 文件填写数据,以 csv 为后缀保存。
3.5.2 pandas 加载 csv

收起

python

import pandas as pd
pd.read_csv("./src/ss.csv")

3.6 数据集的划分(重点)

3.6.1 函数

收起

python

sklearn.model_selection.train_test_split(*arrays,**options)

  • 参数
    • *array:接收 1 到多个 “列表、numpy 数组、稀疏矩阵或 padas 中的 DataFrame”。
    • **options
      • test_size:0.0 到 1.0 的小数,表示划分后测试集占比。
      • random_state:任意整数,作为随机种子,相同随机种子对相同数据集多次划分结果相同。
      • stratify:分层划分,填写 y。
  • 返回值说明:返回列表,长度与形参 array 接收的参数数量相关,对应划分出的两部分数据类型与 array 接收的类型相同。
3.6.2 示例

  • 列表数据集划分

收起

python

from sklearn.model_selection import train_test_split
data1 = [1, 2, 3, 4, 5]
data2 = ["1a", "2a", "3a", "4a", "5a"]
a, b = train_test_split(data1, test_size=0.4, random_state=22)
print(a, b)
a, b = train_test_split(data2, test_size=0.4, random_state=22)
print(a, b)
a, b, c, d = train_test_split(data1, data2, test_size=0.4, random_state=22)
print(a, b, c, d)

  • ndarray 数据集划分

收起

python

from sklearn.model_selection import train_test_split
import numpy as np
data1 = [1, 2, 3, 4, 5]
data2 = np.array(["1a", "2a", "3a", "4a", "5a"])
a, b, c, d = train_test_split(data1, data2, test_size=0.4, random_state=22)
print(a, b, c, d)
print(type(a), type(b), type(c), type(d))

  • 二维数组数据集划分

收起

python

from sklearn.model_selection import train_test_split
import numpy as np
data1 = np.arange(1, 16, 1)
data1.shape = (5, 3)
print(data1)
a, b = train_test_split(data1, test_size=0.4, random_state=22)
print("a=\n", a)
print("b=\n", b)

  • DataFrame 数据集划分

收起

python

from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
data1 = np.arange(1, 16, 1)
data1.shape = (5, 3)
data1 = pd.DataFrame(data1, index=[1, 2, 3, 4, 5], columns=["one", "two", "three"])
print(data1)
a, b = train_test_split(data1, test_size=0.4, random_state=22)
print("\n", a)
print("\n", b)

  • 字典数据集划分

收起

python

from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split
data = [{'city': '成都', 'age': 30, 'temperature': 20},
        {'city': '重庆', 'age': 33, 'temperature': 60},
        {'city': '北京', 'age': 42, 'temperature': 80},
        {'city': '上海', 'age': 22, 'temperature': 70},
        {'city': '成都', 'age': 72, 'temperature': 40},
        ]
transfer = DictVectorizer(sparse=True)
data_new = transfer.fit_transform(data)
a, b = train_test_split(data_new, test_size=0.4, random_state=22)
print(a)
print("\n", b)

  • 鸢尾花数据集划分

收起

python

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
list = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
x_train, x_test, y_train, y_test = list
print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)

  • 现实世界数据集划分

收起

python

from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
news = fetch_20newsgroups(data_home=None, subset='all')
list = train_test_split(news.data, news.target, test_size=0.2, random_state=22)
x_train, x_test, y_train, y_test = list
print(len(x_train), len(x_test), y_train.shape, y_test.shape)

http://www.kler.cn/a/562833.html

相关文章:

  • leetcode 1392. 最长快乐前缀
  • 力扣 3248. 矩阵中的蛇(Java实现)
  • Spring Boot中Bean Validation的实战应用
  • 几种AI模型在算法工作中的使用测评——Grok3,Deepseek,Chatgpt,Kimi,Claude(持续更新)
  • 【图像的读写与基本操作】
  • vscode java环境中文乱码的问题
  • 【华三】从零开始掌握SR技术:原理、架构与应用全解析
  • kotlin的lateinit声明 的变量可能为null吗?
  • prometheus+node_exporter+grafana监控K8S信息
  • 阿里云ack的创建与实战应用案例
  • sglang框架源码笔记
  • React面试(一)
  • Linux-IPC-消息队列
  • Magma:多模态 AI 智体的基础模型
  • 半导体制造工艺(二)光刻工艺—掩模版
  • C++ Primer 泛型算法定制操作
  • 【十二】Golang 映射
  • Buildroot 添加自定义模块-内置文件到文件系统
  • 飞腾腾锐D2000 + OpenHarmony 4.1release部署deepseek大模型
  • 大白话React 虚拟 DOM,好处在哪里?跟vue有什区别