青少年编程与数学 02-018 C++数据结构与算法 21课题、机器学习与人工智能算法

青少年编程与数学 02-018 C++数据结构与算法 21课题、机器学习与人工智能算法

  • 一、线性回归算法
  • 二、逻辑回归算法
  • 三、K近邻算法(K-Nearest Neighbors, KNN)
  • 四、决策树算法
  • 五、支持向量机(SVM)
  • 六、神经网络算法
  • 七、聚类算法
  • 八、降维算法
      • 主成分分析(PCA)
  • 九、总结

课题摘要
机器学习和人工智能是计算机科学中非常活跃的领域,涵盖了从简单的数据拟合到复杂的智能系统设计的各种算法。


一、线性回归算法

线性回归是一种预测连续值的监督学习算法,用于拟合数据点之间的线性关系。

线性回归的目标是找到一个线性函数,使得预测值与真实值之间的误差最小。通常使用最小二乘法来求解。

示例代码

#include <iostream>
#include <vector>
#include <Eigen/Dense> // 使用Eigen库进行矩阵运算using namespace std;
using namespace Eigen;VectorXd linear_regression(const MatrixXd& X, const VectorXd& y) {// 添加偏置项MatrixXd X_b = MatrixXd::Ones(X.rows(), 1);X_b.rightCols(X.cols()) = X;// 计算参数VectorXd theta = (X_b.transpose() * X_b).inverse() * X_b.transpose() * y;return theta;
}int main() {// 示例数据MatrixXd X(5, 1);X << 1, 2, 3, 4, 5;VectorXd y(5);y << 2, 4, 6, 8, 10;VectorXd theta = linear_regression(X, y);cout << "参数: " << endl << theta << endl;return 0;
}

二、逻辑回归算法

逻辑回归是一种分类算法,用于预测离散值。它通过Sigmoid函数将线性回归的输出映射到0和1之间。

逻辑回归的目标是找到一个Sigmoid函数,使得预测值与真实值之间的误差最小。通常使用梯度下降法来求解。

示例代码

#include <iostream>
#include <vector>
#include <Eigen/Dense>
#include <cmath>using namespace std;
using namespace Eigen;VectorXd sigmoid(const VectorXd& z) {VectorXd result = z.unaryExpr([](double x) { return 1.0 / (1.0 + exp(-x)); });return result;
}VectorXd logistic_regression(const MatrixXd& X, const VectorXd& y, double learning_rate = 0.01, int num_iterations = 1000) {int m = X.rows();int n = X.cols();VectorXd theta(n);theta.setZero();for (int i = 0; i < num_iterations; ++i) {VectorXd z = X * theta;VectorXd h = sigmoid(z);VectorXd gradient = X.transpose() * (h - y) / m;theta -= learning_rate * gradient;}return theta;
}int main() {// 示例数据MatrixXd X(4, 2);X << 1, 2, 2, 3, 3, 4, 4, 5;VectorXd y(4);y << 0, 0, 1, 1;VectorXd theta = logistic_regression(X, y);cout << "参数: " << endl << theta << endl;return 0;
}

三、K近邻算法(K-Nearest Neighbors, KNN)

K近邻算法是一种简单的分类和回归算法,它通过找到最近的K个邻居来预测新数据点的类别或值。

K近邻算法的目标是找到与新数据点最近的K个数据点,并根据这些邻居的类别或值来预测新数据点的类别或值。

示例代码

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <unordered_map>using namespace std;int knn(const vector<vector<double>>& X_train, const vector<int>& y_train, const vector<double>& X_test, int k = 3) {vector<pair<double, int>> distances;for (size_t i = 0; i < X_train.size(); ++i) {double distance = 0.0;for (size_t j = 0; j < X_train[i].size(); ++j) {distance += pow(X_train[i][j] - X_test[j], 2);}distance = sqrt(distance);distances.push_back({distance, y_train[i]});}sort(distances.begin(), distances.end());unordered_map<int, int> label_count;for (int i = 0; i < k; ++i) {++label_count[distances[i].second];}int most_common_label = -1;int max_count = 0;for (const auto& pair : label_count) {if (pair.second > max_count) {max_count = pair.second;most_common_label = pair.first;}}return most_common_label;
}int main() {// 示例数据vector<vector<double>> X_train = {{1, 2}, {2, 3}, {3, 4}, {4, 5}};vector<int> y_train = {0, 0, 1, 1};vector<double> X_test = {2.5, 3.5};int prediction = knn(X_train, y_train, X_test);cout << "预测类别: " << prediction << endl;return 0;
}

