机器学习基础算法及其实现
线性回归
知识点:
1. 线性回归模型可以使用不同的目标函数,最常用的是最小二乘法、最小绝对值法和最大似然法。
2. 在最小二乘法中,目标是最小化实际值与预测值之间的误差平方和,这可以通过求导数等方法来求解。
3. 在最小绝对值法中,目标是最小化实际值与预测值之间的误差绝对值和,这可以使用线性规划等方法来求解。
4. 在最大似然法中,目标是估计模型参数,使得在给定自变量的条件下,因变量的概率最大化。
5. 线性回归模型的参数估计可以使用基于梯度下降的算法,如批量梯度下降、随机梯度下降、小批量梯度下降等。
6. 在应用线性回归模型时,需要注意多重共线性、异方差性、自相关等问题,并采取相应的处理措施。
7. 除了传统的线性回归模型,还有多项式回归、岭回归、lasso回归、弹性网络回归等变种模型。
逻辑回归
import numpy as npclass LogisticRegression:def __init__(self, learning_rate=0.01, num_iterations=10):self.learning_rate = learning_rateself.num_iterations = num_iterationsself.weights = Noneself.bias = Nonedef fit(self, X, y):num_samples, num_features = X.shapeprint(num_samples,num_features)self.weights = np.zeros(num_features)print(X)print(self.weights)self.bias = 0# 梯度下降算法for i in range(self.num_iterations):linear_model = np.dot(X, self.weights) + self.biasprint(linear_model)y_pred = self._sigmoid(linear_model)print("sigmoid")print(y_pred)print("end")# 计算损失函数的梯度dw = (1 / num_samples) * np.dot(X.T, (y_pred - y))db = (1 / num_samples) * np.sum(y_pred - y)# 更新权重和偏移量self.weights -= self.learning_rate * dwself.bias -= self.learning_rate * dbdef predict(self, X):print("pre")print(X)linear_model = np.dot(X, self.weights) + self.biasy_pred = self._sigmoid(linear_model)y_pred_class = [1 if i > 0.5 else 0 for i in y_pred]return np.array(y_pred_class)def _sigmoid(self, x):return 1 / (1 + np.exp(-x))# 创建训练数据
X_train = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6], [5,6,7]])
y_train = np.array([0, 0, 1, 1, 1])# 创建逻辑回归模型
lr_model = LogisticRegression()# 训练模型
lr_model.fit(X_train, y_train)# 预测新数据
X_new = np.array([[2,4,6], [3,5,7]])
y_pred = lr_model.predict(X_new)print(y_pred)
SVM
基于sklearn库实现SVM:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建 SVM 模型对象
svm_model = SVC(kernel='linear', C=1)# 训练 SVM 模型
svm_model.fit(X_train, y_train)# 预测测试集数据
y_pred = svm_model.predict(X_test)# 计算准确率
acc = accuracy_score(y_test, y_pred)
print('Accuracy:', acc)
具体代码实现:(复习后再过来研究)
import numpy as np# 定义 SVM 模型类
class SVM:def __init__(self, C=1.0, kernel='linear', gamma=1.0):self.C = C # 惩罚系数self.kernel = kernel # 核函数类型self.gamma = gamma # 核函数参数self.alpha = None # 拉格朗日乘子self.b = 0 # 阈值self.X = None # 训练数据self.y = None # 训练标签# 核函数def _kernel_function(self, x1, x2):if self.kernel == 'linear':return np.dot(x1, x2)elif self.kernel == 'rbf':return np.exp(-self.gamma * np.linalg.norm(x1 - x2) ** 2)else:raise ValueError('Unsupported kernel function type')# 训练模型def fit(self, X, y):n_samples, n_features = X.shape # 5 3 self.alpha = np.zeros(n_samples)self.X = Xself.y = y# 计算 Gram 矩阵K = np.zeros((n_samples, n_samples)) # 5 5for i in range(n_samples):for j in range(n_samples):K[i, j] = self._kernel_function(X[i], X[j]) # np.dot# 定义优化目标函数def objective_function(alpha):return 0.5 * np.dot(alpha, np.dot(alpha, K)) - np.sum(alpha)# 定义约束条件def zero_sum_constraint(alpha):return np.dot(alpha, y)# 定义不等式约束条件bounds = [(0, self.C) for i in range(n_samples)]cons = [{'type': 'eq', 'fun': zero_sum_constraint}]# 使用优化算法求解拉格朗日乘子from scipy.optimize import minimizeres = minimize(objective_function, self.alpha, bounds=bounds, constraints=cons)self.alpha = res.x# 计算阈值support_vectors = self.alpha > 1e-5support_vectors_idx = np.where(support_vectors)[0]self.b = np.mean(y[support_vectors] - np.dot(K[support_vectors_idx, :], self.alpha * y))# 预测新数据def predict(self, X):n_samples = X.shape[0]y_pred = np.zeros(n_samples)for i in range(n_samples):s = 0for alpha, x, y in zip(self.alpha, self.X, self.y):s += alpha * y * self._kernel_function(X[i], x)y_pred[i] = s + self.breturn np.sign(y_pred)# 创建训练数据
X_train = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6], [5,6,7]])
y_train = np.array([0, 0, 1, 1, 1])# 创建逻辑回归模型
model = SVM()# 训练模型
model.fit(X_train, y_train)# 预测新数据
X_new = np.array([[2,4,6], [3,5,7]])
y_pred = model.predict(X_new)print(y_pred)
相关文章:

