1.2机器学习的方法

目录

1.有监督学习

分类

回归

 2.无监督学习

降维

聚类    

3.半监督学习

4.强化学习和多任务学习

5.迁移学习


1.有监督学习

        从给定的有标注的训练数据集中学习出一个函数(模型参数),当新的数据到来时可以根据这个函数预测结果。 常见任务包括分类回归

分类

        所谓分类问题就是由一个函数根据输入数据的特征来判别数据所属的类别,在生活中有着非常广泛的应用:例如人脸识别,垃圾邮件识别,手写数字识别等。

        分类问题一般可以分为两种:

        二分类问题,即输入数据仅可能属于两类中的一类,例如我们判断一个物体是否是水果则判断结果肯定为  或者  中的一个;

        多分类问题,即输入数据可能属于多个种类中的一个,例如我们判断一个水果是什么的时候,判断结果可能是 苹果, , 桃子, 香蕉 等。

下面的这个手写数字识别问题就是典型的分类问题:

# coding: utf-8
from numpy import ndarray
from sklearn.neighbors import KNeighborsClassifier


class KNNClassifier(object):
    def __init__(self, n_num: int) -> None:
    
        self.knn = KNeighborsClassifier(n_neighbors=n_num)
    
    def fit_data(self, x_train: ndarray, y_train: ndarray) -> None:
    
        self.knn.fit(x_train, y_train)

    def predict_data(self, x_test: ndarray) -> ndarray:
    
        return self.knn.predict(x_test)

回归

        所谓回归主要用于预测输入变量(即自变量)和输出变量(即因变量)之间的关系,重点是当自变量发生变化时因变量的变化。从数学的角度讲,回归问题就是找到一个可以用来映射输入变量和输出变量的函数曲线。回归问题在生活中可以被用来完成多种预测,如商店在未来某一天的销售额,一段时间内某地的降雨量等。

下面的这个糖尿病发病概率问题就是典型的回归问题:

# coding: utf-8
from sklearn import datasets, linear_model
from numpy import ndarray


class Diabetes(object):

    def __init__(self):
        self.regr = linear_model.LinearRegression()

    def train(self, X_train: ndarray, y_train: ndarray):
        self.regr.fit(X_train, y_train)

    def test(self, X_test: ndarray) -> ndarray:
        return self.regr.predict(X_test)

'''
__init__(self):构造函数,初始化一个线性回归模型。
train(self, X_train: ndarray, y_train: ndarray):训练模型。X_train 是一个形状为 (n_samples, n_features) 的数组,表示训练数据集的所有样本及其特征;y_train 是一个形状为 (n_samples,) 的数组,表示训练数据集的所有目标变量。在函数内部,使用线性回归模型的 fit 方法对训练数据进行拟合,得到一个训练好的模型。
test(self, X_test: ndarray) -> ndarray:使用训练好的模型对测试数据进行预测。X_test 是一个形状为 (n_samples, n_features) 的数组,表示测试数据集的所有样本及其特征。在函数内部,使用线性回归模型的 predict 方法对测试数据进行预测,返回一个形状为 (n_samples,) 的数组,表示预测结果。
'''

 2.无监督学习

        在机器学习中数据的标注其实是非常费时费力的,很多情况下我们能收集到的数据是难以进行人工标注或者无法进行人工标注。尽管如此我们仍希望计算机可以代替我们完成对这些数据的分析工作(或者提供一些参考)。无监督学习:没有标注的训练数据集,需要根据样本间的统计规律对样本集进行分析,常见任务如降维和聚类等。

         通常来说,无监督问题可以分为两类:降维聚类,两者的主要区别在于降维通常作为一种数据处理的手段,不会直接给出数据的分类结果;聚类通常可以直接给出数据的分类结果。

降维

        降维的主要作用一般是降低计算量或者作为其他操作的前置操作。以鸢尾花数据为例,现在每一个样本包含了四个维度(或者叫特征),即 sepal lengthsepal widthpetal length 和 petal width。我们无法通过绘制点图的方式将所有四个维度的特征都表示出来,因为我们最高可以理解三维空间,而实际上最方便理解的是二维的平面图像。此时我们可以通过降维的手法将原本的四个维度降到两个维度,方便可视化。

 这里我们可以使用 PCA 算法对数据进行降维,降维后的数据如下:

 如果我们对数据进行可视化,可以拿到下面的结果:

下面我们通过鸢尾花数据集来感受一下降维问题:

# coding: utf-8
import pandas as pd
from pandas import DataFrame
from numpy import ndarray

from sklearn.decomposition import PCA

def dimensionality_reduction(input_data: DataFrame) -> ndarray:

    pca = PCA(n_components=2)
    output = pca.fit_transform(input_data)
    return output

聚类    

        聚类通常是根据某些指标直接将数据分为几类,用通俗的话来说就是“人以类聚,物以群分”。聚类算法通常不需要事先知道样本的真实类别,算法将自动根据某些评判标准对样本进行分类,具体分成几类需要人为确定。

        还是以鸢尾花数据集为例。在上一段中我们已经初步完成了对数据的降维及可视化。现在我们将使用 K-means 算法完成对数据的聚类。这里我们设定将数据聚成 3 类,下图描述了聚类结果。

# coding: utf-8
from pandas import DataFrame
from numpy import ndarray

from sklearn.cluster import KMeans

def clusting(input_data: DataFrame, random_seed=0) -> ndarray:

    kmeans = KMeans(n_clusters=3, random_state=random_seed)
    output = kmeans.fit_predict(input_data)
    return output

3.半监督学习

4.强化学习和多任务学习

5.迁移学习

 嘿嘿,水几张图片😄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西柚小萌新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值