machine leaning 1

什么是机器学习?

  • 机器学习就是从数据中自动分析获得规律,并利用规律对未知数据进行预测。
    什么是模型?
  • 特殊的对象。在对象内部已经被集成或者封装好了某种形式的方程式,只不过该方程还没有求出解。就是一堆数学逻辑。
    模型的作用?
  • 实现对未知数据的预测和分类。找规律!
    样本数据?
  • 特征数据:自变量。
  • 标签数据:因变量。
  • 样本数据和模型之间的关联?
    • 训练模型:将样本数据带入到模型,使得模型中的方程可以求出解。
    • 模型实现的预测或者分类其实就是模型中方程计算出来的结果。
      模型的分类:
  • 有监督学习
    • 如果模型需要的样本数据必须包含特征数据和标签数据的模型,属于有监督学习分类。
  • 无监督学习
    • 模型需要的样本只需要包含特征数据即可。
      样本数据(数据集)的载体:
      通常情况下历史数据都不会存储在数据库中,而是存储在文件中(csv文件)
      数据库存储数据存在的问题:
      1.数据量级大的数据很难存储和进行高效的读写。
      2.数据存储格式不符合机器学习要求的数据格式。
      样本数据的获取途径:
      1.kaggle:数据竞赛平台。
      2.UCI数据集:是一个常用的机器学习标准测试数据集,是加州大学欧文分校(University of CaliforniaIrvine)提出的用于机器学习的数据库
      3.sklearn

什么是特征工程?
选出需要的数据
特征抽取:
1.我们所采集到样本中的特征数据往往很多时候为字符串或者其他类型的数据,我们知道电脑只可以识别二进制数值型的数据,如果把字符串给电脑,电脑是看不懂的。机器学习学习的数据如果不是数值型的数据,它是识别不了的。
2.将非数值型的特征转换成数值型的特征

from sklearn.feature_extraction.text import CountVectorizer
vector = CountVectorizer()
alist = ['life is short , i love python','life is too long , i hate python']
res = vector.fit_transform(alist)
print(res.toarray())

from sklearn.feature_extraction.text import CountVectorizer
vector = CountVectorizer()
alist = ['life is short , i love python','life is too long , i hate python']
res = vector.fit_transform(alist)
print(vector.get_feature_names())
print(res.toarray())

import jieba
text = '今天是情人节,我想你了,吃完饭来我家坐坐吧!'
alist = list(jieba.cut(text))
res = ' '.join(alist)
print(res)

from sklearn.feature_extraction import DictVectorizer 
alist = [
            {'city':'BeiJing','temp':33},
            {'city':'GZ','temp':42},
            {'city':'SH','temp':40}
        ]
vector = DictVectorizer()
res = vector.fit_transform(alist)
print(res)

from sklearn.feature_extraction import DictVectorizer 
alist = [
            {'city':'BeiJing','temp':33},
            {'city':'GZ','temp':42},
            {'city':'SH','temp':40}
        ]
vector = DictVectorizer(sparse=False)
res = vector.fit_transform(alist)
print(vector.get_feature_names())
print(res)


特征的预处理:对数值型的数据进行处理
无量纲化:
什么是无量纲化:将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布。
无量纲化的意义:譬如梯度和矩阵为核心的算法中,譬如逻辑回归,支持向量机,神经 网络,无量纲化可以加快求解速度;
而在距离类模型,譬如K近邻,K-Means聚类中,无量纲化可以帮我们提升模型精度,避免某一个取值范围特别大的特征对距离计算造成影响。
一个特例是决策树和树的集成算法们,对决策 树我们不需要无量纲化,决策树可以把任意数据都处理得很好。
那么预处理就是用来实现无量纲化的方式。
怎么无量纲化:特征抽取后我们就可以获取对应的数值型的样本数据啦,然后就可以进行数据处理了。
通过特定的统计方法(数学方法),将数据转换成算法要求的数据
方法:
归一化
标准化

import numpy as np
from sklearn.preprocessing import MinMaxScaler
data = np.random.randint(0,100,size=(8,4))
scaler = MinMaxScaler()
res = scaler.fit_transform(data)
print(res)


问题:如果数据中存在的异常值比较多,会对结果造成什么样的影响?
最大值和最小值的影响很大。
归一化总结:
在特定场景下最大值和最小值是变化的,另外最大最小值很容易受到异常值的影响,所以这种归一化的方式具有一定的局限性。因此引出了一种更好的方式叫做:标准化!!!
标准化:当数据按均值中心化后,再按标准差缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分 布),而这个过程,就叫做数据标准化

from sklearn.preprocessing import StandardScaler
s = StandardScaler()
res = s.fit_transform(data)
print(res)


