军用大数据 - Spark机器学习

news2025/1/13 2:54:19

文章目录

  • 第1关:Iris 分类
    • 任务描述
    • 相关知识
      • 1:观察数据集
      • 2:RFormula 特征提取
      • 3:pandas 的 concat 函数
    • 编程要求
  • 代码实现
  • ————————————————————————————————————————
  • 第2关:图片识别 - 坦克类型分类
    • 任务描述
    • 相关知识
      • 1:数据集介绍
      • 2:加载图片数据集
      • 3:将一维数组转换成 Spark 中的向量
      • 4:将向量与标签进行绑定并将其转换成Dataframe
      • 5:Spark 加载数据集
      • 6:将数据集拆分训练集和测试集
      • 7:创建LR分类器
      • 8:训练模型
    • 编程要求
    • 测试说明
  • 代码实现

第1关:Iris 分类

任务描述

本关任务:使用 pyspark ml 的LogisticRegression分类器完成 Iris 分类任务。

相关知识

1:观察数据集

我们本次使用的数据集是sklearn自带的数据集Iris。

接下来,我们来了解下Iris数据集的数据吧!

示例代码:

iris = load_iris()
features = pandas.DataFrame(iris.data, columns=iris.feature_names)
target = pandas.DataFrame(iris.target, columns=['label'])
print(features.head())
print(target.head())

打印结果:

   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                5.1               3.5                1.4               0.2
1                4.9               3.0                1.4               0.2
2                4.7               3.2                1.3               0.2
3                4.6               3.1                1.5               0.2
4                5.0               3.6                1.4               0.2
   label
0      0
1      0
2      0
3      0
4      0

简单来说明下数据集,我们第一个打印输出的结果集是Iris的特征,第二个打印输出的结果集是Iris的标签,也就是说我们接下来就是通过这些特征来训练模型,再通过模型预期一些没有标签的特征数据的标签。

2:RFormula 特征提取

RFormula 借鉴了 R 语言的 R model formula 进行特征选择。

RFormula 仅支持部分 R 操作,包括:

  1. ~ 分隔因变量(LHS 左侧)和自变量(RHS 右侧);
  2. + 合并变量,+0 意为移除截距;
  3. - 移除变量,-1 意为移除截距;
  4. : 变量相交,(数字型值相乘,类别型值二值化);
  5. . 除了因变量的所有变量。

上面的介绍是否有点抽象?

接下来,我们看下面的例子进行案例讲解吧!

假设有一个4列的dataframe:

idcountryhourclicked
7“US”181.0
8“CA”120.0
9“NZ”150.0

如果使用RFormula,并且构建公式: clicked ~ country + hour,它表示通过country,hour这两个特征去预测clicked这个因变量。于是我们会得到以下dataframe:

idcountryhourclickedfeatureslabel
7“US”181.0[0.0, 0.0, 18.0]1.0
8“CA”120.0[0.0, 1.0, 12.0]0.0
9“NZ”150.0[1.0, 0.0, 15.0]0.0

features列为转换后的特征表示,因为country是字符串类型的类编变量,故进行one-hot编码变成了两列, hour是数值型的,故转换成double类型。label列是因变量click列,双精度的类型保持不变。

示例:

from pyspark.sql import SparkSession
from pyspark.ml.feature import RFormula
if __name__ == '__main__':
    spark = SparkSession.builder.appName("demo").master("local[*]").getOrCreate()
    df = spark.createDataFrame((
        (7, "US", 18, 1.0),
        (8, "CA", 12, 0.0),
        (9, "NZ", 15, 0.0)
    )).toDF("id", "country", "hour", "clicked")
    df.show()
    formula = RFormula(formula="clicked ~ country + hour")
    formula.fit(df).transform(df).show()

打印结果:

