机器学习2

三、特征工程

接机器学习1

4、特征降维

4.2、主成分分析PCA

        从原始特征空间中找到一个新的坐标系统,使得数据在新坐标轴上的投影能够最大程度地保留数据的方差,同时减少数据的维度。

        保留信息/丢失信息=信息保留的比例

        from sklearn.decomposition import PCA

        参数:n_coponents (小数表示信息比列,整数表示维度,也就是特征多少)

from sklearn.decomposition import PCA
data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]
# 实例化一个转化器对象,降维后保留百分之九十五的信息
transfer1 = PCA(n_components=0.95)
data_new1 = transfer1.fit_transform(data)
transfer2 = PCA(n_components=2)
data_new2 = transfer2.fit_transform(data)
print("data_new1:\n",data_new1)
print("data_new2:\n",data_new2)

四、常用算法分类以及步骤

1、实例化预估器

        estimator = 预估器方法()

1.1、用于分类的预估器

        sklearn.neighbors.KNeighborsClassifier    k-近邻
        sklearn.naive_bayes.MultinomialNB    贝叶斯
        sklearn.linear_model.LogisticRegressioon     逻辑回归
        sklearn.tree.DecisionTreeClassifier     决策树
        sklearn.ensemble.RandomForestClassifier    随机森林

1.2、用于回归的预估器

         sklearn.linear_model.LinearRegression    线性回归
        sklearn.linear_model.Ridge     岭回归

1.3、用于无监督学习的预估器

        sklearn.cluster.KMeans    聚类

2、训练( fit

        estimator.fit(x_train, y_train) 

3、评估

3.1、直接对比 predict

        y_predict = estimator.predict(x_test)
        y_test == y_predict

3.2、计算准确率 score

         accuracy = estimator.score(x_test, y_test)

4、保存模型

        import joblib

4.1、保存模型

        joblib.dunm(预估器实列化的名称,"路径/名称.pkl")

 4.2、使用模型

        joblib.load("路径/名称.pkl")

5、模型选择与调优

        from sklearn.modele_selection import 具体方法名称

        四类方法案例看第五点的KNN算法优化。

5.1、保留交叉验证

        train_test_split,简单划分数据集为train和test两类

        缺点:1、造成了部分数据不能用于训练模型。2、若类型多,单个类型数据少,那么可能训练没有该类数据,那么之类数据不能被预测。

5.2、k-折交叉验证

        KFold/,将数据集划分为k个份数,使用一个份数作为测试,剩下全部用于训练,重复k次,每个数据都能用于训练和测试。

        方法:调用预估器的split方法划分数据,返回训练下标和测试下标(迭代器,每次返回一种);在之后正常fit和score得到本次数据集结果,循环到迭代器空。

        缺点:并未解决多类别少数据造成的训练类别缺失导致准确率低。

5.3、分层交叉验证

        tratifiedKFold,在KFold基础上添加分层,保障每次都由全部的类别可以训练。(流程、参数、结果的操作方法与KFold一致)

5.4、超参数搜索(网格搜索)

        上述三类验证都是基于明确操作之后的方法,网格搜索可以变更算法的参数,得到最优设置。

        方法:GridSearchCV , 参数1为算法对象;参数2为param_grid 字典形式,键为算法参数名称,值为设置对象,一般为可迭代对象);参数3为cv ,整数,表示交叉验证次数。在KNN中为estimator = GridSearchCV(算法实例化对象, param_grid={"n_neighbors": [1, 3, 5, 7, 9, 11]}, cv=10)

        属性:best_params_ 最优参数

                   best_score_   最优分数

                   best_index_  最优参数下标

                   best_estimator_ 最优的预估器

                   cv_results_   交叉验证描述

五、KNN算法

1、样本距离

1.1、欧式距离

        每个方向上的差距平方之后的和的开方, d(A, B) = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2}(方法是勾股定理的多维使用)

