一篇文章了解机器学习

一篇文章了解机器学习(上)

  • 一、软件版本安装
  • 二、数据集的加载
  • 三、数据集的切分
  • 四、数据特征提取及标准化
    • 1、字典数据的特征提取
    • 2、文本特征向量的提取
    • 3、数据标准化处理
  • 四、特征降维
  • 注:训练器的区别::
  • 五、模型的训练与调优
    • 1、常用的模型训练的距离计算方法
      • 欧氏距离
      • 曼哈顿距离
    • 2、KNN算法
    • 3、模型的保存与加载
  • 六、贝叶斯算法

一、软件版本安装

版本要求:python3.9 + scikit-learn 库

conde create -n python==3.9
pip install  scikit-learn  -i https://pypi.tuna.tsinghua.edu.cn/simple

二、数据集的加载

Scikit-learn官网:https://scikit-learn.org/stable/#
Scikit-learn中文文档:https://scikitlearn.com.cn/
sk_learn 库中具有一定的学习研究数据以及fetch数据。

import sklearn.datasets import load_iris  # 在数据库中加载本地数据
data = load_iris(return_X_y = True)   # 返回的文件自动分为x,y两部分
import sklearn.datasets import fetch_20newsgroups  # 采用网络中的数据进行下载
data = fetch_20newsgroups(data_home = './data',subset = 'all') # 对文件下载后的位置进行保存。同时规定文件下载为所有数据

三、数据集的切分

from sklearn.model_selection import trian_test_split
x_trian,x_test,y_train,y_test = train_test_split(x,y,random_stata = 1,train_size = 0.8)
# 对数据集划分的比例进行定义   模型默认进行数据的shuffle

四、数据特征提取及标准化

1、字典数据的特征提取

# 主要将字典类型的数据/datafram数据/文本数据转换为可计算的向量数据
from sklearn.feature_extraction import DictVectorizer
transfer = DictVectorizer(sparse=False)   # 对转换后的数据进行转换为混淆矩阵
##  三元组数据转换为混淆矩阵
data.toarray()  # 将三元组数据转换为混淆矩阵
# data数据类型
[[(1,0),155],
[(0,1),255]]
====>
[[255,0],[155,0]]
# 将文本数据转换为字典数据
data.to_dict(orient="records")   # 将数据转换为字典数据后进行矩阵数据的转换

2、文本特征向量的提取

(1)词频的计算

# 文本特征向量提取  == 英文状态的数据 按空格 作为分词符
from sklearn.feature_extraction.text import CountVectorizer
model =  CountVectorizer(stop_word = ['ins'])  # ins不计算向量
# 同时,该向量在词频的计算过程中会将一些默认的单词进行频闭

(2)中文词频的计算 == 在库中导入jieba分词器

pip install jieba
import jieba 
# 采用jieba分词器对中文文本进行切分
data= ['山东黄金就感觉大手笔就按书到了']
data = jieba.cut(data)  # 最终输出为切分好的列表

(3)TF—IDF计算

from sklearn.feature_extraction.text import TfidfVectorizer
model = TfidfVectorizer()
# 手动实现tf-idf
# 手动计算TF_IDF
def cut_word(text):return " ".join(jieba.cut(text))data=["教育学会会长期间,坚定支持民办教育事业!",  "扶持民办,学校发展事业","事业做出重大贡献!"]# 拆分好的数据
new_data = [cut_word(i) for i in data]    # 分词器只能进行单语句进行传输后进行分词# 构造计数器对象
count = CountVectorizer()
# 对数据进行fit
data = count.fit_transform(new_data)
arr = data.toarray()   # 生成array数组 对数组整体进行计算
# print(arr)# 1、计算每个词的词频
tf_arr_sum = arr / (np.sum(arr, axis=0))  # 公式中使用此方法进行词频计算
# tf_arr_sum = arr    # 直接词频的计数   # 在模块封装库中使用此方法进行词频计算
# print(tf_arr_sum)
# # 2、词频的逆文档数
idf_arr_word = np.log((arr.shape[0]+1)/((np.sum(arr,axis=0))+1))+1
# print(idf_arr_word.shape)
# 3、计算tf-idf
tf_idf_arr = tf_arr_sum * idf_arr_word
print('-------------------')
# print(tf_idf_arr)
print('-------------------')# 模块中使用的l2正则表达式
# tf_idf_normalized = normalize(tf_idf_arr, norm='l2', axis=1, copy=True)
# print(tf_idf_normalized)
# 4、进行数据的l2标准化
l2 = np.sqrt(np.sum(tf_idf_arr**2,axis=1))   # 二阶范式 y = sqrt(sum(x**2))
l2 = l2[:, np.newaxis] norm_l2 = tf_idf_arr/ l2
df = pd.DataFrame(data=norm_l2,columns=count.get_feature_names_out())
print(df)
print("==========================================================================================================")# 计算机计算TD-IDF
from sklearn.feature_extraction.text import TfidfTransformer
tfidf = TfidfTransformer()
tfidf_data = tfidf.fit_transform(data)
df = pd.DataFrame(data=tfidf_data.toarray(),columns=count.get_feature_names_out())

