机器学习2

ops/2024/11/20 4:50:18/

三、特征工程

机器学习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.ppmy.cn/ops/135153.html

相关文章

【python】使用 DrissionPage 库进行网页自动化操作和数据提取

使用 DrissionPage 库进行网页自动化操作和数据提取 简介 随着自动化测试、数据抓取和网页交互应用的日益增多,Python 作为一种功能强大且易于学习的编程语言,成为了开发人员的首选工具。在众多的自动化库中,DrissionPage 作为一个新兴的库…

PyTorch:如何使用TensorBoard优化和监控深度学习模型

如何使用TensorBoard优化和监控深度学习模型 为了提供一个更加详细和完整的指南关于如何使用 TensorBoard 进行深度学习模型的监控与优化,我们将从TensorBoard的基础知识开始,一步步探讨如何设置和利用其各项功能。 1. TensorBoard简介与基本架构 Ten…

docker-hub 无法访问,使用windows魔法拉取docker images再上传到linux docker环境中

云机的服务器是可以docker拉取镜像的,但是本地的虚拟机、物理服务器等网络环境不好的情况,是无法访问docker-hub的,即使更换了docker镜像源国内源也无法使用。 本文章使用 在魔法网络环境下的windows,下载docker images后&#xf…

638. 大礼包

638. 大礼包 题目链接&#xff1a;638. 大礼包 代码如下&#xff1a; class Solution { public:int shoppingOffers(vector<int>& price, vector<vector<int>>& special, vector<int>& needs) {//过滤不需要计算的大礼包&#xff0c;只…

websocket身份验证

websocket身份验证 前言 上一集我们就完成了websocket初始化的任务&#xff0c;那么我们完成这个内容之后就应该完成一个任务&#xff0c;当客户端与服务端连接成功之后&#xff0c;客户端应该主动发起一个身份认证的消息。 身份认证proto 我们看一眼proto文件的内容。 我…

git相关知识

前言&#xff1a;在学习git之前首先需要了解几个概念&#xff1a;工作区&#xff0c;暂存区&#xff0c;版本库。 工作区&#xff1a;是电脑上写代码或者文件的目录。 暂存区&#xff1a;一般存放在.git目录下的index中&#xff0c;也称索引。&#xff08;git add&#xff09…

Executor和Service

Executor和Service是Android开发中两个重要的概念&#xff0c;它们都用于处理后台任务&#xff0c;但有着不同的用途和特点。让我们来详细比较一下&#xff1a; 1. Executor&#xff08;执行器&#xff09;&#xff1a; 定义&#xff1a;Executor是一个接口&#xff0c;用于管…

Windows系统 ElasticSearch,分词器、Kibana安装

目录 1.wins安装ElasticSearch1.下载es安装包2.下载分词器3.注意事项4.学会看报错日志 2.将 elasticsearch 以服务的方式安装安装ES解压到根盘符下&#xff0c;如C或E盘等&#xff0c;因为 E:\Program Files文件夹下的都是默认的只读权限&#xff0c;所以换到没有只读权限&…