人工智能中的机器学习和模型评价

文章目录

  • 1.监督学习
    • 1.1线性回归
    • 1.2KNN算法
    • 1.3支持向量机
  • 2.无监督学习
    • 2.1K-means聚类
    • 2.2FCA主成分分析

机器学习是人工智能的一个分支,它使计算机系统能够从数据中学习并做出决策,而无需进行明确的编程。它涉及到开发算法和技术,使计算机能够从数据中学习并做出预测或决策。

1.监督学习

监督学习是机器学习中的一种方法,它使用标记的训练数据来训练模型,以便模型能够预测或决定未知数据的输出。在监督学习中,每个训练样本都包含输入特征和一个相应的标签或结果。模型的目标是学习输入特征和输出标签之间的关系。

监督学习的主要步骤包括:

  1. 数据收集:收集包含输入特征和已知输出标签的数据。
  2. 数据预处理:清洗数据,处理缺失值,进行特征选择或提取。
  3. 选择模型:根据问题的性质选择合适的机器学习算法。
  4. 训练模型:使用训练数据集来训练模型,调整模型参数以最小化预测误差。
  5. 模型评估:使用测试数据集来评估模型的性能。
  6. 参数调优:根据模型评估的结果调整模型参数,以提高模型的准确性。
  7. 模型部署:将训练好的模型部署到生产环境中,用于实际预测。

监督学习的主要任务类型:

  1. 分类:预测离散标签,如垃圾邮件检测(垃圾邮件/非垃圾邮件)、疾病诊断(健康/患病)。
  2. 回归:预测连续值,如房价预测、股票价格预测。

常见的监督学习算法包括:

  • 线性回归:用于回归问题,预测连续值。
  • 逻辑回归:用于分类问题,预测离散标签。
  • 决策树:通过树状图结构进行决策,可以用于分类和回归。
  • 支持向量机(SVM):一种强大的分类算法,也可以用于回归。
  • 随机森林:集成多个决策树,提高模型的稳定性和准确性。
  • 神经网络:模仿人脑结构,可以处理复杂的非线性关系。
    下面介绍一下监督学习的主要算法:

1.1线性回归

线性回归是统计学中的一种方法,用于建模和分析两个变量之间的关系:一个因变量和一个或多个自变量。它的基本假设是变量间存在线性关系。

简单线性回归
在最简单的形式中,只有一个自变量和一个因变量,线性回归模型可以表示为: y=β0+β1x+ϵ其中:

  • y是因变量(响应变量)。
  • x是自变量(预测变量)。
  • β0是截距项。
  • β1是斜率,表示 xx 每变化一个单位,yy 预期的平均变化量。
  • ϵ 是误差项,表示模型无法解释的随机变异。

多元线性回归
当有多个自变量时,模型变为: y=β0+β1x1+β2x2+…+βnxn+ϵ其中 x1,x2,…,xnx1​,x2​,…,xn​ 是自变量。

线性回归的目的

  1. 预测:使用模型预测新的 yy 值。
  2. 关系解释:理解自变量对因变量的影响。

线性回归的步骤

  1. 数据收集:收集相关数据。
  2. 数据探索:分析数据分布和变量之间的关系。
  3. 模型建立:选择合适的线性模型。
  4. 参数估计:使用最小二乘法等技术估计模型参数。
  5. 模型评估:使用 R2R2、均方误差(MSE)等指标评估模型。
  6. 模型诊断:检查模型假设是否得到满足,如线性、独立性、同方差性和正态性。
  7. 预测:使用模型进行预测。

线性回归的限制

  • 非线性关系:如果数据中的变量关系是非线性的,线性回归可能不适用。
  • 多重共线性:如果自变量之间高度相关,可能会影响模型的稳定性和准确性。
  • 异常值:异常值可能会对模型的预测能力产生负面影响。
    尽管有这些限制,线性回归由于其简单性和直观性,在实际应用中仍然非常流行。

线性回归的代码

