机器学习基础——特征提取(笔记一)

1.机器学习简介

定义:机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测

数据集的构成:特征值+目标值

对于每一行的数据可以成为样本,有些数据集可以没有目标值

机器学习算法分类:

       目标值:类别——分类问题

              算法:K-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归

       目标值:连续型的数据——回归问题

              算法:线性回归,岭回归

       目标值:无——无监督学习

              算法:K-means

机器学习开发流程:

  1. 获取数据
  2. 数据处理
  3. 特征工程
  4. 机器学习算法训练——模型
  5. 模型评估
  6. 应用

2..数据集

可用数据集

1.Sklean:http://scikit-learn.org/stable/datasets/index.html#datasets(0.19.1)

2.Kaggle:https://www.kaggle.com/datasets

3.UCI:http://archive.ics.uci.edu/ml/

Scikit-learn数据集API介绍:

       Sklearn.datasets

              Datasets.load_*()——获取小规模数据集

              Datasets.fetch_*(data_home=None)——获取大规模数据集

              Data_home表示数据集下载的目录,默认是~/scikit_learn_data/

数据集的返回值:

Datasets.base.Bunch(继承自字典)

Dist[“keys”]=values

Bunch.key=values

获取数据集

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

def datasets_demo():
    """
    sklearn数据集使用
    :return:
    """
    #获取数据集
    iris=load_iris()
    print("鸢尾花数据集:\n",iris)
    print("查看数据集描述:\n",iris["DESCR"])
    print("查看特征值的名字:\n",iris.feature_names)
    print("查看特征值:\n",iris.data,iris.data.shape)

    #数据集划分
    x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)
    print("训练集的特征值:\n",x_train,x_train.shape)
    return None

数据集的划分:

       训练数据:用于训练,构建模型

       测试数据:在模型检验时使用,用于评估模型是否有效(20%-30%)

Sklearn.model_selection.train_test_split(arrays,*options)

       X数据集的特征值

       Y数据集的标签值

       Test_size测试集的大小一般为float

       Random_state随机数种子,不同造成不同随机采样结果,相同采样结果相同

       Return训练集特征值。测试集特征值,训练集目标值,测试集目标值

3.特征工程

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

意义:会直接影响机器学习的效果

特征工程包含内容:

       特征抽取/提取

       特征预处理

       特征降维

特征提取:

       将任意数据(如文本或图像)转换为可用于机器学习的数字特征

              字典特征提取(特征离散化)

              文本特征提取

              图像特征提取(深度学习)

API:sklearn.feature_extraction

流程:

       (1)、实例化类CountVectorizer

       (2)、调用fit_transforrm方法输入数据并转换

对字典数据进行特征提取:

Sklearn.feature_extraction.DictVectorize(spare=True,…)

       DictVectorizer.fit_transform(X):X:字典或者包含字典的迭代器返回值,返回sparse矩阵

       DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式

       DictVectorizer.get_feature_names() 返回类别名称

Sparse矩阵:将非零值 按位置表示出来——节省内存、提高加载效率

from sklearn.feature_extraction import DictVectorizer

def dict_demo():
    """
    字典特征提取
    :return:
    """
    data=[{"name:":"李昌茂","old:":22},{"name:":"张三","old:":32},{"name:":"王五","old:":45}]
    #1.实例化一个转换器类
    transfer=DictVectorizer(sparse=False)
    #2.调用fit_transform()
    data_new=transfer.fit_transform(data)
    print("data_new:\n",data_new)
    print("特征名字:\n",transfer.get_feature_names())
    return None

对文本特征提取(单词)

方法一:Sklearn.feature_extraction.text.CountVectorizer(stop_words=[])

CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象,返回值:返回sparse矩阵

CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式

方法一、CountVectorizer.get_feature_names()返回值:单词列表

       统计每个样本特征词出现的个数

       Stop_words停用的词表

关键词:在某一个类别的文章中,出现的次数很多,但是在其他类别的文章当中出现很少

from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer

def count_demo():
    """
    文本特征提取  CountVectorizer
    :return:
    """
    data=["my name is lichangmao","small name is is maomao"]
    #1.实例化一个转换器类
    transfer=CountVectorizer()
    #2.调用fit_transform
    data_new=transfer.fit_transform(data)
    print("特征名字:\n",transfer.get_feature_names())
    print("data_new:\n",data_new.toarray())
    return None
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
import jieba