机器学习基础算法及其实现
线性回归 知识点: 1. 线性回归模型可以使用不同的目标函数,最常用的是最小二乘法、最小绝对值法和最大似然法。 2. 在最小二乘法中,目标是最小化实际值与预测值之间的误差平方和,这可以通过求导数等方法来求解。 3. 在最小绝对值…...

docker安装MinIO
简介 Minio 是一个面向对象的简单高性能存储服务。使用 Go 语言编写,性能高、具有跨平台性。 Minio 官网为:https://min.io ,有一个中文站点,单内容更新不是很及时,建议从原始官网学习。 本文采用 Docker 安装&…...

第5章 运算符、表达式和语句
本章介绍以下内容: 关键字:while、typedef 运算符:、-、*、/、%、、--、(类型名) C语言的各种运算符,包括用于普通数学运算的运算符 运算符优先级以及语句、表达式的含义 while循环 复合语句、自动类型转换和强制类型转换 如何编写…...

24考研数据结构-图的存储结构邻接矩阵
目录 6.3 储存结构(邻接表表示法)1. 储存方式2. 结构3. 图的邻接表存储表示(算法)4. 结论5. 邻接矩阵和邻接表的对比邻接矩阵优点:缺点: 邻接表优点:缺点: 邻接矩阵与邻接表的关系 6…...

在线推算两个日期相差天数的计算器
具体请前往:在线推算两个日期相差天数的计算器...

Spring源码解析(七):bean后置处理器AutowiredAnnotationBeanPostProcessor
Spring源码系列文章 Spring源码解析(一):环境搭建 Spring源码解析(二):bean容器的创建、默认后置处理器、扫描包路径bean Spring源码解析(三):bean容器的刷新 Spring源码解析(四):单例bean的创建流程 Spring源码解析(五)&…...

【C#学习笔记】引用类型(1)
文章目录 引用类型class匿名类 记录引用相等和值相等record声明 接口delegate 委托合并委托/多路广播委托 引用类型 引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据。 对于引用类型,两种变量可引用同一对…...

STM32CubeMX+VSCODE+EIDE+RT-THREAD 工程创建
Eide环境搭建暂且不表,后续补充。主要记录下Vscode环境下 创建Rt-thread工程的过程。分别介绍STM32CubeMX添加rtt支持包的方式和手动添加rtt kernel方式。STM32CubeMX生成工程的时候有"坑",防止下次忘记,方便渡一下有缘人ÿ…...

java中javamail发送带附件的邮件实现方法
java中javamail发送带附件的邮件实现方法 本文实例讲述了java中javamail发送带附件的邮件实现方法。分享给大家供大家参考。具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它…...

Stable Diffusion高阶技能(2)-稳定扩散百态:解密AI绘画工具「SD WebUI」的提示词高级使用策略
简介 在我们的生活中,艺术元素可谓无处不在,而处于中心地位的绘画,无疑是携带着强烈的艺术魅力。现如今随着AI技术的日新月异,AI绘画对我们的生活世界的改造影响越来越深远。那么,如何让我们在AI绘画工具中更好的指导AI完成我们心中的作品呢? 这需要我们玩转这个工具的…...

【果树农药喷洒机器人】Part2:机器人变量喷药系统硬件选型
本专栏介绍:付费专栏,持续更新机器人实战项目,欢迎各位订阅关注。 关注我,带你了解更多关于机器人、嵌入式、人工智能等方面的优质文章! 文章目录 一、引言二、变量喷药系统总体要求2.1系统功能要求2.2系统技术要求三、机器人关键硬件选型3.1深度相机概述与选型3.2单片机选…...

