机器学习入门(1)

本系列是想作为自己的学习笔记,作为入门有许多东西还是很初步的,得一步一步来了。

一、基础概念

`机器学习(Machine Learning,ML)` 是使用计算机来彰显数据背后的真实含义,它为了把无序的数据转换成有用的信息。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

1任务分类

监督学习:分类问题、回归问题

必须确定目标变量的值,以便机器学习算法可以发现特征和目标变量之间的关系。在监督学习中,给定一组数据,我们知道正确的输出结果应该是什么样子,并且知道在输入和输出之间有着一个特定的关系。关注对事物未知表现的预测

非监督学习:数据降维、聚类问题

在机器学习,无监督学习的问题是,在未加标签的数据中,试图找到隐藏的结构。因为提供给学习者的实例是未标记的,因此没有错误或报酬信号来评估潜在的解决方案。数据没有类别信息,也不会给定目标值。倾向对事物本身特性的分析。

分类——离散的(知道有限个数量)回归——预测目标往往是连续变量

聚类——依赖数据的相似性,把相似数据样本划分为一个簇

评价是指评价其性能——好坏

 正确率 —— 提取出的正确信息条数 / 提取出的信息条数

召回率 —— 提取出的正确信息条数 / 样本中的信息条数

F 值 —— 正确率 * 召回率 * 2 / (正确率 + 召回率)(F值即为正确率和召回率的调和平均值)

举个例子如下:

某池塘有 1400 条鲤鱼,300 只虾,300 只乌龟。现在以捕鲤鱼为目的。撒了一张网,逮住了 700 条鲤鱼,200 只虾, 100 只乌龟。那么这些指标分别如下:

正确率 = 700 / (700 + 200 + 100) = 70% 召回率 = 700 / 1400 = 50%  F 值 = 70% * 50% * 2 / (70% + 50%) = 58.3%

聚类问题的标准一般基于距离:簇内距离(Intra-cluster Distance) 和 簇间距离(Inter-cluster Distance) 。簇内距离是越小越好,也就是簇内的元素越相似越好;而簇间距离越大越好,也就是说簇间(不同簇)元素越不相同越好。一般的,衡量聚类问题会给出一个结合簇内距离和簇间距离的公式。

2机器学习专业术语

学习算法(learning algorithm):从数据中产生模型的方法

数据集(data set):一组记录的合集

示例(instance):对于某个对象的描述

样本(sample):也叫示例

属性(attribute):对象的某方面表现或特征

特征(feature):同属性

属性值(attribute value):属性上的取值

属性空间(attribute space):属性张成的空间

特征向量(feature vector):在属性空间里每个点对应一个坐标向量,把一个示例称作特征向量

维数(dimensionality):描述样本参数的个数(也就是空间是几维的)

分类(classification):预测是离散值,比如把人分为好人和坏人之类的学习任务

回归(regression):预测值是连续值,比如你的好人程度达到了0.9,0.6之类的

二分类(binary classification):只涉及两个类别的分类任务

正类(positive class):二分类里的一个

反类(negative class):二分类里的另外一个

多类分类:多个类别中选一个

多标签分类:判断一个样本是否属于多个不同类别

测试(testing):学习到模型之后对样本进行预测的过程

聚类(clustering):把训练集中的对象分为若干组

簇(cluster):每一个组叫簇

泛化(generalization)能力:学得的模型适用于新样本的能力

分布(distribution):样本空间的全体样本服从的一种规律

3机器学习流程

 模型评估不正确后重新到获取数据循环

2.1数据集

用sklearn数据集

 

from sklearn.datasets import load_iris
def dataset_demo():
    '''
    sklearn 数据集的使用
    '''
    #获取数据集
    iris = load_iris()
    
    print("总数据集: \n",iris)
    print("查看数据集描述: \n",iris["DESCR"])#字典用法1:用括号
    print("查看特征值的名字: \n",iris.feature_names)#字典用法2:用.
    print("查看特征值: \n",iris.data,iris.data.shape)
    return None
if __name__=="__main__":
    #数据集的使用
    #dataset_demo()

 数据分为训练集(用于构建模型)和测试集(评估模型是否有效)

作用及整个流程如下图

 代码如下

from sklearn.model_selection import train_test_split
def dataset_demo():
 
    #数据集划分(有一部分来检验,评估模型是否有效)
    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
if __name__=="__main__":

    #dataset_demo()

 

 2.2特征工程

 

特征工程是对特征所作的操作

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

2.2.1特征抽取

  • 字典特征提取

作用:对字典数据进行特征值化

对数据进行特征提取:将类别转换为one-hot编码,节省内存,提高下载效率

one-hot编码的意思如下图所示:

 

from sklearn.feature_extraction import DictVectorizer
def dict_demo():
    '''字典特征抽取
    '''
    data=[{'city':'北京','temperature':100},{'city':'上海','temperature':60},{'city':'深圳','temperature':30}]
    #1.实例化一个转换器
    transfer=DictVectorizer(sparse=False)#sparse为ture时为松散类型,不表示0
    #2.调用fit_transform进行转换
    data_new=transfer.fit_transform(data)
    data_old=transfer.inverse_transform(data_new)#返回原来
    print("data_new:\n",data_new)
    print("data_old:\n",data_old)
    print("特征名字:\n",transfer.get_feature_names())
    return None