1.2、曼哈顿距离

        每个方向的差距的绝对值之和, d(A, B) =|a_1 - b_1| + |a_2 - b_2| + \cdots + |a_n - b_n|

2、KNN算法原理

        某个样本的类别:在特征空间内找出距离最近的多个样本,判断这些样本类别最多的一个就是该样本类别。

        缺点:对于大量数据集,该方法会全部进行距离运算,就造成了数据计算量太大

3、API

from sklearn.neighbors import KNeighborsClassifier

参数:n_neighbors 整数,代表最近的多少个样本

属性:fit 传入训练数据和训练数据目标

           predict 根据传入的测试数据返回类型

           score 传入测试数据和测试数据目标,得到准确率

3.1、保留交叉验证

from sklearn.datasets import load_wine
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 生成标准化工具
transfer = StandardScaler()
# 加载数据集
wine = load_wine()
# 将数据集的数据转化成标准数据
wine_date1 = transfer.fit_transform(wine.data)
# 将标准数据和目标划分
x_train, x_test, y_train, y_test = train_test_split(wine_date1, wine.target, train_size=0.75, random_state=666, stratify=wine.target)
print(x_train.shape,y_train.shape,x_test.shape,y_test.shape)# 生成模型工具,判断距离最近的七个内容
model = KNeighborsClassifier(n_neighbors=7)
# 传入标准化的训练数据和对应结果
model.fit(x_train, y_train)
# 传入标准化的测试数据得到模型预测结果
# 方式1
y_test_result = model.predict(x_test)
res = y_test_result==y_test
# 方式2
score = model.score( x_test,y_test)
score

 3.2、KFold

from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import KFold
from sklearn.preprocessing import StandardScaler# 获取数据集和目标集
x,y = load_iris(return_X_y=True)
# 使用分层k折交叉验证  n_splits折叠次数, shuffle 打乱顺序 ,random_state 随机值,保障重复
folder = KFold(n_splits=5, shuffle=True, random_state=666)
# 根据分层折叠,划分数据集并返回下标
iter = folder.split(x,y)
# 创建模型对象
knn = KNeighborsClassifier(n_neighbors=5)
# 创建标准化工具
transfer = StandardScaler()
# 使用空列表存储五次折叠中的每个计算结果
score = []
score_standard = []
# 循环取出五次折叠的数据下标
for train_index, test_index in iter:# 未标准化数据knn.fit(x[train_index],y[train_index])score.append(knn.score(x[test_index], y[test_index]))# 标准化数据# 将训练数据标准化x_train_data = transfer.fit_transform(x[train_index])# genuine下标获取对应训练数据和目标结果传入模型训练knn.fit(x_train_data,y[train_index])# 对测试数据标准化x_test_data = transfer.transform(x[test_index])# 根据测试数据获得准确率,存入列表score_standard.append(knn.score(x_test_data, y[test_index]))
# 根据分层折叠,划分数据集并返回下标
print(score,'\n', sum(score)/len(score))
print(score_standard,'\n', sum(score_standard)/len(score_standard))

 3.3、分层交叉验证

from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.preprocessing import StandardScaler# 获取数据集和目标集
x,y = load_iris(return_X_y=True)
# 使用分层k折交叉验证  n_splits折叠次数, shuffle 打乱顺序 ,random_state 随机值,保障重复
folder = StratifiedKFold(n_splits=5, shuffle=True, random_state=666)
# 根据分层折叠,划分数据集并返回下标
iter = folder.split(x,y)
# 创建模型对象
knn = KNeighborsClassifier(n_neighbors=5)
# 创建标准化工具
transfer = StandardScaler()
# 使用空列表存储五次折叠中的每个计算结果
score = []
score_standard = []
# 循环取出五次折叠的数据下标
for train_index, test_index in iter:# 未标准化数据knn.fit(x[train_index],y[train_index])score.append(knn.score(x[test_index], y[test_index]))# 标准化数据# 将训练数据标准化x_train_data = transfer.fit_transform(x[train_index])# genuine下标获取对应训练数据和目标结果传入模型训练knn.fit(x_train_data,y[train_index])# 对测试数据标准化x_test_data = transfer.transform(x[test_index])# 根据测试数据获得准确率,存入列表score_standard.append(knn.score(x_test_data, y[test_index]))
# 根据分层折叠,划分数据集并返回下标
print(score,'\n', sum(score)/len(score))
print(score_standard,'\n', sum(score_standard)/len(score_standard))