3、数据标准化处理

(1)数据最大最小化

from sklearn.preprossing import MinMaxScaler   # 最大最小化
from sklearn.preprossing import StandardScaler  # 数据标准化
from sklearn.preprossing import normalize # 正则化
# 最大最小化 == 可以将数据转化为固定区间内的数据
# 缺点:容易受到极大、极小噪声点的影响较为明显 == 模型的鲁棒性较差
# 有变异点后抵抗异常冲击的能力较弱# 对数据进行手动最大最小值处理
df = pd.read_excel('./src/text.xls',dtype=np.float32)
# 创建一个新的矩阵进行计算后数据的存储
m,n = np.shape(df)
data = np.zeros((m,n),dtype=np.float32)
handle_data = pd.DataFrame(data= data ,columns=df.columns)
for i in df.columns:for j in range(len(df[i])):min = df[i].min()max = df[i].max()handle_data[i][j] = ((df[i][j]-min)/(max-min))
print(handle_data)
# 采用最大最小计算器进行归一化处理
min_max = MinMaxScaler(feature_range=(0,1))
computer_data = min_max.fit_transform(df)
print(computer_data)

(2)数据标准化

from sklearn.preprossing import StandardScaler  # 数据标准化
# 缺点:特征之间的差异性降低,优点,将数据进行无量纲化处理,降低因量纲不一致导致的数据拟合偏执的现象。
# 手动实现数据标准化
df = pd.read_excel('./src/text.xls',dtype=np.float32)
# 创建一个新的矩阵进行计算后数据的存储
m,n = np.shape(df)
data = np.zeros((m,n),dtype=np.float32)
handle_data = pd.DataFrame(data= data ,columns=df.columns)
# # 对矩阵进行按列进行标准差归一化
mean_ = df1.mean(axis=0)
s_ = df1.std(axis=0)
df2 = (df1 - mean_)/s_
print(df2)
# 采用最大最小计算器进行归一化处理
stadar = StandardScaler()
computer_data = stadar.fit_transform(df)
print(computer_data)

四、特征降维

(1)低方差过滤

# 低方差过滤
from sklearn.feature_selection import VarianceThreshold
model = VarianceThreshold(thresholt = 1.0)  # 将特征值的方差小于1.0的特征进行过滤剔除
# 手动进行数据方差计算,将低于阈值的数据进行删除
data_var = np.var(data,axis=0)
x = [ i for i in range(len(data_var)) if data_var[i]>2]
data = data[:,x]
print(data)# 采用模型进行数据低方差过滤
data = var.fit_transform(df)
print(data)

(2)相关性分析

# 皮尔逊相关性分析
# 主要应用场景 == 数据特征维度较多时,将具有相关性的数据进行合并
# 手动计算两个变量之间的相关性系数
from scipy.stats import pearsonr
x = np.array([1,2,3,4,5])
y = np.array([1,2,3,4,5])
x_mean = x.mean()
y_mean = y.mean()
fenzi = sum((x-x_mean)*(y-y_mean))/len(x)
fenmu = (np.sqrt(sum((x-x_mean)**2)/(len(x))))*(np.sqrt(sum((y-y_mean)**2)/(len(x))))
print(fenzi/fenmu)# computer_value 计算的相关性系数   # 计算机计算皮尔逊相关系数
r = pearsonr(x,y)
print(r)