+---+-------+----+-------+--------------+-----+
|id |country|hour|clicked|feature       |label|
+---+-------+----+-------+--------------+-----+
|7  |US     |18  |1.0    |[0.0,0.0,18.0]|1.0  |
|8  |CA     |12  |0.0    |[1.0,0.0,12.0]|0.0  |
|9  |NZ     |15  |0.0    |[0.0,1.0,15.0]|0.0  |
+---+-------+----+-------+--------------+-----+
+--------------+-----+
|feature       |label|
+--------------+-----+
|[0.0,0.0,18.0]|1.0  |
|[1.0,0.0,12.0]|0.0  |
|[0.0,1.0,15.0]|0.0  |
+--------------+-----+

3:pandas 的 concat 函数

concat 函数是在pandas的方法,可以将数据根据不同的轴作简单的融合。

源码:

def concat(
    objs,
    axis = 0,
    join = "outer",
    join_axes = None,
    ignore_index = False,
    keys = None,
    levels = None,
    names = None,
    verify_integrity = False,
    sort = None,
    copy = True,
):# 省略

常用参数:

objs: series,dataframe 或者是 panel 构成的序列 lsit ;
axis: 需要合并链接的轴,0是行,1是列 ;
join:连接的方式 inner,或者 outer。

示例:

import pandas
df1 = pandas.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df2 = pandas.DataFrame([["A", "B", "C"], ["D", "E", "F"], ["G", "H", "I"]])
df3 = pandas.concat([df1, df2], axis=1)
print(df3.head())
df4 = pandas.concat([df1, df2], axis=0)
print(df4.head())

打印结果:

   0  1  2  0  1  2
0  1  2  3  A  B  C
1  4  5  6  D  E  F
2  7  8  9  G  H  I
   0  1  2
0  1  2  3
1  4  5  6
2  7  8  9
0  A  B  C
1  D  E  F

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,实现Iris 种类分类的模型训练,具体需求如下:

1:利用pandas将原始数组转换成DataFrame矩阵;

2:利用concat将特征与目标矩阵按行连接;

3:利用SparkSession将本地的pandas.DataFrame上传到Spark集群中,变成了Spark中的分布式DataFrame;

4:利用RFormula将DataFrame中属于特征的列提取到features字段中,将目标提取到labal字段;

5:将数据随机切分成8:2的训练集与测试集;

6:利用spark的逻辑回归分类器进行分布式训练fit;

7:然后返回元组,元组构造为(模型、测试集)。

代码实现

————————————————————————————————————————

# -*- coding: utf-8 -*-
from pyspark.sql import SparkSession
from sklearn.datasets import load_iris
import pandas
from pyspark.ml.classification import LogisticRegression
from pyspark.mllib.evaluation import BinaryClassificationMetrics
from pyspark.ml.feature import RFormula


# 训练模型
def trainingModel(spark):
    # ********** Begin ********** #
    
    # 1.加载sklearn的训练数据
    iris = load_iris()

    # 2.特征矩阵
    features = pandas.DataFrame(iris.data, columns = iris.feature_names)

    # 3.目标矩阵
    targets = pandas.DataFrame(iris.target, columns = ['Species'])

    # 4.合并矩阵
    merged = pandas.concat([features, targets], axis = 1)
    
    # 5.创建spark DataFrame
    raw_df = spark.createDataFrame(merged)

    # 6.提取特征与目标
    fomula = RFormula(formula = 'Species ~ .')
    raw_df = fomula.fit(raw_df).transform(raw_df)
    # 7.拆分训练集和测试集
    train_df, test_df = raw_df.randomSplit([0.8, 0.2])

    # 8.创建LR分类器
    lr = LogisticRegression(family = "multinomial")
    
    # 9.训练
    model = lr.fit(train_df)

    # 10.返回(模型、测试集)
    return (model, test_df)
    # ********** End ********** #

第2关:图片识别 - 坦克类型分类

任务描述

本关任务:使用 pyspark ml 的LogisticRegression分类器完成 坦克类型分类任务。

相关知识

1:数据集介绍

三种坦克图片数据集,如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上有三种数据集,分别是以bmp-2开头的BMP-2步兵战车的图片、以btr-70开头的BTR-70装甲输送车的图片、以t-72开头的T-72主战坦克的图片。

2:加载图片数据集