import numpy as np  
import matplotlib.pyplot as plt  plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体为黑体  
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题  # 示例数据集  
x = np.array([1, 2, 3, 4, 5,6,8,6,7])  
y = np.array([2, 4, 5, 4, 5,7,6,4,2])  # 计算均值  
x_mean = np.mean(x)  
y_mean = np.mean(y)  # 计算斜率和截距  
numerator = np.sum((x - x_mean) * (y - y_mean))  
denominator = np.sum((x - x_mean) ** 2)  
slope = numerator / denominator  
intercept = y_mean - slope * x_mean  # 打印回归方程  
print(f"回归方程: y = {slope:.2f}x + {intercept:.2f}")  # 绘制数据点和回归直线  
plt.scatter(x, y, color='blue', label='数据点')  
plt.plot(x, slope * x + intercept, color='red', label='回归直线')  
plt.xlabel('x')  
plt.ylabel('y')  
plt.title('一元线性回归')  
plt.legend()  
plt.grid(True)  
plt.show()

在这里插入图片描述

1.2KNN算法

K-最近邻(K-Nearest Neighbors,简称KNN)算法是一种基本的分类与回归方法。它的核心思想是从训练集中找到与目标点最近的K个训练样本,然后基于这些“最近邻居”的信息来预测目标点的标签。

KNN算法的关键点

  • 距离度量:KNN算法通常使用欧氏距离来计算样本之间的距离,但也可以采用曼哈顿距离、明可夫斯基距离等。
  • K值的选择:K值的选择对模型的性能有很大影响。K值较小会使模型对训练数据的噪声更敏感,而K值较大则可能导致模型过于平滑,无法捕捉数据的细节。
  • 数据预处理:在应用KNN算法之前,通常需要进行特征缩放,以确保每个特征对距离计算的贡献是均等的。
  • 维度的诅咒:随着特征数量的增加,KNN算法的性能可能会下降,因为高维空间中的距离度量变得不太有效。

如何计算两个样本之间的距离
欧氏距离是衡量多维空间中两点之间距离的最常见的方法之一。在二维空间中,两点 (x1,y1)(x1​,y1​) 和 (x2,y2)(x2​,y2​) 之间的欧氏距离 dd 可以通过勾股定理来计算:
d=(x2−x1)2+(y2−y1)2d=(x2​−x1​)2+(y2​−y1​)2​
在更高维空间中,欧氏距离的计算公式可以推广为:
d=∑i=1n(xi−yi)2d=∑i=1n​(xi​−yi​)2​
其中 nn 是维度的数量,xixi​ 和 yiyi​ 分别是两个点在第 ii 维度上的坐标值。

计算步骤

  1. 对于每一维,计算两点的差值。
  2. 将每个差值平方。
  3. 将所有的平方差值相加。
  4. 对结果取平方根。

KNN算法的代码

import matplotlib.pyplot as plt  
from sklearn import datasets  
from sklearn.model_selection import train_test_split  
from sklearn.neighbors import KNeighborsClassifier  
from sklearn.preprocessing import StandardScaler  # 加载数据集  
iris = datasets.load_iris()  
X = iris.data  
y = iris.target  # 为了简化问题,我们只使用两个特征  
X = X[:, :2]  # 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 特征缩放  
scaler = StandardScaler()  
X_train = scaler.fit_transform(X_train)  
X_test = scaler.transform(X_test)  # 创建KNN模型,设置K=3  
knn = KNeighborsClassifier(n_neighbors=3)  # 训练模型  
knn.fit(X_train, y_train)  # 进行预测  
y_pred = knn.predict(X_test)  # 可视化  
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=plt.cm.Set1, edgecolor='k', s=40)  
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, cmap=plt.cm.Set1, edgecolor='k', marker='*', s=100)  
plt.title('KNN Classification')  
plt.xlabel('Sepal Length')  
plt.ylabel('Sepal Width')  
plt.legend()  
plt.show()

在这里插入图片描述

1.3支持向量机