3.4、超参数搜索

from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV# 获取数据集和目标集
x,y = load_iris(return_X_y=True)
#x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25,shuffle=True, random_state=666)
# 创建模型对象
knn = KNeighborsClassifier()
# 进行网格搜索和交叉验证
knn = GridSearchCV(knn,param_grid={'n_neighbors' :range(1,11,2)},cv=15)
knn.fit(x,y)print("最佳参数:\n", knn.best_params_) 
# 最佳结果:best_score_
print("在训练集中的准确率:\n", knn.best_score_)  
# 最佳估计器:best_estimator_
print("最佳估计器:\n", knn.best_estimator_) 
# 交叉验证结果:cv_results_
print("交叉验证过程描述:\n", knn.cv_results_)
#最佳参数组合的索引:最佳k在列表中的下标
print("最佳参数组合的索引:\n",knn.best_index_)

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux之权限】提升篇

前言 在前两篇文章里,我们已经学习了Linux中权限的理论、实践和重点,接下来我们将进一步提升对Linux权限的全面认知。虽是拓展,其实还是重点。 本文内容并不多,那我们就开始吧。 目录的权限该如何理解呢? 如果我想进…

亮数据结合AI大模型,实现数据自由

目录 一、获取网络数据的挑战1、反爬虫机制的威胁2、IP封锁与访问频率控制3、数据隐私与法律合规 二、亮数据动态代理:数据采集的最佳拍档1、高质量IP资源2、智能调度与自动切换3、合规与隐私保护4、多场景应用支持 三、使用亮数据代理 IP进行网络数据抓取1、引入 r…

elasticsearch是如何实现master选举的?

大家好,我是锋哥。今天分享关于【elasticsearch是如何实现master选举的?】面试题。希望对大家有帮助; elasticsearch是如何实现master选举的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…

EtherNet/IP转Profinet网关连接发那科机器人配置实例解析

本案例主要展示了如何通过Ethernet/IP转Profinet网关实现西门子1200PLC与发那科搬运机器人的连接。所需的设备有西门子1200PLC、开疆智能Ethernet/IP转Profinet网关以及Fanuc机器人。 具体配置步骤:打开西门子博图配置软件,添加PLC。这是配置的第一步&am…

Uniapp运行环境判断和解决跨端兼容性详解

Uniapp运行环境判断和解决跨端兼容性 开发环境和生产环境 uniapp可通过process.env.NODE_ENV判断当前环境是开发环境还是生产环境,一般用于链接测试服务器或者生产服务器的动态切换。在HX中,点击运行编译出来的代码是开发环境,点击发行编译…

C语言 for 循环:解谜数学,玩转生活!

放在最前面的 🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼 🎉🎉我的C语言初阶合集:C语言初阶合集,希望能…

【专题】2024AIGC创新应用洞察报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38310 在科技日新月异的今天,人工智能领域正以前所未有的速度发展,AIGC(人工智能生成内容)成为其中最耀眼的明珠。从其应用场景的不断拓展,到对各行业的深刻变革&#xff0…

.NET桌面应用架构Demo与实战|WPF+MVVM+EFCore+IOC+DI+Code First+AutoMapper

目录 .NET桌面应用架构Demo与实战|WPFMVVMEFCoreIOCDICode FirstAutoPapper技术栈简述项目地址:功能展示项目结构项目引用1. 新建模型2. Data层,依赖EF Core,实现数据库增删改查3. Bussiness层,实现具体的业务逻辑4. Service层&am…