我们可以使用opencv_python计算机视觉库来读取一幅图像。

在读取图像之前,我们需要对图像的构造有一定的理解,怎么理解呢?

简单来说图像就是一个矩阵,在OpenCV for Python中,图像就是NumPy中的数组!

我们知道图像就是一个矩阵了,之后我们通过代码来读取呢?

示例:

读入图像文件,返回numpy数组

img = cv2.imread('/root/1.jpg', cv2.IMREAD_GRAYSCALE)
rows, columns = img.shape

将二维数组转一维数组

img = img.reshape(rows*columns)

3:将一维数组转换成 Spark 中的向量

上一步我们将图片转换成一维的数组之后了,接下来我们将一维数组转换成 Spark 中的向量。

可能你会有疑问?为什么要将一维数组转换成 Spark 中的向量呢?

简单来说就是类型不匹配了。

示例:

import cv2
img = cv2.imread("testing2\\bmp-2-1.jpg", cv2.IMREAD_GRAYSCALE)
rows, columns = img.shape
img = img.reshape(rows * columns)
print(type(img))

结果如下:

<class 'numpy.ndarray'>

我们都知道numpy.ndarray是Python中的类型,Spark是由Scala编写的,它怎么可能识别的了numpy.ndarray类型呢?

那我们怎么将将一维数组转换成 Spark 中的向量呢?

很简单,直接使用from pyspark.ml.linalg import Vectors中的Vectors来进行转换即可!

在pyspark中,有两种向量,分别是稠密向量和稀疏向量。

DenseVector :稠密向量 其创建方式 Vector.dense(数据)

SparseVector :稀疏向量 其创建方式有两种:

方法一:Vector.sparse(向量长度,索引数组,与索引数组所对应的数值数组)

方法二:Vector.sparse(向量长度,(索引,数值),(索引,数值),(索引,数值),…(索引,数值))

比如向量(1,0,3,4)的创建有三种方法:

稠密向量:直接Vectors.dense(1,0,3,4)

稀疏向量:

方法一:Vector.sparse(4,(0,2,3),(1,3,4))

表示该向量的第0个,第2个,第3个位置,(1,3,4) 表示(0,2,3)位置对应的数值分别为1,3,4

方法二:Vector.sparse(4,(0,1),(2,3),(3,4))

(0,1)就是(索引,数值)的形式。位置0的数值为1, 位置2的数值为3,位置3的数值为4。

一般我们会直接将数组转换成稠密向量。

4:将向量与标签进行绑定并将其转换成Dataframe

上面的两步,我们已经加载了图片数据并将其转换成Spark中的向量了,但是这样还远远不够,为什么呢?

因为我将图片数据转换成向量之后,这样只能得出该图片的特征,但是我们还没有指定特征的标签。

我们回到最初加载图片数据那步,这里我们在读取图片数据的同时获取图片的文件名,我们通过文件名进行打标签,具体要求如下:

如果文件名包含 btr-70 ,label 设置为 0 ;

如果文件名包含 t-72 ,label 设置为 1;

其他的,label 设置为 2。

我们得到标签之后,我们将特征向量与该标签进行绑定,构建一个元组。

构建元组之后,我们使用pandas将元组数据加载成Dataframe并将特征向量列的列名设置为features,标签的列的列名设置为label。

为什么要这样做呢?

我们查看下LogisticRegression算法的源码

构造函数源码如下:

@keyword_only
    def __init__(self, featuresCol="features", labelCol="label", predictionCol="prediction",
                 maxIter=100, regParam=0.0, elasticNetParam=0.0, tol=1e-6, fitIntercept=True,
                 threshold=0.5, thresholds=None, probabilityCol="probability",
                 rawPredictionCol="rawPrediction", standardization=True, weightCol=None,
                 aggregationDepth=2, family="auto",
                 lowerBoundsOnCoefficients=None, upperBoundsOnCoefficients=None,
                 lowerBoundsOnIntercepts=None, upperBoundsOnIntercepts=None):
        super(LogisticRegression, self).__init__()
        self._java_obj = self._new_java_obj(
            "org.apache.spark.ml.classification.LogisticRegression", self.uid)
        self._setDefault(maxIter=100, regParam=0.0, tol=1E-6, threshold=0.5, family="auto")
        kwargs = self._input_kwargs
        self.setParams(**kwargs)
        self._checkThresholdConsistency()