四、决策树算法

决策树是一种基于树结构的分类和回归算法,它通过一系列的决策规则来预测新数据点的类别或值。

决策树的目标是通过分裂数据集来构建一棵树,使得每个叶子节点代表一个类别或值。常用的分裂标准包括信息增益和基尼不纯度。

示例代码

// C++中使用决策树算法通常需要借助一些库,如mlpack等,这里仅给出一个简单的框架示意#include <iostream>
#include <vector>
#include <mlpack/core.hpp>
#include <mlpack/methods/decision_tree/decision_tree.hpp>using namespace std;
using namespace mlpack;int main() {// 示例数据arma::mat X = {{1, 2}, {2, 3}, {3, 4}, {4, 5}};arma::Row<size_t> y = {0, 0, 1, 1};// 构建决策树模型tree::DecisionTree<> clf(X, y, 2);// 预测新数据点arma::mat X_test = {{2.5, 3.5}};size_t prediction = clf.Classify(X_test);cout << "预测类别: " << prediction << endl;return 0;
}

五、支持向量机(SVM)

支持向量机是一种强大的分类算法,它通过找到一个最优超平面来分割不同类别的数据点。

支持向量机的目标是找到一个超平面,使得不同类别的数据点之间的间隔最大。常用的核函数包括线性核、多项式核和径向基核。

示例代码

#include <iostream>
#include <vector>
#include <mlpack/core.hpp>
#include <mlpack/methods/svm/svm.hpp>using namespace std;
using namespace mlpack;int main() {// 示例数据arma::mat X = {{1, 2}, {2, 3}, {3, 4}, {4, 5}};arma::Row<size_t> y = {0, 0, 1, 1};// 构建SVM模型svm::SVM<kernel::LinearKernel> clf;clf.Train(X, y);// 预测新数据点arma::mat X_test = {{2.5, 3.5}};size_t prediction = clf.Classify(X_test);cout << "预测类别: " << prediction << endl;return 0;
}

六、神经网络算法

神经网络是一种模拟人脑神经元的计算模型,它通过多层的神经元来学习数据中的复杂模式。

神经网络的目标是通过训练数据来调整神经元之间的权重,使得网络的输出与真实值之间的误差最小。常用的训练算法包括反向传播和梯度下降。

示例代码

#include <iostream>
#include <vector>
#include <mlpack/core.hpp>
#include <mlpack/methods/ann/ann.hpp>using namespace std;
using namespace mlpack;int main() {// 示例数据arma::mat X = {{1, 2}, {2, 3}, {3, 4}, {4, 5}};arma::Row<size_t> y = {0, 0, 1, 1};// 构建神经网络模型ann::FFN<ann::MeanSquaredError<>, ann::RandomInitialization> clf;clf.Add<ann::Linear<>>(2, 5);clf.Add<ann::LogisticSigmoid<>>();clf.Add<ann::Linear<>>(5, 1);clf.Add<ann::LogisticSigmoid<>>();clf.Train(X, y);// 预测新数据点arma::mat X_test = {{2.5, 3.5}};arma::mat prediction;clf.Classify(X_test, prediction);cout << "预测类别: " << prediction(0) << endl;return 0;
}

七、聚类算法

聚类算法是一种无监督学习算法,它将数据点分组成多个簇,使得同一簇内的数据点相似度高,不同簇内的数据点相似度低。

K均值聚类算法的目标是将数据点分成K个簇,使得每个簇内的数据点到簇中心的距离最小。

示例代码

#include <iostream>
#include <vector>
#include <mlpack/core.hpp>
#include <mlpack/methods/kmeans/kmeans.hpp>using namespace std;
using namespace mlpack;int main() {// 示例数据arma::mat X = {{1, 2}, {2, 3}, {3, 4}, {4, 5}, {5, 6}};// 构建K均值聚类模型size_t k = 2;arma::Row<size_t> assignments;mlpack::kmeans::KMeans<> kmeans(X, k);kmeans.Cluster(assignments);cout << "簇标签: " << assignments.t() << endl;return 0;
}

八、降维算法

降维算法是一种用于减少数据特征维度的算法,它通过提取数据中的主要特征来降低计算复杂度。

主成分分析(PCA)

