军用大数据 - Spark机器学习

第1关:Iris 分类

任务描述

本关任务:使用 pyspark mlLogisticRegression分类器完成 Iris 分类任务。

# -*- 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 mlLogisticRegression分类器完成 坦克类型分类任务。

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 ********** #

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值