通过__init__函数中的参数,我们可以看到featuresCol的默认值为features,labelCol的默认值为label。

通过pandas构建了 Dataframe之后指定了列名这样做的话,就可以不用设置featuresCol、labelCol了,同时增强了代码可读性。

5:Spark 加载数据集

上面我们已经把数据集处理完毕之后,然后我们可以通过Spark来加载数据集。

spark = SparkSession.builder.master("local[*]").appName("demo").getOrCreate()
sparkDF = spark.createDataFrame(df) # df是我们通过pandas构建的Dataframe

6:将数据集拆分训练集和测试集

上面我们把图片数据集加载到Spark中了,之后我们要把数据集划分成两部分,一部分为训练集,另一部分为测试集。

简单来说,训练集就是用来训练模型的,测试集就是来评测这样模型的好与坏的。

关于训练集与测试集的比例问题,一般来说训练集越多越好,我们一般将训练集与测试集的比例调整为8:2或者7:3。

train_df, test_df = sparkDF.randomSplit([0.7, 0.3])

7:创建LR分类器

逻辑回归是一种用于预测分类响应的流行方法。这是广义线性模型的一种特殊情况,可以预测结果的可能性。在spark.ml逻辑回归中,可以通过使用二项式逻辑回归来预测二进制结果,或者在使用多项式逻辑回归时可以将其预测为多类结果。使用该family 参数在这两种算法之间进行选择,或者将其保留为未设置状态,Spark会推断出正确的变体。

通过将family参数设置为“多项式”,可以将多项式逻辑回归用于二进制分类。它将产生两组系数和两个截距。

当对具有恒定非零列的数据集进行LogisticRegressionModel拟合而没有截距时,Spark MLlib为恒定非零列输出零系数。

创建LR分类器用来训练模型:

lr = LogisticRegression(family="multinomial")

8:训练模型

上一步,我们已经把LR分类器构建好了并且我们把数据集划分成训练集与测试集了,接下来我们就是训练模型了。

model = lr.fit(train_df)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,实现坦克种类分类的模型训练,具体需求如下:

1:补全 get_file_path函数,完成遍历目录获取图片路径列表功能;

2:补全img2vector函数,完成提取图片特征并将其转换成向量功能;

3:补全trainingModel函数,完成模型的训练,最后返回一个元组,元组构造为(测试集,模型)

测试说明

代码实现

平台会使用利用 Spark 的一个Metrics库对你训练的模型进行统计模型得分,如果模型的AUC值符合预期值,则通关。

import cv2
import os
import pandas as pd
from pyspark.mllib.evaluation import BinaryClassificationMetrics
from pyspark.sql import SparkSession
from pyspark.ml.linalg import Vectors
from pyspark.ml.classification import LogisticRegression, NaiveBayes, LinearSVC
from pyspark.ml.regression import LinearRegression


# 获取目录的所有文件,返回图片路径列表
def get_file_path(root_path):
    # ********** Begin ********** #
    file_list = []
    dir_or_files = os.listdir(root_path)
    for dir_file in dir_or_files:
        dir_file_path = os.path.join(root_path, dir_file)
        file_list.append(dir_file_path)
    return file_list
    # ********** End ********** #
    

# 提取图片特征并将其转换成向量,返回特征向量
def img2vector(imgfilename):
    # ********** Begin ********** #
    img = cv2.imread(imgfilename, cv2.IMREAD_GRAYSCALE)
    rows, columns = img.shape
    img = img.reshape(rows * columns)
    return Vectors.dense(img)
    # ********** End ********** #


