青少年編程與數學 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.pswp.cn/news/903997.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903997.shtml
英文地址,請注明出處:http://en.pswp.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: 如…