支持向量机(Support Vector Machine,简称SVM)是一种监督学习算法,主要用于分类问题,也可以用于回归问题。SVM的核心思想是在特征空间中寻找一个最优的超平面,以此来区分不同的类别。
以下是SVM的一些关键概念:

  1. 超平面:在N维空间中,超平面是一个N-1维的子空间,用于将数据分割成不同的类别。
  2. 支持向量:支持向量是距离超平面最近的那些数据点,它们是定义超平面的关键。
  3. 间隔:超平面到最近的数据点(支持向量)的距离称为间隔。SVM的目标是最大化这个间隔,以提高分类的泛化能力。
  4. 核技巧:SVM可以通过核函数将数据映射到高维空间,以解决线性不可分的问题。
  5. 软间隔和正则化:为了处理数据中的噪声和重叠部分,SVM引入了软间隔的概念,允许一些数据点违反间隔规则。正则化参数C用于控制间隔的宽度和分类错误的权衡。
  6. 优化问题:SVM的训练过程是一个凸优化问题,通常通过拉格朗日乘子法和对偶问题来求解。

SVM在许多领域都有应用,包括图像识别、文本分类、生物信息学等。它的一个优点是即使在高维空间中也能表现得很好,但缺点是参数选择(如正则化参数C和核函数的参数)对模型性能有较大影响,且对于大规模数据集,训练过程可能会比较慢。

SVM的python代码实现

import numpy as np  
import matplotlib.pyplot as plt  
from sklearn import svm  
from sklearn.datasets import make_blobs  # 生成模拟数据  
X, y = make_blobs(n_samples=100, centers=2, random_state=6)  # 创建SVM分类器,使用RBF核  
clf = svm.SVC(kernel='rbf', gamma='scale')  # 训练SVM分类器  
clf.fit(X, y)  # 获取支持向量  
support_vectors = clf.support_vectors_  # 绘制数据点  
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)  # 绘制支持向量  
plt.scatter(support_vectors[:, 0], support_vectors[:, 1], c='k', marker='x', s=100, linewidths=2)  # 绘制决策边界  
ax = plt.gca()  
xlim = ax.get_xlim()  
ylim = ax.get_ylim()  # 创建网格来评估模型  
xx = np.linspace(xlim[0], xlim[1], 30)  
yy = np.linspace(ylim[0], ylim[1], 30)  
YY, XX = np.meshgrid(yy, xx)  
xy = np.vstack([XX.ravel(), YY.ravel()]).T  
Z = clf.decision_function(xy).reshape(XX.shape)  # 绘制决策边界和边界  
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,  linestyles=['--', '-', '--'])  # 绘制间隔  
ax.fill_between(xlim, -1, 1, alpha=0.5, color='k')  # 显示图形  
plt.xlabel('Feature 1')  
plt.ylabel('Feature 2')  
plt.title('SVM with RBF kernel')  
plt.show()

在这里插入图片描述

2.无监督学习

无监督学习是机器学习中的一种方法,它与监督学习相对。在无监督学习中,模型试图从数据中发现模式或结构,而不需要任何先前标记的训练数据。无监督学习通常用于聚类、关联规则学习和降维等任务。
以下是无监督学习的一些常见应用:

  1. 聚类:将数据点分组,使得同一组内的数据点之间相似度较高,而不同组之间的数据点相似度较低。常见的聚类算法包括K-means、层次聚类、DBSCAN等。
  2. 关联规则学习:在大规模数据集中寻找变量之间的有趣关系。例如,在市场篮子分析中,找出顾客购买某些商品时也倾向于购买其他商品的模式。
  3. 异常检测:识别数据集中的异常或不寻常的数据点。这在信用卡欺诈检测、网络安全等领域非常有用。
  4. 降维:减少数据的维度,同时尽可能保留原始数据的重要信息。常见的降维技术包括主成分分析(PCA)、线性判别分析(LDA)和t-SNE。
  5. 密度估计:估计输入数据的概率分布。
  6. 生成模型:学习数据的生成过程,以便能够生成新的数据实例。例如,自编码器和生成对抗网络(GANs)。
    无监督学习的一个挑战是评估模型的性能,因为缺乏明确的“正确答案”。通常,需要使用不同的标准或启发式方法来评估无监督学习算法的效果。