# 训练模型,返回元组(测试集,模型)
def trainingModel(spark,root_path):
    datas = []
    # ********** Begin ********** #

    # 1. 获取 root_path 下的所有图片文件
    fileList = get_file_path(root_path)

    # 2.1 遍历图片文件列表,根据文件名给数据打标签
    """
        如果文件名包含 `btr-70` ,label 设置为 0 
        如果文件名包含 `t-72` ,label 设置为 1
        其他的,label 设置为 2
    """
    # 2.2 调用img2vector函数,提取图片特征并将其转换成向量
    # 2.3 将向量与标签(label)构建成元组并存储到 datas 列表中
    for x in fileList:
        vector = img2vector(x)
        if "btr-70" in x:
            label = 0
        elif "t-72" in x:
            label = 1
        else:
            label = 2
        datas.append((vector, label))
   
    # 3. 利用 pandas 将 datas 转换成 DataFrame 并将包含向量的列的列名设置为 features,包含标签(label) 的列的列名设置为 label
    df = pd.DataFrame(datas, columns=['features', 'label'])
    
    # 4. 使用 spark 加载 pandas 转换后的数据集 
    sparkDF = spark.createDataFrame(df)

    # 5. 将数据集拆分训练集和测试集
    train_df, test_df = sparkDF.randomSplit([0.7, 0.3])

    # 6. 创建LR分类器
    lr = LogisticRegression(family="multinomial")

    # 7. 训练模型
    model = lr.fit(train_df)

    # 8.返回元组(测试集,模型)
    return (test_df,model)
    # ********** End ********** #

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

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

相关文章

网络原理 --- 传输层Ⅲ TCP协议中的滑动窗口,流量控制和拥塞控制

文章目录网络原理传输层TCP协议4.滑动窗口5.流量控制6.拥塞控制总结网络原理 介绍TCP/IP协议中每一层里面的核心内容~ 应用层传输层网络层数据链路层物理层 传输层TCP协议 4.滑动窗口 TCP能够保证可靠传输,但是失去了效率! 但是TCP希望能够在保证可靠性的前提下,尽可能地提…

达梦数据库在不修改SQL的情况下为SQL指定HINT

前言 在Oracle中可以使用outline、SQL PROFILE等手段去在无需修改SQL语句的情况下&#xff0c;来保证SQL执行计划在不同硬件环境下相同&#xff0c;从而保证SQL语句在不同环境的执行效率。那么&#xff0c;在达梦数据库中则可以使用SF_INJECT_HINT系统函数达到类似的效果。 SF…

Java学习笔记 --- 异常

一、基本介绍 Java语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”。&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; 执行过程中所发生的异常事件可以分为两类 1、Error&#xff08;错误&#xff09;&#xff1a;Java虚拟机无法解决的严重问…

十月了,请问2022届的同学们都找到工作了吗?

今年的就业大环境就不多说了&#xff0c;大家都知道。一边是超千万规模的应届毕业生&#xff0c;叠加教培、地产等行业裁员&#xff1b;另一边则是疫情反复影响之下&#xff0c;企业瘦身裁员、停招、缩招。在白领性质的劳动力市场&#xff0c;劳动力供给严重大于需求&#xff0…

【C语言】解题训练

目录 字符串左旋 方法1 方法2 字符串旋转结果判断 方法1 方法2 杨氏矩阵 位段 题目1 题目2 联合体 题目1 题目2 有序序列合并 变种水仙花 找单身狗 字符串左旋 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到…

纷享销客联合B.P商业伙伴携手30+企业CEO走进南天信息

数字化智能化建设的当下&#xff0c;数字化服务商承担着承上启下的核心力量。企业数字化转型成为刚需&#xff0c;意味着ICT企业的市场前景持续乐观&#xff0c;但在疫情和竞争加剧之下&#xff0c;企业发展也遭遇增长的挑战&#xff0c;如何在数字中国的趋势之下&#xff0c;乘…

大学网课搜题公众号系统

大学网课搜题公众号系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xf…

【从小白到大白05】c和c++内存管理

c和c内存管理 文章目录c和c内存管理c内存管理方式new/delete操作内置类型new申请动态空间delete释放空间new和delete操作自定义类型operator new与operator delete函数new[]和delete[]定位new&#xff08;placement-new&#xff09;总结以上内存泄露以上就是全部内容啦&#xf…