应用场景:


  •  文本抽取

作用:对文本数据进行特征值化

相关代码:

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
import jieba
def count_demo():
    '''文本特征抽取
       统计每个样本特征词出现的个数
    '''
    #实例化
    transfer=CountVectorizer(stop_word=["is","too"])
    #文本里面没有设置参数转二维数组,则通过方法来转二维toarray
    data_new=transfer.fit_transform(data)
    print("data_new:\n",data_new.toarray())
    print("特征名字:\n",transfer.get_feature_names())
    return None
    
def cut_word(text):
    '''分词用jieba.cut 得到生成器
       用list进行强转生成列表
       我们要的是字符串所以用join
    '''
    a=" ".join(list(jieba.cut(text)))
    print(a)
    return text    

def count_vector_jieba_Chinese():  # 中文自动分词
    data = ["统计学作为数据分析的入门知识,非常的重要,作为入门,必须要掌握描述性统计以及里面各类图表的应用场景和理解。"
            "而再深入到,如线性回归,贝叶斯,假设检验等,则是为以后成为高级数据分析师做铺垫,在未来做到建模和预测时,"
            "会用到很多这类知识,同时在未来进阶过程中,学习机器学习的一些经典算法时,也需要这些知识来帮助理解和学习。",

            "Excel作为数据分析的基础,是众多数据分析工具的入门工具,而且它的功能非常的强大,具有非常多的实用性,在快速处理一些数据,"
            "快速出图的时候,非常的灵活,也非常的便捷,其中也有很多的函数,包括max,min,average,find,match,vlookup等,"
            "可以非常灵活的查询数值或者进行统计分析,同时Excel的数据透视表功能也非常的强大,可以快速的选取所需元素进行分析。"
            "非常适合用来做快速的数据清洗,入门门槛低,而且实用性非常强"]
    new_data = []
    for element in data:
        sentence = cut_word(element)
        new_data.append(sentence)

    transfer = CountVectorizer(stop_words=[])  # 统计样本出现特征词的次数
    data_new = transfer.fit_transform(new_data)

    print("new data:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    return None
    
def TF_IDF():
    #一个词的重要性
    # TF: 某一个词在文本中的频率
    # IDF: 总文件数目除以包含改词语的文件数目, 再将得到的结果取10为底数的对数
    # TF-IDF = TF * IDF (前面两个相乘)
    data = ["统计学作为数据分析的入门知识,非常的重要,作为入门,必须要掌握描述性统计以及里面各类图表的应用场景和理解。"
            "而再深入到,如线性回归,贝叶斯,假设检验等,则是为以后成为高级数据分析师做铺垫,在未来做到建模和预测时,"
            "会用到很多这类知识,同时在未来进阶过程中,学习机器学习的一些经典算法时,也需要这些知识来帮助理解和学习。"
            "非常适合用来做快速的数据清洗,入门门槛低,而且实用性非常强"]
    new_data = []
    for element in data:
        sentence = cut_word(element)
        new_data.append(sentence)

    transfer = TfidfVectorizer(stop_words=["一些", "众多"])
    data_new = transfer.fit_transform(new_data)
    print("特征词:\n", transfer.get_feature_names())
    print("new data:\n", data_new.toarray())
    print("new data(sparse):\n", data_new)
    return None

对公式的解释: 

 

2.2.2特征预处理

 通过一些转换函数,将特征数据转换成更适合算法模型的特征数据的过程

      无量纲化,也称为数据的规范化,是指不同指标之间由于存在量纲不同致其不具可比性,故首先需将指标进行无量纲化,消除量纲影响后再进行接下来的分析。

用到归一化和标准化进行无量纲化,使不同规格的数据转换到同一规格

  • 归一化

通过对原始的数据进行变换把数据映射到(默认为[0,1]之间)

  •  标准化

通过对原始数据进行变换把数据变换到均值为0,标准差为1的范围内

 mean-平均值 \delta为标准差 (为集中程度)

2.2.3降维

降维是为了降低特征的个数, 随机变量, 得到一组不相关的主变量的过程
   特征选择分嵌入式(embeded)和过滤式(filter)
   过滤式 :
   1: 方差选择法 :低方差选择法 低方差代表某个特征大多样本的值比较相近则可以删掉
   2: 相关系数(皮尔逊相关系数):特征与特征之间的相关程度强不强
   如果相关性高可用以下方法:
    1 选取其中一个特征
    2 两个特征加权求和(分别占50%,新加起来)
    3 主成分分析(PCA):高维数据变低维,舍弃原由数据,创造新数据,如: 压缩数据维数,降低原数据复杂度,尽量损失少量信息
                  应用:回归分析或者聚类分析
                  n_components=N:N为整数就是转为多少个特征  保留的至少都比原特征值少一个
                                  N = 0.95  N为小数就是保留百分之多少的信息
   嵌入式:决策树、正则化、深度学习

相关系数:

 

总结

我是跟着黑马学的,这里是黑马的文章连接:相关代码也在下面黑马程序员---三天快速入门Python机器学习(第一天)_zdb呀的博客-CSDN博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值