2.1K-means聚类

K-means聚类是一种非常流行的无监督学习算法,用于将数据点分成K个簇。算法的目标是使簇内的方差尽可能小,簇间的方差尽可能大。
以下是K-means算法的基本步骤:

  1. 初始化:随机选择K个数据点作为初始的簇中心(称为质心)。
  2. 分配:将每个数据点分配给最近的质心,形成K个簇。
  3. 更新:重新计算每个簇的质心,通常是簇内所有点的均值。
  4. 迭代:重复分配和更新步骤,直到满足某个终止条件(例如,达到最大迭代次数,或质心的变化小于某个阈值)。
  5. 输出:最终的簇和对应的质心。

K-means算法的关键在于如何选择初始质心,以及如何确定簇内数据点的分配。以下是K-means算法的一些关键点:

  • 优点
    • 算法简单,易于实现。
    • 计算效率高,适合处理大型数据集。
    • 可以用于任何维度的数据。
  • 缺点
    • 需要预先指定簇的数量K。
    • 对初始质心的选择敏感,可能导致局部最优解。
    • 对离群点敏感,离群点可能会对质心的计算产生较大影响。
    • 假设簇是凸形的,这在某些情况下可能不适用。

K-means聚类的python代码

import numpy as np  
import matplotlib.pyplot as plt  
from sklearn.cluster import KMeans  
from sklearn.datasets import make_blobs  # 生成模拟数据  
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)  # 创建KMeans实例,设置簇的数量为4  
kmeans = KMeans(n_clusters=4)  # 训练模型  
kmeans.fit(X)  # 预测簇标签  
y_kmeans = kmeans.predict(X)  # 绘制数据点  
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')  # 绘制质心  
centers = kmeans.cluster_centers_  
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='X')  plt.title("K-means Clustering")  
plt.xlabel("Feature 1")  
plt.ylabel("Feature 2")  
plt.show()

在这里插入图片描述

2.2FCA主成分分析

FCA主成分分析可能是指函数型数据主成分分析(Functional Principal Components Analysis),这在处理函数型数据时非常有用。函数型数据是指那些在连续或离散的区间上取值的数据,例如时间序列、信号处理、经济学和金融学中的股价数据等。
函数型主成分分析(FPCA)是一种统计方法,用于提取函数型数据集中的主要特征。它类似于传统的主成分分析(PCA),但是专门用于分析函数型数据。FPCA的目标是将函数型数据降维到一个低维空间的同时尽可能保留原始数据的信息。
FPCA的基本步骤包括:

  1. 数据预处理:这可能包括去除噪声、标准化等步骤。
  2. 定义内积和范数:在函数空间中,需要定义函数之间的内积和范数,以便进行数学运算。
  3. 协方差运算算子:计算函数型数据的协方差运算算子,这通常涉及到积分运算。
  4. 求解特征值和特征函数:通过求解协方差运算算子的特征值和对应的特征函数,找到主成分。
  5. 降维:选择前几个最大的特征值对应的特征函数作为新的基函数,将原始函数型数据投影到这些基函数上,实现降维。
    FPCA在许多领域都有应用,例如在金融领域可以用来分析股票价格的波动模式,在生物医学领域可以用来分析基因表达数据。
    在实际应用中,FPCA可以帮助我们理解数据的主要变化趋势,减少数据的复杂性,并且提高数据分析的效率。通过FPCA,我们可以提取出最重要的信息,并且过滤掉一些不重要的噪声。

FCA的python代码