WPS-JS宏开发-基础知识-03-三大基本结构

系统&#xff1a;Windows 11 软件&#xff1a;WPS表格11 本系列介绍一款类Excel的软件&#xff0c;WPS表格当然也是介绍其宏开发&#xff0c;不同的是&#xff0c;使用的JS宏会同样介绍多个系列&#xff0c;本系列介绍一些基础知识 Part 1&#xff1a; 三大逻辑结构 一个具体的…

如何给字符串字段加索引?

1.引例 现在的系统中&#xff0c;很多都会包含邮箱字段&#xff0c;那要如何给这个字段建立索引呢&#xff1f; 假设&#xff0c;现在维护了一个用户表&#xff0c;其中包含邮箱&#xff0c;定义如下&#xff1a; mysql>create table SUser(ID int primary key,email var…

OpenGL之多边形偏移、雾效、纹理映射

1.1 OpenGL中可以设置物体的点、线、面绘制模式。如果需要同时绘制多种模式&#xff0c;如下以面和线模式绘制两遍模型&#xff0c;可以看到线不连续&#xff0c;当镜头推远推近时会出现闪烁现象。 void glPolygonMode(GLenum face,GLenum mode);face :GL_FRONT&#xff0c;GL…

分治暴力求解最近点对问题 + 时间性能量化分析

Catalogue1 Intro2 Problem3 Time performance analysis4 Solution5 Reference1 Intro 本文旨在讨论分治和暴力在求解最近点对问题时的时间性能问题&#xff0c;关于解题部分不做过多讲解&#xff0c;只附上相关代码。 2 Problem 给定平面上N个点&#xff0c;找出其中的一对…

【Linux】第七章 进程控制(进程创建+进程终止+进程等待+进程替换+min_shell)

&#x1f3c6;个人主页&#xff1a;企鹅不叫的博客 ​ &#x1f308;专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接&#xff1a;代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

【路径规划-多式联运】基于遗传算法求解多式联运运输问题(考虑碳交易)附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

字符串和编码那些事

一、字符编码 1. ASCII字符编码 因为计算机只能处理数字&#xff0c;如果要处理文本&#xff0c;就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特&#xff08;bit&#xff09;作为一个字节&#xff08;byte&#xff09; 由于计算机是美国人发明的&#…

【Apache Spark 】第 11 章使用 Apache Spark 管理、部署和扩展机器学习管道

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

编程神器Copilot逐字抄袭他人代码?

自面世后就饱受争议的 GitHub Copilot 编程神器最近又遭遇舆论风暴。 日前,德州农工大学的一位计算机科学教授 Tim Davis 在推特上发文称, GitHub Copilot 在没有标注来源也没有 LGPL 许可的情况下,输出了大量应该受版权保护的代码。 Tim Davis 还发了自己和 GitHub Copil…

90后汕头返种水稻 国稻种芯·中国水稻会:广东新农人田保姆

90后汕头返种水稻 国稻种芯中国水稻会&#xff1a;广东新农人田保姆 南方日报 张伟炜 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三农智库网-功能性农业农业大健康大会报道&#xff1a;“5月稻谷病虫害防护非常…

机器学习(周志华)课后习题

第1章 绪论 1.1 表1.1若只包含编号1和4的两个样例&#xff0c;试给出相应的版本空间。 版本空间&#xff1a;与训练及一致的假设集合。 色泽青绿&#xff0c;根蒂*&#xff0c;敲声*&#xff1b; 色泽*&#xff0c;根蒂蜷缩&#xff0c;敲声*&#xff1b; 色泽*&#xff0c;根…

nuxt.js 进行项目重构-首页

nuxt.js 也是基于vue 的 那么就离不开组件化开发 我们按照组件结构来进行分析 navTop 页面的头部 通用组件 分隔了三个位置 适用于大多数头部 且预留插槽 <template><div class"nav-top"><div class"left"><slot name"left…