机器学习day1-数据集
机器学习
一、机器学习
1.定义
让计算机在数据中学习规律并根据得到的规律对未来进行预测。
2.发展史
19世纪50年代:图灵测试提出、塞缪尔开发的西洋跳棋程序,标志着机器学习正式进入发展期
19世纪80年代:神经网络反向传播(BP)算法训练的多参数线性规划(MLP),复兴时代
19世纪90年代:决策树(ID3)算法,支持向量机(SVM),由知识驱动转变为数据驱动
21世纪初:Hinton提出深度学习(Deep Learning),蓬勃发展时期
2012年:算力提升和海量训练样本的支持,深度学习成为机器学习研究热点
3.分类
按学习模式不同:
监督学习:给结果去学习模型,然后对给定的新数据利用模型去进行预测。主要用于回归和分类。
半监督学习:利用少量标注数据和大量无标注数据进行学习,侧重于在有监督的分类算法中加入无标记样本来实现半监督分类。
无监督学习:没有结果,给数据找出规律。主要用于关联分析、聚类和降维。对抗神经网络。
强化学习:类似于监督学习,但未使用样本数据进行训练,通过不断试错进行学习的模式。两个可交互对象:智能体和环境,四个核心要素:策略、回报函数(收益信号)、价值函数、环境模型(可选)。常用于机器人避障、棋牌类游戏、广告和推荐等应用场景。
4.机器学习项目开发步骤
1.收集数据
2.准备数据
3.训练模型
4.评估模型
5.提高性能
二、scikit-learn工具
1.安装
windows+r输入cmd,进入命令提示符
激活conda:conda activate
创建sklearn虚拟环境:conda create -n sklearn python=3.9
激活sklearn环境:activate sklearn
pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ numpy
pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ scipy
pip install --index Verifying - USTC Mirrors matplotlib
pip install --index Verifying - USTC Mirrors pandas
pip install --index Verifying - USTC Mirrors scikit-learn
参考以下安装教程:https://www.sklearncn.cn/62/
安装报错参考:pip 安装 scikit-learn失败解决教程_failed to build scikit-learn-CSDN博客
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn
VScode安装
环境选择-测试是否可以正常使用
2.scikit-learn包含内容
分类
回归
聚类
降低维度
模型选择
特征预处理
三、数据集
1.sklearn玩具数据集
数据在sklearn库的本地,数据量小
函数 | 返回 |
---|---|
load_boston(*[,return_X_y]) | 加载并返回波士顿房价数据集(回归) |
load_iris(*[,return_X_y,as_frame]) | 加载并返回鸢尾花数据集(分类) |
load_diabetes(*[,return_X_y,as_frame]) | 加载并返回糖尿病数据集(回归) |
load_digits(*[,n_class,return_X_y,as_frame]) | 加载并返回数字数据集(分类) |
load_linnerud(*[,return_X_y,as_frame]) | 加载并返回linnerud物理锻炼数据集 |
load_wine(*[,return_X_y,as_frame]) | 加载并返回葡萄酒数据集(分类) |
load_breast_cancer(*[,return_X_y,as_frame]) | 加载并返回威斯康星州乳腺癌数据集(分类) |
2.sklearn现实世界数据集
通过网络获取,数据量大
函数 | 说明 |
---|---|
fetch_olivetti_faces(*[,data_home,...]) | 从AT&T(分类)中加载Olivetti人脸数据集 |
fetch_20newsgroups(*[,data_home,subset,...]) | 从20个新闻组数据集中加载文件名和数据(分类) |
fetch_20newsgroups_vectorized(*[,subset,...]) | 加载20个新闻组数据集并将其矢量化为令牌计数(分类) |
fetch_lfw_people(*[,data_home,funneled...]) | 将标签的面孔加载到Wild(LFW)人数据集中(分类) |
fetch_lfw_pairs(*[,subset,data_home,...]) | 在“Wild(LFW)”对数据集中加载标签的面部(分类) |
fetch_covtype(*[,data_home,...]) | 加载covertype(植被型数据集)数据集(分类) |
fetch_rcv1(*[,data_home,subset,...]) | 加载RCV1多标签数据集(分类) |
fetch_kddcup99(*[,subset,data_home,...]) | 加载kddcup99(网络入侵检测)数据集(分类) |
fetch_california_housing(*[,data_home,...]) | 加载加利福尼亚住房数据集(回归) |
3.sklearn加载玩具数据集
eg1:加载鸢尾花数据
from sklearn.datasets import load_iris#加载玩具数据(鸢尾花数据集) iris = load_iris() print(iris.data)#数据(特征数据) print(iris.data.shape) print(iris.feature_names)#特征名称 print(iris.target)#标签(目标) print(iris.target.shape) print(iris.target_names)#目标描述 print(iris.filename) #iris.csv 保存后的文件名 print(iris.DESCR)#数据集的描述
特征有:
花萼长 sepal length
花萼宽sepal width
花瓣长 petal length
花瓣宽 petal width
三分类:
0-Setosa山鸢尾
1-Versicolour变色鸢尾
2-Virginica维吉尼亚鸢尾
用pandas把特征和目标一起显示出来:
from sklearn.datasets import load_iris import pandas as pd import numpy as np def loadiris1():iris = load_iris()#加载鸢尾花数据(去本地加载了一个csv文件)# print(iris.data)#特征数据# print(iris.feature_names)# print(iris.target)# print(iris.target_names)# print(iris.DESCR)# print(iris.filename)# print("data什么类型的数据",type(iris.data),iris.data.dtype)# print("target什么类型的数据",type(iris.target),iris.target.dtype)x = iris.data# print(x.shape,x.dtype)y = iris.target.reshape(x.shape[0],1).astype(np.float64)#把一维数组转化为2维数组(待会可以和x堆叠) 再把保存的数据的类型转化为跟x一样data=np.hstack([x,y])# print(data,data.shape)# print(data[80][4])# print(iris.target_names[int(data[80][4])])# print(iris.feature_names.append("target"))iris.feature_names.append("target")dataf=pd.DataFrame(data=data,columns=iris.feature_names)print(dataf) loadiris1()
4.sklearn获取现实世界数据集
1.联网下载后,保存到home目录
from sklearn import datasets datasets.get_data_home() #查看数据集默认存放的位置
eg2.获取20分类新闻数据
sklearn.datasets.fetch_20newsgroups(data_home,subset)
data_home:
subset:train:只下载训练集;test:只下载测试集;all:训练集和测试集
return_X_y:决定返回值的情况,False:默认
当参数return_X_y值为False时, 函数返回Bunch对象,Bunch对象中有以下属性 *data:特征数据集, 长度为18846的列表list, 每一个元素就是一篇新闻内容, 共有18846篇 *target:目标数据集,长度为18846的数组ndarray, 第一个元素是一个整数,整数值为[0,20) *target_names:目标描述,长度为20的list *filenames:长度为18846的ndarray, 元素为字符串,代表新闻的数据位置的路径 当参数return_X_y值为True时,函数返回值为元组,元组长度为2, 第一个元素值为特征数据集,第二个元素值为目标数据集
from sklearn.datasets import fetch_20newsgroups data=fetch_20newsgroups(data_home="./src",subset="test") print(data.data[1]) print(data.target_names)
5.加载本地自己的数据集
1.csv文件
①:txt,数据之间用英文逗号隔开,保存后缀名改为csv
②:excel,填写数据,以csv后缀保存文件
2.pandas加载csv
pd.read_csv("./src/ss.csv")
数据为DataFrame形式
import pandas as pd # 作业("" "./" "../" "/" 是什么意思 而且举例说明) #. (点) 表示当前目录,从当前工作目录开始的相对路径 #.. (两个点) 表示上一级目录,引用位于当前目录父目录中的文件 #/路径分隔符,用于分隔目录名和文件名 data=pd.read_csv('src/ss.csv') print(data)
import pandas as pd data=pd.read_excel("src/ss.xlsx") print(data)
6.数据集的划分
1.函数
sklearn.model_selection.train_test_split(*arrays,**options)
*array :用于接收1到多个"列表、numpy数组、稀疏矩阵或padas中的DataFrame"。
**options, 重要的关键字参数有: test_size 值为0.0到1.0的小数,表示划分后测试集占的比例 random_state 值为任意整数,表示随机种子,使用相同的随机种子对相同的数据集多次划分结果是相同的。否则多半不同 shuffle:布尔值。默认为True,在分割之前是否对数据进行洗牌 stratify:分层划分,默认是y,按照 y 中类别的比例进行分层抽样,确保训练集和测试集中各类别样本的比例相同。 返回值说明:返回值为列表list, 列表长度与形参array接收到的参数数量相关联, 形参array接收到的是什么类型,list中对应被划分出来的两部分就是什么类型
2.示例
复习:
arr2=[100,200] x,y=arr2 print(x,y) def m(*a, **b):print(a) #('hello', 123)print(b) #{'name': '小王', 'age': 30, 'sex': '男'} m("hello", 123, name="小王", age=30, sex="男") def m2(a,b,c):pass dic={"a":123,"b":12,"c":123} print(dic) #{'a': 123, 'b': 12, 'c': 123} #m2(**dic)相当于m2(a=dic["a"],b=dic["b"],c=dic["c"])
①.列表数据集划分
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) #[4, 1, 5] [2, 3] a, b = train_test_split(data2, test_size=0.4, random_state=22) print(a, b) #['4a', '1a', '5a'] ['2a', '3a'] a, b, c, d = train_test_split(data1, data2, test_size=0.4, random_state=22) print(a,b,c,d) #['4a', '1a', '5a'] ['2a', '3a']
②.ndarray数据集划分
划分前和划分后的数据类型是相同的
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) #[4, 1, 5] [2, 3] ['4a' '1a' '5a'] ['2a' '3a'] print(type(a), type(b), type(c), type(d)) #<class 'list'> <class 'list'> <class 'numpy.ndarray'> <class 'numpy.ndarray'>
# ndarray的数据集划分 from sklearn.model_selection import train_test_split import numpy as np x=np.arange(100).reshape(50,2) # print(x)#这个x数据集中有几个数据(50个) 每一个数据有2个特征 x_train,x_test=train_test_split(x,test_size=11,random_state=42) print(x_train.shape) print(x_test.shape) print(type(x_train)) print(type(x_test))
③.二维数组数据集划分
train_test_split只划分第一维度,第二维度保持不变
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)
[[ 1 2 3][ 4 5 6][ 7 8 9][10 11 12][13 14 15]] a=[[10 11 12][ 1 2 3][13 14 15]] b=[[4 5 6][7 8 9]]
eg3
from sklearn.model_selection import train_test_split arr1=[1,23,2,231,25,36,23,32,22,34,123,12,3,2,3] x_train,x_test=train_test_split(arr1,train_size=0.8) print(arr1) print(x_train,x_test) #[1, 23, 2, 231, 25, 36, 23, 32, 22, 34, 123, 12, 3, 2, 3] [34, 2, 123, 12, 3, 1, 2, 231, 32, 36, 22, 23] [23, 25, 3]
from sklearn.model_selection import train_test_split arr1=[1111,23,2,231,25,36,23,32,22,34,123,12,3,33333,3] arr2=[9999,1,1,1,1,1,2,2,2,2,3,3,3,66666,3] x_train,x_test,y_train,y_test=train_test_split(arr1,arr2,train_size=0.8)#arrays print(arr1) print(x_train,x_test) print(y_train,y_test) #[1111, 23, 2, 231, 25, 36, 23, 32, 22, 34, 123, 12, 3, 33333, 3] #[9999, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 66666, 3] #[34, 3, 1111, 22, 33333, 25, 123, 32, 23, 12, 2, 3] [36, 23, 231] #[2, 3, 9999, 2, 66666, 1, 3, 2, 2, 3, 1, 3] [1, 1, 1] #将arr1和对应的arr2打乱,再划分成训练集和测试集
from sklearn.model_selection import train_test_split x=[[11,2,3,31,111],[12,2,3,32,112],[1,23,3,33,113],[14,2,3,34,114],[15,2,3,35,115],[16,2,3,36,116],[1,23,3,36,117],[1,23,3,316,118],[1,23,3,326,119],[1,23,3,336,120]] y=[1,1,1,1,1,2,2,2,2,2] x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,stratify=y,random_state=40)#stratify=y,按y进行分层 print("x_train:\n",x_train) print("x_test:\n",x_test) print("y_train:\n",y_train) print("y_test:\n",y_test) print(type(x_test))
④.DataFrame数据集划分
# dataFrame的数据集划分 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split # 数据集的划分 data=np.arange(1,100).reshape(33,3) data=pd.DataFrame(data,columns=['a','b','c']) # print(data) train,test=train_test_split(data,train_size=0.7,shuffle=True,random_state=4) print(train.shape) print(test.shape)
⑤.字典数据集划分
可以划分非稀疏矩阵
用于将字典列表转换为特征向量。这个转换器主要用于处理类别数据和数值数据的混合型数据集
# 字典的特征提取和数据划分 from sklearn.feature_extraction import DictVectorizer from sklearn.model_selection import train_test_split arr=[{"name":"重庆","count":2000,"tempreture":41},{"name":"成都","count":2300,"tempreture":28},{"name":"北京","count":4900,"tempreture":20},{"name":"昆明","count":190,"tempreture":22},{"name":"昆明","count":290,"tempreture":22}] model=DictVectorizer(sparse=False)#sparse=False表示返回一个完整的矩阵,sparse=True表示返回一个稀疏矩阵 data=model.fit_transform(arr)#提取特征 print(data) x_train,y_train=train_test_split(data,train_size=0.8,random_state=666) print(x_train) print(y_train)
⑥.鸢尾花数据集划分
# 鸢尾花数据集划分 from sklearn import datasets from sklearn.model_selection import train_test_split iris=datasets.load_iris() X=iris.data y=iris.target X_train,X_test,y_train,y_test=train_test_split(X,y,train_size=0.8,random_state=4,stratify=y) print(X) print(y) print(X_train.shape) print(X_test.shape) print(y_train.shape) print(y_test.shape) print(y_train) print(iris.feature_names) print(iris.target_names)
⑦.现实世界数据集划分
from sklearn.datasets import fetch_20newsgroups from sklearn.model_selection import train_test_split import numpy as np news=fetch_20newsgroups(data_home="./src",subset="train") # print(news.data[0]) x_train,x_test,y_train,y_test=train_test_split(news.data,news.target,train_size=0.8,random_state=666) print(np.array(x_train).shape) print(np.array(x_test).shape) print(x_train[0:5]) print(y_train) print(news.target_names)
相关文章:
机器学习day1-数据集
机器学习 一、机器学习 1.定义 让计算机在数据中学习规律并根据得到的规律对未来进行预测。 2.发展史 19世纪50年代:图灵测试提出、塞缪尔开发的西洋跳棋程序,标志着机器学习正式进入发展期 19世纪80年代:神经网络反向传播(…...
【Golang】——Gin 框架中的路由与请求处理
文章目录 1. 路由基础1.1 什么是路由?1.2 Gin 中的路由概述 2. 创建简单路由2.1 基本路由定义2.2 不同请求方法的路由 3. 路由参数3.1 路径参数3.2 查询参数 4. 路由分组4.1 为什么使用路由分组?4.2 路由分组示例 5. 请求处理与响应5.1 Gin 中的 Context…...
nuxt3添加wowjs动效
1、安装wowjs pnpm i wowjs1.1.32、node_modules复制wowjs代码 路径/node_modules/wowjs/dist/wow.js。不知道路径则查看node_modules/wowjs/package.json里面的main选项 2.1、在public文件夹创建wowjs.js文件 /public/wowjs.js export default (callthis) > { // !!// 这是…...

我们是如何实现 TiDB Cloud Serverless 的 - 成本篇
作者: shiyuhang0 原文来源: https://tidb.net/blog/fbedeea4 背景 Serverless 数据库是云原生时代的产物,它提供全托管,按需付费,自动弹性的云数据库服务,让客户免于繁重的数据库运维工作。关于 Serve…...
PCL算法汇总
参考 【2024最新版】PCL点云处理算法汇总(C长期更新版)_pcl点云聚类c-CSDN博客...

sql注入之二次注入(sqlilabs-less24)
二阶注入(Second-Order Injection)是一种特殊的 SQL 注入攻击,通常发生在用户输入的数据首先被存储在数据库中,然后在后续的操作中被使用时,触发了注入漏洞。与传统的 SQL 注入(直接注入)不同&a…...
Android compose 软键盘 遮挡对话框中TextField 输入框
在AlertDialog对话框中含有TextField输入框时,弹出软件盘会遮挡输入框 解决1: 在AndroidManifest.xml的 MainActivity中添加如下 android:windowSoftInputMode"adjustResize" 然后AlertDialog 中的modify. modify.windowInsetsP…...

spring-data-elasticsearch 3.2.4 实现桶bucket排序去重,实现指定字段的聚合搜索
一、背景 es索引有一个文档CourseIndex,下面是示意: creatorIdgradesubjectnameno1002270英语听力课程一N00232DS91004380数学口算课程N00209DK71003480物理竞赛课程N00642XS21002280英语听力课程二N00432WS31002290英语听力课程三N002312DP5 在搜索的时候&#…...
【项目开发】分析六种常用软件架构
未经许可,不得转载。 文章目录 软件架构核心内容设计原则分层架构常见层次划分优缺点应用场景事件驱动架构核心组件优缺点应用场景微核架构核心概念优缺点应用场景微服务架构核心组件设计与实施优缺点应用场景云架构云架构模式优缺点应用场景软件架构 软件架构是指一个软件系…...
算法和程序的区别
算法(Algorithm)和程序(Program)是计算机科学中两个密切相关但不同的概念。让我们通过以下几个方面来比较它们: ### 1. 设计 vs 实现 - **算法设计(Algorithm Design)**: - **定…...

用指针遍历数组
#include<stdio.h> int main() {//定义一个二维数组int arr[3][4] {{1,2,3,4},{2,3,4,5},{3,4,5,6},};//获取二维数组的指针int (*p)[4] arr;//二维数组里存的是一维数组int[4]for (int i 0; i < 3; i){//遍历一维数组for (int j 0; j <4; j){printf("%d &…...

《Probing the 3D Awareness of Visual Foundation Models》论文解析——多视图一致性
一、论文简介 论文讨论了大规模预训练产生的视觉基础模型在处理任意图像时的强大能力,这些模型不仅能够完成训练任务,其中间表示还对其他视觉任务(如检测和分割)有用。研究者们提出了一个问题:这些模型是否能够表示物体…...
使用pip安装esp32的擦除、写入固件的esptool库
esptool库可以为esp32的开发板烧录新的固件,但是如果为了烧录固件就要装esp-idf软件包,甚至需要用make编译安装很久,实在太费时费力了! 好消息就是,esp提供了python的esptool库,这样只要使用pip安装上这个…...
传奇996_23——杀怪掉落,自动捡取,捡取动画
一、杀怪掉落 前置: 添加地图地图刷怪怪物掉落(术语叫爆率,掉落叫爆率,而且文档上叫爆率) 刷怪步骤:在\MirServer\Mir200\Envir\MonItems文件夹中建立以怪物名字为文件名的txt文件写法案例: …...
【030】基于51单片机甲醛检测报警器【Proteus仿真+Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统 ZE08-CH2O甲醛传感器AT24C02存储芯片LCD1602液晶显示按键设置蜂鸣器报警。 1、本设计采用STC89C52、AT89C52、AT89S52作为主控芯片; 2、采用ZE08-CH2O甲醛传感器采集环境中的甲醛浓度值,LCD1602实时显示…...

微信小程序:vant组件库安装步骤
前言:在微信小程序中引用vant组件报错,提示路径不存在,这很有可能是因为没有安装构建vant组件库导致。下面是我整理的安装vant组件库的步骤: 第一步:安装node.js(执行完第一步请重启小程序) 具体步骤请看链接:node.js…...
处理namespace问题:Namespace not specified for AGP 8.0.0
How do I fix ‘namespace not specified’ error in Android Studio? Namespace not specified for AGP 8.0.0 解决方案 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/androi…...

C++(Qt)软件调试---内存分析工具Heob(26)
C(Qt)软件调试—内存分析工具Heob(26) 文章目录 C(Qt)软件调试---内存分析工具Heob(26)[toc]1、概述🐜2、环境配置🪲3、功能说明4、使用Heob分析qt 程序内存泄漏🦧5、使用Heob检测qt 程序野指针…...

Redis五大基本类型——String字符串命令详解(命令用法详解+思维导图详解)
目录 一、String字符串类型介绍 二、常见命令 1、SET 2、GET 3、MGET 4、MSET 使用MGET 和 使用多次GET的区别 5、DEL 6、SETNX SET、SET NX和SET XX执行流程 7、INCR 8、INCRBY 9、DECR 10、DECYBY 11、INCRBYFLOAT 12、APPEND 13、GETRANGE 14、SETRANGE …...

Flutter中的Material Theme完全指南:从入门到实战
Flutter作为一款热门的跨平台开发框架,其UI组件库Material Design深受开发者喜爱。本文将深入探讨Flutter Material Theme的使用,包括如何借助Material Theme Builder创建符合产品需求的主题风格。通过多个场景和代码实例,让你轻松掌握这一工…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...

篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...
Linux信号保存与处理机制详解
Linux信号的保存与处理涉及多个关键机制,以下是详细的总结: 1. 信号的保存 进程描述符(task_struct):每个进程的PCB中包含信号相关信息。 pending信号集:记录已到达但未处理的信号(未决信号&a…...
python数据结构和算法(1)
数据结构和算法简介 数据结构:存储和组织数据的方式,决定了数据的存储方式和访问方式。 算法:解决问题的思维、步骤和方法。 程序 数据结构 算法 算法 算法的独立性 算法是独立存在的一种解决问题的方法和思想,对于算法而言&a…...