import numpy as np  
import matplotlib.pyplot as plt  
from sklearn.decomposition import PCA  # 生成模拟的函数型数据  
np.random.seed(0)  
t = np.linspace(0, 2 * np.pi, 100)  
data = np.random.normal(size=(50, len(t)))  # 定义函数型数据生成函数  
def generate_func_data(t, params):  return np.sin(t * params[0] + params[1]) + np.cos(t * params[2] + params[3])  # 生成50个函数型数据点  
for i in range(data.shape[0]):  params = np.random.uniform(-1, 1, size=4)  data[i, :] = generate_func_data(t, params)  # 将数据转换为2D数组,形状为(samples, time_points)  
data = data.T  # 应用FPCA  
pca = PCA(n_components=2)  
pca.fit(data)  # 获取主成分得分  
components = pca.transform(data)  # 可视化结果  
plt.figure(figsize=(10, 6))  # 绘制原始数据  
plt.subplot(1, 2, 1)  
for i in range(data.shape[1]):  plt.plot(t, data[:, i], 'b-', alpha=0.5)  
plt.title('Original Functional Data')  
plt.xlabel('Time')  
plt.ylabel('Amplitude')  # 绘制降维后的数据  
plt.subplot(1, 2, 2)  
plt.scatter(components[:, 0], components[:, 1], alpha=0.5)  
plt.title('FPCA Components')  
plt.xlabel('Component 1')  
plt.ylabel('Component 2')  plt.tight_layout()  
plt.show()

在这里插入图片描述

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

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

相关文章

HomeAssistant自定义组件学习-【二】

#要说的话# 前面把中盛科技的控制器组件写完了。稍稍熟悉了一些HA,现在准备写窗帘控制组件,构想的东西会比较多,估计有些难度,过程会比较长,边写边记录吧! #设备和场景环境# 使用的是Novo的电机&#xf…

Docker Swarm简介

注意事项 Swarm 模式是用于管理 Docker 守护进程集群的一项高级特性。如果你打算将 Swarm 用作生产运行时环境,那就使用 Swarm 模式。如果你不打算使用 Swarm 进行部署,可改用 Docker Compose。如果正在为 Kubernetes 部署进行开发,可以考虑使…

JVM 运行时数据区

JVM整体架构 可以分为三层: 1 JVM外部,从源文件到Class文件,再装载到JVM 2 JVM运行时数据区,相当于就是避风港、运行的大后方。给执行程序提供后勤。 3 执行引擎层。和运行时数据区交互,完成执行任务。 运行时数据…

新加坡托管服务器VS香港托管服务器:AI时代的选择策略

在人工智能迅速发展的今天,服务器作为数据存储与计算的核心基础设施,其性能、稳定性和地理位置对于用户体验和业务效率至关重要。对于中国用户而言,在选择服务器时,新加坡服务器和香港服务器无疑是两个极具吸引力的选项。两者同属…

DAYWEB69 攻防-Java 安全JWT 攻防Swagger 自动化算法签名密匙Druid 泄漏

知识点 1、Java安全-Druid监控-未授权访问&信息泄漏 2、Java安全-Swagger接口-文档导入&联动批量测试 2、Java安全-JWT令牌攻防-空算法&未签名&密匙提取 Java安全-Druid监控-未授权访问&信息泄漏 Druid是阿里巴巴数据库事业部出品,为监控而…

vscode使用技巧

vscode如果要用来写不同的语言,可以通过创建的工作区,然后创建不同的快捷方式以便打开它 注:C/C 退回到1.8.4,为了生成可以配置的文件 1.创建工作区 将工作区另存为 -> 选择你要写的文件夹的根目录 -> Save 2.归纳可执行…

Android 托管 Github Action 发布 Github Packages ,实现 Mvn 免费自动化托管

自从多年前 JCenter 关闭服务之后,GSY 项目版本就一直发布在 Jitpack 上,如今每个月也都有大概 10w 左右下载,但是近年来时不时就会出现历史版本丢失的问题,而且有时候还不是某个具体版本丢失,而是版本里的某几个依赖突…

记录一次企业外部通过ssh 连接数据库的事DBeaver