主成分分析是一种常用的降维算法,它通过线性变换将数据投影到新的坐标系中,使得数据的方差最大化。

示例代码

#include <iostream>
#include <vector>
#include <mlpack/core.hpp>
#include <mlpack/methods/pca/pca.hpp>using namespace std;
using namespace mlpack;int main() {// 示例数据arma::mat X = {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}, {4, 5, 6}};// 构建PCA模型mlpack::pca::PCA<> pca(X);arma::mat X_pca;pca.Apply(X, X_pca);cout << "降维后的数据: " << endl << X_pca << endl;return 0;
}

九、总结

机器学习和人工智能算法在数据分析、图像识别、自然语言处理等领域都有广泛的应用。这些算法包括线性回归、逻辑回归、K近邻、决策树、支持向量机、神经网络、聚类和降维等。在实际应用中,需要根据具体问题选择合适的算法,并注意算法的效率和正确性。

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

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

相关文章

【数据结构】——单链表练习(1)

一、移除链表元素 题目链接&#xff1a; 移除链表元素 那么根据题目的要求我们大致明白这道题要做什么&#xff0c;就是将一个链表中&#xff0c;和指定的值相等的元素的节点删除&#xff0c;然后返回删除后的新的链表&#xff0c;然后题目给我们传入的参数是链表的头节点和指…

AI大模型基础设施:主流的几款开源AI大语言模型的本地部署成本

以下是对目前主流开源AI大语言模型&#xff08;如DeepSeek R1、LLaMA系列、Qwen等&#xff09;本地部署成本的详细分析&#xff0c;涵盖计算机硬件、显卡等成本&#xff0c;价格以美元计算。成本估算基于模型参数规模、硬件需求&#xff08;GPU、CPU、RAM、存储等&#xff09;以…

AI生成视频检测方法及其相关研究

目录标题 【1】AI-Generated Video Detection via Spatio-Temporal Anomaly Learning【2】DeCoF: Generated Video Detection via Frame Consistency【2.1】Spatiotemporal Convolutional Neural Networks (STCNN) rely on spatial artifacts【2.2】Capturing Universal Spatia…

仿腾讯会议——服务器注释

目录 1、修改协议 2、修改登录请求结构体 3、修改登录回复结构体 4、修改注册请求结构体 5、修改发送登录请求函数 6、实现发送注册请求函数 7、修改mysql存储数据格式 8、自己完成部分 1、修改协议 2、修改登录请求结构体 3、修改登录回复结构体 4、修改注册请求结构体…

list的迭代器详讲

1.list的迭代器就是封装了节点指针的类 2.迭代器失效 迭代器失效即迭代器封装的节点指针无效 。因为 list 的底层结构为带头结点的双向循环链表 &#xff0c;因此 在 list 中进行插入时是不会导致 list 的迭代 器失效的&#xff0c;只有在删除时才会失效&#xff0c;并且失效的…

deepSeek论文写作提示词指令大全(覆盖选题、写作、润色到投稿全流程)

一、选题与框架设计 1、跨学科选题突破 指令:"结合[领域A]与[领域B]的前沿理论,生成5个交叉创新性论文选题,要求每个选题包含可行性评估。"(支持跨学科研究创新) 示例:"在人工智能与教育心理学领域生成选题,分析理论适用性与资源获取难度。" 2、…

win11安装WSL(创建用户、更改或重置密码)

文章目录 win11安装WSL设置 Linux 用户名和密码更改或重置密码更新和升级软件包WSL 命令互操作性WSL 的基本命令安装列出可用的 Linux 发行版列出已安装的 Linux 发行版将 WSL 版本设置为 1 或 2设置默认 WSL 版本设置默认 Linux 发行版将目录更改为主页通过 PowerShell 或 CMD…

Vue.js 与 Ajax (vue-resource) 的深入解析

Vue.js 与 Ajax (vue-resource) 的深入解析 引言 在Web开发中,前后端的交互是不可或缺的。Ajax(异步JavaScript和XML)技术允许我们在不重新加载整个页面的情况下,与服务器交换数据和更新部分网页内容。Vue.js 作为一种流行的前端框架,提供了多种方式来处理Ajax请求。其中…

第十三章-PHP MySQL扩展

第十三章-PHP与MySQL 一&#xff0c;连接数据库 1. 使用 MySQLi&#xff08;面向对象方式&#xff09; <?php // 数据库参数 $host localhost; $username root; $password ; $database test_db;// 创建连接 $conn new mysqli($host, $username, $password, $databa…