两种柑橘物种中WRKY转录因子的鉴定和比较-文献精读82

Genome-wide identification and comparative expression profiling of the WRKY transcription factor family in two Citrus species with different Candidatus Liberibacter asiaticus susceptibility 全基因组范围内鉴定和比较两种对柑橘黄龙病菌(Candidatus …

Kafka中ACKS LSO LEO LW HW AR ISR OSR解析

名称解释 ACKS(Acknowledgments)确认、回执 LW(Low watermark)低水位、LSO(Log start offset)起始偏移量 HW(High watermark)高水位 LEO(Log end offset)…

vue实现展示并下载后端返回的图片流

// 点击下载 downLoadCode() {const image new Image();image.setAttribute("crossOrigin", "anonymous");image.onload () > {const canvas document.createElement("canvas");canvas.width image.width;canvas.height image.height;c…

c++:模板

1.泛型编程 在认识模板之前,我们首先要认识泛型编程 泛型编程是一种编程范式,它使得算法和数据结构能够独立于特定数据类型进行设计和实现。通过使用泛型,开发者可以编写一次代码,然后在不同的数据类型上进行重用,从…

Linux下安装配置redis详细教程,并配置哨兵模式,redis配置文件中文详解

redis版本为redis-3.2.12,使用工具将安装包上传到data目录。 redis.jpeg 在data目录下创建文件夹redis,将redis安装在此目录。 第一步:解压。 cd data tar -zxvf redis-3.2.12.tar.gz第二步:安装,PREFIX/data/redis用…

R语言数据分析案例45-全国汽车销售数据分析(可视化与回归分析)

一、研究背景 随着经济的发展和人们生活水平的提高,汽车已经成为人们日常生活中不可或缺的交通工具之一。汽车市场的规模不断扩大,同时竞争也日益激烈。对于汽车制造商和经销商来说,深入了解汽车销售数据背后的规律和影响因素,对…

Java 网络编程:Socket 与网络通信

1 引言 在古代,由于通信不便利,人们利用鸽子的飞行能力和方向辨识能力,驯化鸽子进行消息传递,即所谓的“飞鸽传书”。在现代计算机网络中,套接字(Socket)扮演了类似的角色。套接字是应用程序通…

编程之路,从0开始:结构体详解

目录 前言 正文 1、结构体引入 2、结构体的声明 3、typedef 4、结构体的匿名声明 5、结构的自引用 (1)链表 (2)自引用 6、结构体内存对齐 (1)对齐规则 (2)题目 &#x…

Flink监控checkpoint

Flink的web界面提供了一个选项卡来监控作业的检查点。这些统计信息在任务终止后也可用。有四个选项卡可以显示关于检查点的信息:概述(Overview)、历史(History)、摘要(Summary)和配置(Configuration)。下面依次来看这几个选项。 Overview Tab Overview选项卡列出了以…

04-转录组下游分析-标准化、聚类、差异分析

准备工作 1.数据标准化 标准化前需要进行数据预处理 过滤低表达的基因,并检查是否有异常样本 以下是常见的几种过滤方式(过滤的标准都可以自己调整) 1:在至少在75%的样本中都表达的基因(表达是指在某个样本中count值…

常见网络厂商设备默认用户名/密码大全

常见网络厂商的默认用户名/密码 01 思科 (Cisco) 设备类型:路由器、交换机、防火墙、无线控制器 默认用户名:cisco 默认密码:cisco 设备类型:网管型交换机 默认用户名:admin 默认密码:admin 02 华…

Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系

一.什么是Spring?它解决了什么问题? 1.1什么是Spring? Spring,一般指代的是Spring Framework 它是一个开源的应用程序框架,提供了一个简易的开发方式,通过这种开发方式,将避免那些可能致使代码…