def cut_world(text):
    """
    进行中文分词
    :param text:
    :return:
    """
    text=" ".join(list(jieba.cut(text)))
    return text

def count_Chinese_demo():
    """
    中文文本特征提取,自动分词
    :return:
    """
    data=["晋太元中,武陵人捕鱼为业。太元,缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷,渔人甚异之。"
          "复前行,欲穷其林。林尽水源,便得一山,山有小口,仿佛若有光。"
          "桃花源记"]
    #1.将中文文本分词
    data_new=[]
    for sent in data:
        data_new.append(cut_world(sent))
    print(data_new)
    # 1.实例化一个转换器类
    transfer = CountVectorizer()
    # 2.调用fit_transform
    data_final = transfer.fit_transform(data_new)
    print("特征名字:\n", transfer.get_feature_names())
    print("data_new:\n", data_final.toarray())
    return None

 

方法二、Sklearn.feature_extraction.text.TfidfVectorizer

       TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

       TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度

公式:

                                                              

词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率

逆向文档频率(inverse document frequency, idf)是一个词语普遍重要性的度量。某一特定词语的dif,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取义10为底的对数得到

tfidfi,j=tfi,j*idfi

最终得出结果可以理解为重要程度

API:sklearn.feature_extraction.text.TfidfVectorizer(stop_words=None)

       返回词的权重矩阵

              TfidfVectorizer.fit_transform(X)

                     X:文本或者包含文本字符串的可迭代对象

                     返回值:返回sparse矩阵

              TfidVectorizer.inverse_transform(X)

                     X:array数组或者sparse矩阵

                     返回值:转换之前数据格式

              TfidfVectorizer.get_feature_names()

                     返回值:单词列表

from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer


def tfidf_demo():
    """
    用TF-DIF的方法进行文本特征提取
    :return:
    """
    data = ["晋太元中,武陵人捕鱼为业。太元,缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷,渔人甚异之。"
            "复前行,欲穷其林。林尽水源,便得一山,山有小口,仿佛若有光。"
            "桃花源记"]
    # 1.将中文文本分词
    data_new = []
    for sent in data:
        data_new.append(cut_world(sent))
    print(data_new)
    # 1.实例化一个转换器类
    transfer = TfidfVectorizer()
    # 2.调用fit_transform
    data_final = transfer.fit_transform(data_new)
    print("特征名字:\n", transfer.get_feature_names())
    print("data_new:\n", data_final.toarray())
    return None

最后逐个在主函数中调用即可。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习水果识别是一种利用机器学习算法和图像处理技术对水果进行自动识别的方法。其中,使用Python中的OpenCV库实现物体特征提取是一种常见的实现方式。 OpenCV是一个强大的开源计算机视觉库,提供了许多用于图像处理和分析的函数和工具。它可以辅助我们实现水果识别所需要的特征提取步骤。 首先,我们需要准备水果图像数据集。这些图像可以是不同种类的水果,每个水果都有多个不同视角的图像。接下来,我们使用OpenCV库中的函数加载和处理这些图像。 在特征提取中,我们可以使用很多不同的技术。其中,最常用的方法是使用图像的颜色和纹理特征。在处理图像时,我们可以使用OpenCV中的函数计算这些特征。 例如,我们可以使用OpenCV中的函数提取图像的颜色直方图。这可以帮助我们了解图像中不同颜色的比例和分布情况。在水果识别中,不同水果的颜色特征往往是不同的。 此外,我们还可以使用OpenCV中的纹理特征提取方法,比如局部二值模式(Local Binary Patterns)。这可以帮助我们分析图像中的纹理信息,如图像的细节和纹理变化。这些纹理特征在识别不同类型的水果时也是有用的。 最后,我们可以使用机器学习算法,如支持向量机(SVM)或卷积神经网络(CNN),来训练一个分类模型。这个模型可以根据提取的特征来判断输入图像是否为某种水果。 总之,使用Python中的OpenCV库实现水果识别中的物体特征提取是一种非常有效的方法。通过提取图像的颜色和纹理特征,并使用机器学习算法进行分类,我们可以实现一个准确和高效的水果识别系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值