【文献阅读】全球干旱地区植被突变的普遍性和驱动因素

一、研究背景 全球干旱区&#xff08;drylands&#xff09;覆盖了陆地面积的40%以上&#xff0c;承载了全球约三分之一人口&#xff0c;是生态系统脆弱性较高的区域。这些地区对气候变化和人类干扰尤其敏感。近年来&#xff0c;干旱区发生了大量植被突变现象&#xff0c;即生态…

【Vue3-Bug】中路由加载页面直接显示空白

Vue3中路由加载页面直接显示空白 没有子路由 路由定义不能重复&#xff0c;请自己查看数据在main.js(或者)mina.ts入口文件中&#xff0c;需要将router的注入到vue中的执行放在&#xff0c;vue挂在元素之前 // 顺序不能变 app.use(router) app.mount(#app)在App.vue中 // 在…

影楼精修-露齿笑算法解析

注意&#xff0c;为避免侵权&#xff0c;本文图片均为AIGC生成或网络公开数据&#xff1b; 像素蛋糕-露齿笑 在介绍本文之前&#xff0c;先说一下&#xff0c;其实露齿笑特效&#xff0c;并非像素蛋糕首创&#xff0c;早在几年前&#xff0c;face app就率先推出了这个效果&am…

关于Python:7. Python数据库操作

一、sqlite3&#xff08;轻量级本地数据库&#xff09; sqlite3 是 Python 内置的模块&#xff0c;用于操作 SQLite 数据库。 SQLite 是一个轻量级、零配置的关系型数据库系统&#xff0c;整个数据库保存在一个文件中&#xff0c;适合小型项目和本地存储。 SQLite 不需要安装…

c++互斥锁,竞争状态与临界区

竞争状态与临界区 1&#xff0c;基本互斥锁2&#xff0c;try_lock3&#xff0c;互斥锁存在的坑—线程抢占不到资源4&#xff0c;超时锁5&#xff0c;递归锁&#xff08;在一个线程内可以多次lock的锁&#xff09;recursive_mutex和recursive_timed_mutex用于业务组合6&#xff…

实战项目:基于控制台与数据库的图书管理系统开发指南

一、项目概述与设计思路 1.1 为什么选择图书管理系统 图书管理系统是学习编程的经典项目&#xff0c;它涵盖了&#xff1a; 控制台交互&#xff1a;学习用户输入输出处理 数据库操作&#xff1a;掌握CRUD核心功能 业务逻辑&#xff1a;理解实际应用场景 系统架构&#xff…

人工智能——层次聚类算法

目录 摘要 18 层次聚类 18.1 本章工作任务 18.2 本章技能目标 18.3 本章简介 18.4 编程实战 18.5 本章总结 18.6 本章作业 本章已完结&#xff01;&#xff01;&#xff01; 摘要 本章实现的工作是&#xff1a;首先导入20名学生的3科成绩&#xff0c;然后根据优先聚…

Linux中安装mysql8,转载及注意事项

一、先前往官网下载mysql8 下载地址&#xff1a; https://dev.mysql.com/downloads/选择Linux 二、删除Linux中的mysql&#xff08;如果有的话&#xff09;&#xff0c;上传安装包 1、先查看mysql是否存在&#xff0c;命令如下&#xff1a; rpm -qa|grep -i mysql如果使用这…

《算法导论(第4版)》阅读笔记:p4-p5

《算法导论(第4版)》学习第 3 天&#xff0c;p4-p5 总结&#xff0c;总计 2 页。 一、技术总结 1.instance Thus, given the input sequence h31; 41; 59; 26; 41; 58i, a correct sorting algorithm returns as output the sequence h26; 31; 41; 41; 58; 59i. Such an inp…

第十四篇:系统分析师第三遍——15章

目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结六、后面准备怎么做&#xff1f; 一、目标 通过参加考试&#xff0c;训练学习能力&#xff0c;而非单纯以拿证为目的。 1.在复习过程中&…

Easy云盘总结篇-登录注册

**说在前面&#xff1a;该项目是跟着B站一位大佬写的&#xff0c;不分享源码&#xff0c;支持项目付费 ** 获取图形验证码 可以看到这里有2两种图形验证码&#xff0c;分为&#xff1a; type0&#xff1a;如上图下面那个&#xff0c;是完成操作后要进行注册的验证码 type1: 如…