归一化和标准化总结:
对于归一化来说,如果出现了异常值则会响应特征的最大最小值,那么最终结果会受到比较大影响
对于标准化来说,如果出现异常点,由于具有一定的数据量,少量的异常点对于平均值的影响并不大,从而标准差改变比较少。

StandardScaler和MinMaxScaler选哪个?
看情况。大多数机器学习算法中,会选择StandardScaler来进行特征缩放,因为MinMaxScaler对异常值非常敏感。在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中,StandardScaler往往是最好的选择。 MinMaxScaler在不涉及距离度量、梯度、协方差计算以及数据需要被压缩到特定区间时使用广泛,比如数字图像处理中量化像素强度时,都会使用MinMaxScaler将数据压缩于[0,1]区间之中。
建议先试试看StandardScaler,效果不好换MinMaxScaler。

特征选择:从特征中选择出有意义对模型有帮助的特征作为最终的机器学习输入的数据!
切记:
在做特征选择之前,有三件非常重要的事:跟数据提供者联系,跟数据提供者沟通,跟数据提供者开会。
一定要抓住给你提供数据的人,尤其是理解业务和数据含义的人,跟他们聊一段时间。技术能够让模型起飞,前提是你和业务人员一样理解数据。所以特征选择的第一步,其实是根据我们的目标,用业务常识来选择特征。
特征选择的原因:
冗余:部分特征的相关度高,容易消耗计算机的性能
噪点:部分特征对预测结果有偏执影响
特征选择的实现:
人为对不相关的特征进行主观舍弃
当然了,在真正的数据应用领域,比如金融,医疗,电商,我们的数据特征非常多,这样明显,那如果遇见极端情况,我们无法依赖对业务的理解来选择特征,该怎么办呢?
在已有特征和对应预测结果的基础上,使用相关的工具过滤掉一些无用或权重较低的特征
工具:
Filter(过滤式)【主要讲解】
Embedded(嵌入式):决策树模型会自己选择出对其重要的特征。【后期在讲解模型的时候在补充】
PCA降维

feature = np.random.randint(0,100,size=(6,4))
feature

feature.var(axis=0)

from sklearn.feature_selection import VarianceThreshold
# threshold = VarianceThreshold(threshold=400)
threshold = VarianceThreshold(np.median(feature.var(axis=0)))
res = threshold.fit_transform(feature)
print(res)


方差过滤主要服务的对象是:需要遍历特征的算法模型。
而过滤法的主要目的是:在维持算法表现的前提下,帮助算法们降低计算成本
PCA降维(主成分分析):是一种分析,简化数据集的技术
降维的维度值的就是特征的种类。
思想:如何最好的对一个立体的物体用二维表示
当然,第四张二维图片可以比较好的标识一个立体三维的水壶。但是也要清楚,用一个低纬度去表示高纬度的物体时,一定会造成一些信息的差异。可以让低纬度也可以能正确的表示高纬度的事物,或者信息差异最小。
目的:特征数量达到上百,上千的时候,考虑数据的优化。使数据维度压缩,尽可能降低源数据的维度(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
res = pca.fit_transform([[0,2,4,3],[0,3,7,3],[0,9,6,3]])
res


sklearn的数据集
数据集划分
数据集接口介绍
数据集划分¶
前提:机器学习就是从数据中自动分析获得规律,并利用规律对未知数据进行预测。换句话说,我们的模型一定是要经过样本数据对其进行训练,才可以对未知数据进行预测的。
因此我们需要将原先的样本数据拆分成两部分:
训练集:训练模型
测试集:评估模型

数据集接口介绍
sklearn.datasets.load_():获取小规模的数据集
sklearn.datasets.fetch_
(data_home=None,subset):获取大规模的数据集data_home表示数据集下载目录,None为默认值表示的是家目录/scikit_learn_data(自动创建该文件夹)下。需要从网络下载.subset为需要下载的数据集,可以为train,test,all

import sklearn.datasets as datasets
iris = datasets.load_iris()
feature = iris['data']
target = iris['target']

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(feature,target,test_size=0.2,random_state=2020)


#方式2:获取较大规模的数据集
datasets.fetch_20newsgroups(data_home='数据集保存路径',subset='all')

分类和回归问题
分类算法基于的是【标签数据】为【离散型】数据
回归算法基于的是【标签数据】为【连续型】数据
结论:在社会中产生的数据必然是离散型或者是连续型的数据,那么企业针对数据所产生的需求也无非是分类问题或者回归问题。

机器学习开发流程
1.数据采集
公司内部产生的数据
和其他公司合作获取的数据
购买的数据
2.分析数据所对应要解决需求或者问题是什么?根据目标数据推断问题属于回归还是分类!
3.数据的基本处理
数据清洗
合并
级联等
4.特征工程:对特征进行处理
特征抽取
特征预处理
降维等
5.选择合适的模型,然后对其进行训练
6.模型的评估
7.上线使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值