(3)主成分分析
主要保留的特征为==信息波动大,方差大的数据进行保留

# 主成分分析
from sklearn.decomposition import PCA
pca = PCA(n_components=5)  # 最后保留5个特征

注:训练器的区别::

fit_transform == 对训练器中中的数据进行计算 ,将初始化后的模型对原始数据进行转换
fit == 对训练器中的模型参数进行初始化 , 将数据保存在transfer中。
transform == 将保存在训练器中的参数 进行调用,对数据进行 标准归一化操作

五、模型的训练与调优

1、常用的模型训练的距离计算方法

欧氏距离

两点之间斜边的距离

曼哈顿距离

两点之间直角边的距离

2、KNN算法

from sklearn.neighbors import KNeighborsClassifier
# 导入K分类模块库
model = KNeighborsClassifier(n = 4)
# K折交叉验证
from sklearn.model_selection import StratifiedKFold
model =StratifiedKFold(n_splits=5,shuffle = True,random_state=66)
for train_index,test_index in model.split(x,y):…………  进行模型的KNN 模型预测…………

3、模型的保存与加载

# 模型的保存与加载
import joblib
joblib.dump(model,'./data/model.pxt')
# 模型的加载
model = joblib.load('./data/model.pxt')

六、贝叶斯算法

# 手动实现朴素贝叶斯
import pandas as pd 
import numpy as npdata = pd.read_excel('byeas.xls')
data = np.array(data)
x,y = data[:,[0,1,2]],data[:,3]# 计数
"""
p(a|X) = p(X|a)* p(a)/p(X)
p(X|a) = p(x1,x2,x3...xn|a) = p(x1|a)*p(x2|a)*p(x3|a)...p(xn|a)
p(X) = p(x1,x2,x3...xn) = p(x1)*p(x2)*p(x3)...p(xn)
p(a|X) = p(x1|a)*p(x2|a)*p(x3|a)...p(xn|a) * p(a) / p(x1)*p(x2)*p(x3)...p(xn)
"""
p_0 = np.unique(y,return_counts=True)[1][0] 
p_1 = np.unique(y,return_counts=True)[1][1] 
all_count_bad = np.zeros((1,7),dtype=np.int32)
all_count_good = np.zeros((1,7),dtype=np.int32)n = len(y)
for i in range(n):if y[i] == 0 :# 坏瓜if x[i,0] == 0:all_count_bad[0,0] +=1if x[i,0] == 1:all_count_bad[0,1] +=1if x[i,1] == 0:all_count_bad[0,2] +=1if x[i,1] == 1:all_count_bad[0,3] +=1if x[i,2] == 1:all_count_bad[0,4] +=1if x[i,2] == 2:all_count_bad[0,5] +=1 if x[i,2] == 3:all_count_bad[0,6] +=1 else:# 坏瓜if x[i,0] == 0:all_count_good[0,0] +=1if x[i,0] == 1:all_count_good[0,1] +=1if x[i,1] == 0:all_count_good[0,2] +=1if x[i,1] == 1:all_count_good[0,3] +=1if x[i,2] == 1:all_count_good[0,4] +=1if x[i,2] == 2:all_count_good[0,5] +=1 if x[i,2] == 3:all_count_good[0,6] +=1  """
预测瓜的好坏 [1 1 3 ]
"""
# 预测是好瓜的概率
p_good =( p_1 / len(y) ) *  (all_count_good[0,1]/p_1 ) * (all_count_good[0,3]/p_1) * (all_count_good[0,6]/p_1)
# 预测是坏瓜的概率
p_bad =( p_0 / len(y) ) *  (all_count_bad[0,1]/p_0 ) * (all_count_bad[0,3]/p_0) * (all_count_bad[0,6]/p_0)print("最终预测的结果为:",[1 if p_good > p_bad else 0])"""
预测瓜的好坏 [0 0 2 ]
"""
# 预测是好瓜的概率
p_good =( p_1 / len(y) ) *  (all_count_good[0,0]/p_1 ) * (all_count_good[0,2]/p_1) * (all_count_good[0,5]/p_1)
# 预测是坏瓜的概率
p_bad =( p_0 / len(y) ) *  (all_count_bad[0,0]/p_0 ) * (all_count_bad[0,2]/p_0) * (all_count_bad[0,5]/p_0)print("最终预测的结果为:",[1 if p_good > p_bad else 0])
# 计算机实现朴素贝叶斯
# 计算机预测代码实现
from sklearn.naive_bayes import MultinomialNB
import pandas as pd
import numpy as np
bytes = MultinomialNB()
data = pd.read_excel('byeas.xls')
data = np.array(data)
x_train,y_train = data[:,0:3],data[:,-1]
model = bytes.fit(x_train,y_train)
print(model.predict(np.array([[1,1,3]])))
print(model.predict(np.array([[0,0,2]])))

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

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

相关文章

day03(单片机高级)RTOS

目录 RTOS(实时操作系统) 裸机开发模式 轮询方式 前后台(中断方式) 改进(前后台(中断))定时器 裸机进一步优化 裸机的其他问题 RTOS的概念 什么是RTOS 为什么要使用 RTOS RTOS的应用场景 RTOS的…

Hello-Go

Hello-Go 环境变量 GOPATH 和 GOROOT :不同于其他语言,go中没有项目的说法,只有包,其中有两个重要的路径,GOROOT 和 GOPATH Go开发相关的环境变量如下: GOROOT:GOROOT就是Go的安装目录&…

pytorch官方FasterRCNN代码详解

本博文转自捋一捋pytorch官方FasterRCNN代码 - 知乎 (zhihu.com),增加了其中代码的更详细的解读,以帮助自己理解该代码。 代码理解的参考Faster-RCNN全面解读(手把手带你分析代码实现)---前向传播部分_手把手faster rcnn-CSDN博客 1. 代码结构 作为 to…

全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS系统定制开发

8、RTOS系统定制开发 此处以在rtos/components/aw目录下创建一个简单的软件包为例,帮助客户了解RTOS环境,为RTOS系统定制开发提供基础。 RTOS环境下的软件包主要由三部分组成,源文件,Makefile,Kconfig,如下…

springboot实战(13)(@PatchMapping、@RequestParam、@URL、ThreadLocal线程局部变量)

目录 一、PATCH请求方式。 二、实现用户更新头像功能。 三、注解RequestParam。 四、注解URL。(对传来的参数是否是合法地址进行校验) 一、PATCH请求方式。 patch中文翻译:局部、小块。PATCH 请求主要用于对已存在的资源进行局部修改&#xf…

nvm安装node遇到的若干问题(vscode找不到npm文件、环境变量配置混乱、npm安装包到D盘)

问题一:安装完nvm后需要做哪些环境变量的配置? 1.打开nvm文件夹下的setting文件,设置nvm路径和安装node路径,并添加镜像。 root: D:\software\nvm-node\nvm path: D:\software\nvm-node\nodejs node_mirror: https://npmmirror.c…

面向FWA市场!移远通信高性能5G-A模组RG650V-NA通过北美两大重要运营商认证

近日,全球领先的物联网整体解决方案供应商移远通信宣布,其旗下符合3GPP R17标准的新一代5G-A模组RG650V-NA成功通过了北美两家重要运营商认证。凭借高速度、大容量、低延迟、高可靠等优势,该模组可满足CPE、家庭/企业网关、移动热点、高清视频…

2024年11月21日Github流行趋势

项目名称:twenty 项目维护者:charlesBochet, lucasbordeau, Weiko, FelixMalfait, bosiraphael项目介绍:正在构建一个由社区支持的现代化Salesforce替代品。项目star数:21,798项目fork数:2,347 项目名称:p…

AWTK 最新动态:支持鸿蒙系统(HarmonyOS Next)

HarmonyOS是全球第三大移动操作系统,有巨大的市场潜力,在国产替代的背景下,机会多多,AWTK支持HarmonyOS,让AWTK开发者也能享受HarmonyOS生态的红利。 AWTK全称为Toolkit AnyWhere,是ZLG倾心打造的一套基于C…

docker 配置同宿主机共同网段的IP 同时通过通网段的另一个电脑实现远程连接docker

docker配置网络 #宿主机执行命令 ifconfig 查询对应的主机ip 子网掩码 网关地址 #[网卡名称]:inet[主机IP] netmask[子网掩码] broadcast[网关地址]这里需要重点关注:eno1[网卡名称]以及【192.168.31.225】网关地址 在宿主机执行docker命令创建一个虚拟…

使用 Elastic AI Assistant for Search 和 Azure OpenAI 实现从 0 到 60 的转变

作者:来自 Elastic Greg Crist Elasticsearch 推出了一项新功能:Elastic AI Assistant for Search。你可以将其视为 Elasticsearch 和 Kibana 开发人员的内置指南,旨在回答问题、引导你了解功能并让你的生活更轻松。在 Microsoft AI Services…

React (三)

文章目录 项目地址十二、性能优化12.1 使用useMemo避免不必要的计算12.2 使用memo缓存组件,防止过度渲染12.3 useCallBack缓存函数12.4 useCallBack里访问之前的状态(没懂)十三、Styled-Components13.1 安装13.2给普通html元素添加样式13.3 继承和覆盖样式13.4 给react组件添…

Etcd 框架

基本了解 客户端、长连接与租约的关系 客户端对象 etcd的客户端对象是用户与etcd服务进行交互的主要接口,主要功能就是存储、通知和事务等功能访问 键值存储:客户端通过put 和 get操作存储数据;数据存储在etcd的层级化键值数据库中监听器&a…

IDEA2023 创建SpringBoot项目(一)

一、Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 二、快速开发 1.打开IDEA选择 File->New->Project 2、…

教育数字化转型新时代:探索智慧学习空间的无限可能

在信息技术的浪潮推动下,教育行业正迎来一场前所未有的变革。这场变革的核心在于教育数字化转型,它要求我们重新审视和构建传统的学习模式,以适应快速变化的社会需求。在这个过程中,智慧学习空间作为数字化转型的重要成果&#xf…

LSTM原理解读与实战

在RNN详解及其实战中,简单讨论了为什么需要RNN这类模型、RNN的具体思路、RNN的简单实现等问题。同时,在文章结尾部分我们提到了RNN存在的梯度消失问题,及之后的一个解决方案:LSTM。因此,本篇文章主要结构如下&#xff…

【成品文章+四小问代码更新】2024亚太杯国际赛B题基于有限差分格式的空调形状优化模型

这里仅展示部分内容,完整内容获取在文末! 基于有限差分格式的空调形状优化模型 摘 要 随着科技进步,多功能环境调节设备成为市场趋势,集成了空调、加湿器和空气 净化器功能的三合一设备能提供更舒适健康的室内环境。我们需要分析…

中国省级新质生产力发展指数数据(任宇新版本)2010-2023年

一、测算方式:参考C刊《财经理论与实践》任宇新(2024)老师的研究,新质生产力以劳动者劳动资料劳动对象及其优化组合的质变为 基本内涵,借 鉴 王 珏 和 王 荣 基 的 做 法构建新质生产力发展水平评价指标体系如下所示&a…

简单理解下基于 Redisson 库的分布式锁机制

目录 简单理解下基于 Redisson 库的分布式锁机制代码流程:方法的调用:具体锁的实现:riderBalance 方法:tryLock 方法(重载):tryLock 方法(核心实现): 简单理解…

Diving into the STM32 HAL-----DAC笔记

根据所使用的系列和封装,STM32微控制器通常只提供一个具有一个或两个专用输出的DAC,除了STM32F3系列中的少数零件编号实现两个DAC,第一个具有两个输出,另一个只有一个输出。STM32G4 系列的一些较新的 MCU 甚至提供多达 5 个独立的…