情况大概是这样,公司算法供应商开通了连接某个服务器A的权限,但是数据库x是在另一台服务器B上。 直接通过外部连接数据库是不行的,需要借用服务器A来进行访问x 使用软件:DBeaver, 数据库x类型:oracle 需要的信息&am…

Java爬虫的京东“寻宝记”:揭秘商品类目信息

开篇:Java特工的神秘任务 在这个数据驱动的时代,我们就像一群特工,穿梭在数字的海洋中,寻找着隐藏的宝藏——商品类目信息。今天,我们将带领你一起,用Java这把精密的瑞士军刀,深入京东的神秘领…

Linux——— 信号

文章目录 前言:引入信号生活中的例子信号概念见一见Linux中的信号 浅度理解信号信号处理(浅谈):如何自定义捕捉 信号保存(浅谈) 信号产生系统调用产生异常产生:浅谈除0异常浅谈解引用野指针异常Core &&…

Java面试经典 150 题.P169. 多数元素(005)

本题来自:力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解: class Solution {public int majorityElement(int[] nums) …

antdesignvue + AWS-S3实现Minio大文件分片上传

一、后端&#xff1a; 1.引入pom <dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-s3</artifactId><version>1.12.263</version></dependency> 2.配置application.yml jeecg:minio:minioUrl: http…

维修日常-卷帘门电子遥控钥匙接触不良的维修日志

前段时间&#xff0c;单位领导扔来一个卷帘门遥控钥匙给我&#xff0c;说是接触不良&#xff0c;让我看看什么情况&#xff1f;如下图所示&#xff1a; 测试后发现按住这个钥匙按键时&#xff0c;红灯不能一直亮&#xff0c;所以只能打开看看&#xff0c;如下图&#xff1a; 可…

1999-2023年上市公司持续绿色创新数据

1999-2023年上市公司持续绿色创新数据 1、时间&#xff1a;1999-2023年 2、来源&#xff1a;国家知识产权局 3、指标&#xff1a;年份、股票代码、股票简称、行业名称、行业代码、省份、城市、区县、首次上市年份、上市状态、绿色专利申请总量、绿色发明专利申请数量、绿色实…

Golang | Leetcode Golang题解之第526题优美的排列

题目&#xff1a; 题解&#xff1a; func countArrangement(n int) int {f : make([]int, 1<<n)f[0] 1for mask : 1; mask < 1<<n; mask {num : bits.OnesCount(uint(mask))for i : 0; i < n; i {if mask>>i&1 > 0 && (num%(i1) 0 |…

20221428欧阳慕蓉 密码算法的实现2-2

1.在Ubuntu或openEuler中&#xff08;推荐openEuler&#xff09;中调试运行教材提供的源代码&#xff0c;至少运行SM2&#xff0c;SM3&#xff0c;SM4代码&#xff0c;使用GmSSL命令验证你代码的正确性&#xff0c;使用Markdown记录详细记录实践过程&#xff0c;每完成一项功能…

PostgreSQL的学习心得和知识总结(一百五十七)|新的 COPY 选项 LOG_VERBOSITY

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

什么是 OpenTelemetry?

OpenTelemetry 定义 OpenTelemetry (OTel) 是一个开源可观测性框架&#xff0c;允许开发团队以单一、统一的格式生成、处理和传输遥测数据&#xff08;telemetry data&#xff09;。它由云原生计算基金会 (CNCF) 开发&#xff0c;旨在提供标准化协议和工具&#xff0c;用于收集…

MS01SF1 精准测距UWB模组助力露天采矿中的人车定位安全和作业效率提升

在当今矿业行业&#xff0c;随着全球对资源需求的不断增加和开采难度的逐步提升&#xff0c;传统的作业方式面临着越来越多的挑战。露天矿山开采&#xff0c;因其大规模的作业环境和复杂的地形特点&#xff0c;面临着作业人员的安全风险、设备调度的高难度以及资源利用率低下等…