解决vite+vue3项目npm装包失败
报错如下: Failed to remove some directories [ npm WARN cleanup [ npm WARN cleanup D:\\V3Work\\v3project\\node_modules\\vue, npm WARN cleanup [Error: EPERM: operation not permitted, rmdir D:\V3Work\v3project\node_modules\vue\reactivity\…...

Rust之错误处理
在Rust中,将错误分为两种,可恢复错误和不可恢复错误。所谓可恢复错误就是指类似于文件未找到这类错误,一般需要将它们报告给用户并再次尝试进行操作,而不可恢复错误往往就是Bug,需要停止程序的运行。 1、不可恢复错误…...

docker compose快速编排
Docker-compose概述 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容集群的快速编排 Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器&#x…...

java.io.File类的使用
文章目录 概述构造器常用方法1、获取文件和目录基本信息2、列出目录的下一级3.File类的重命名功能4、判断功能的方法5、创建、删除功能 练习 概述 File类及本章下的各种流,都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录&#…...

TypeScript技能总结(三)
typescript是js的超集,目前很多前端框架都开始使用它来作为项目的维护管理的工具,还在不断地更新,添加新功能中,我们学习它,才能更好的在的项目中运用它,发挥它的最大功效 //泛型 > 参数和返回值类型相…...
python绿色版运行程序,python 绿色版免安装
大家好,小编来为大家解答以下问题,python绿色版运行程序,python 绿色版免安装,今天让我们一起来看看吧! 软件简介 Python3.7.0 是一种被广大从业者广泛使用的通用型设计语言。该软件提供了丰富全面的模块,并…...

Python 向Excel写数据
1.项目终端导入 xlwt 库 pip install xlwt2.导入依赖包 import xlwt3.创建Excel表格类型文件 调用xlwt模块中的Workbook方法来创建一个excel表格类型文件,其中的第一个参数是设置数据的编码格式,这里是’utf-8’的形式,style_compression设…...

MySQL(1)
MySQL创建数据库和创建数据表 创建数据库 1. 连接 MySQL mysql -u root -p 2. 查看当前的数据库 show databases; 3. 创建数据库 create database 数据库名; 创建数据库 4. 创建数据库时设置字符编码 create database 数据库名 character set utf8; 5. 查看和显示…...

Android10 Recovery系列(二)增加OTG升级功能
一 、背景 起因是遇到了客户有这个需求,本着了解的原则,去看了一下之前Android版本的代码,想看看之前有没有现成的实现,移植过来。结果很不幸,没有找到。于是自己开始了功能实现的过程。下面分享一下该功能的实现 二 、准备工作 首先简单了解一下Recovery 模块的系统升…...

el-popover使用自定义图标
使用el-popover实现鼠标点击或浮动到自定义图标上弹出表格弹窗,官方文档上使用的是按钮el-button,如果想换成图标或其他的组件的话直接把el-button替换掉即可。注意替换之后的组件一定要加slot“reference”,不然组件是显示不出来的。 代码如…...

KCOM4串口转键鼠控制线测试说明
1.KOCM4介绍 KCOM4是一款最新开发的串口转键盘鼠标控制线,采用32位内核,最大60Mhz的工作频率,完美适用于游戏挂机等应用场景(如果是用在工作电脑控制或展厅电脑控制推荐CH9329双头线)。KCOM4支持普通键盘、相对鼠标、…...

2023华数杯数学建模C题完整5问代码思路分析
目前已经写出2023华数杯C题母亲身心健康对婴儿成长的影响全部5问的完整代码和42页论文(正文30页,论文部分摘要如下: 本文共解决了五个问题,涉及婴儿行为特征、睡眠质量与母亲的身体指标和心理指标的关系,以及如何优化…...

02_kafka_基本概念_基础架构
文章目录 常见的消息队列工作模式基本概念kafka 特性Kafka 基本架构topic 分区的 目的/ 好处 日志存储形式消费者,消费方式 逻辑消费组 高性能写入: 顺序写 mmap读取:零拷贝DMA 使用场景 常见的消息队列工作模式 至多一次:消息被…...

HTTP 常用状态码 301 302 304 403
HTTP 常用状态码 301 302 304 403 301 永久重定向,浏览器会把重定向后的地址缓存起来,将来用户再次访问原始地址时,直接引导用户访问新地址 302 临时重定向,浏览器会引导用户进入新地址,但不会缓存原始地址,…...

分布式 - 服务器Nginx:一小时入门系列之静态网页配置
文章目录 1. 静态文件配置2. nginx listen 命令解析3. nginx server_name 命令解析4. nginx server 端口重复5. nginx location 命令 1. 静态文件配置 在 /home 文件下配置一个静态的AdminLTE后台管理系统: [rootnginx-dev conf.d]# cd /home [rootnginx-dev home…...

kubernetes网络之网络策略-----Network Policies - Example
创建一个Deployment并配置Service 创建一个 nginx Deployment 用于演示 Kubernetes 的 NetworkPolicy: kubectl create deployment nginx --imagenginx 输出结果 deployment.apps/nginx created通过Service暴露该Deployment kubectl expose deployment nginx --po…...

【GDI/GDI+】如何抓取屏幕保存到bitmap文件?
问题 如何抓取屏幕保存到bitmap文件? 方法 GDI 方法 1、抓取。 HBITMAP CRectChartUI::GetBitmap(HDC hDC) {HDC hMemDC;int x, y;int nWidth, nHeight;HBITMAP hBitmap, hOldBitmap;hMemDC CreateCompatibleDC(hDC);nWidth GetDeviceCaps(hDC, HORZRES);nHei…...

HDFS介绍
目录 编辑 一、HDFS基础 1.1 概述 1.2 HDFS的设计目标 1.2.1 硬件故障 1.2.2 流式数据访问 1.2.3 超大数据集 1.2.4 简单的一致性模型 1.2.5 移动计算而不是移动数据 1.2.6 跨异构硬件和软件平台的可移植性 1.3 基础概念 1.3.1 块(Block) 1.3.2 复制…...

每日一题——两数之和
题目 给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。 (注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到࿰…...