今天给各位分享深入浅出:探索机器学习的基础原理的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
4. 样本数据
特征数据:自变量。 【面积、楼层、采光率】
标签/目标数据:因变量。 [售价]
功能:样本数据用于训练模型。
训练模型:将样本数据带入算法模型,求解模型中尚未求解的方程。
注:方程的解实际上是模型预测或分类的结果。
5. 模型的分类:
监督学习算法:
如果模型所需的样本数据必须包含特征数据和标签数据,那么模型数据就是监督学习算法分类的产物。
无监督学习算法:
模型只需要样本数据中包含特征数据,带或不带标签数据即可。
6. 样本数据(数据集)的载体:
历史数据通常不存储在数据库中,而是存储在文件中(csv文件)
数据库存储数据的问题:
性能瓶颈:大数据量的数据难以存储和高效读写。
数据存储格式不符合机器学习所需的数据格式。
7. 样本数据的获取途径:
kaggle:数据竞赛平台。
UCI数据集:是机器学习常用的标准测试数据集。它是由加州大学欧文分校提出的机器学习数据库。
sklearn
特征工程
包括:
特征提取
数据特征的预处理
特征选择
为什么需要特征工程
样本数据中的特征可能存在缺失值、重复值、异常值等,因此我们需要对特征中的相关噪声数据进行处理,处理的目的是创建一个更纯净的样本集(数据越纯净)集,模型越容易总结数据集中的底层模式),让模型基于这组数据具有更好的预测能力。当然,特征工程不仅仅只是处理上述操作。什么是特征工程
特征工程是将原始数据转换为能够更好地表示能够处理数据的模型的潜在问题的特征的过程,从而提高未知数据预测的准确性。所以特征工程就是对特征的相关处理。特征工程的意义
直接影响模型预测的结果。如何实施特征工程
导入sklearn包sklearn简介
是Python语言的机器学习工具。它包含许多著名机器学习算法的实现。它有完整的文档并且易于使用。
功能:
分类模型
回归模型
聚类模型
特色工程
特征抽取
目的:
特征化:将非数字特征转换为数字特征。
示例:从sklearn.feature_extraction.text 导入CountVectorizer
向量=CountVectorizer()
res=矢量.fit_transform(
[
"电梯很短,我喜欢蟒蛇",
“电梯太长了,我讨厌蟒蛇”
]
)
print(res.toarray()) 输出:
[[0 1 1 0 1 1 1 0]
[1 1 1 1 0 1 0 1]]
字典特征抽取
作用:对字典数据进行特征值化
来自sklearn.feature_extraction 导入DictVectorizer
列表=[
{"城市":"北京","临时":33},
{"城市":"广州","临时":42},
{"城市":"上海","临时":40}
]
d=DictVectorizer() #1。实例化工具对象。常用的sparse=True/False参数指定后面函数的返回值是稀疏矩阵或数组。
#该方法的返回值是特征值化的结果
结果=d.fit_transform(alist) #2.调用指定方法对原始数据进行特征值分析
打印(结果)(0, 0) 1.0
(0, 3) 33.0
(1, 1) 1.0
(1, 3) 42.0
(2, 2) 1.0
(2, 3) 40.0 列表=[
{"城市":"北京","临时":33},
{"城市":"广州","临时":42},
{"城市":"上海","临时":40}
]
d=DictVectorizer(稀疏=假)
结果=d.fit_transform(alist)
打印(d.get_feature_names())
print(结果)["城市=北京", "城市=广州", "城市=上海", "临时"]
[[ 1.0.0.33.]
[0.1.0.42。]
[0。 0.1.40.]]
什么是sparse矩阵
稀疏矩阵是一个伪装的数组或列表,目的是节省内存。
用pandas也可实现对字典的特征值化。
导入pandas 作为pd
df=pd.DataFrame([
["绿色", "M", 20, "class1"],
["红色","L",21,"class2"],
["蓝色", "XL",30, "class3"]])
df.columns=["颜色", "尺寸", "重量", "类别标签"]
one_code_result=pd.get_dummies(df["color"])
one_code_result特征值化后的颜色列.png
文本特征抽取
作用:
文本数据的特征值
from sklearn.feature_extraction.text import CountVectorizer#统计词频
列表=[
"左边很短,我喜欢Python",
“左边太长了,我讨厌蟒蛇”
]
c=CountVectorizer()
结果=c.fit_transform(alist)
print(c.get_feature_names())##获取特征值的名称
print(result.toarray())##将稀疏矩阵转换为数组["hate", "is", "isis", "left", "long", "love", "python", "short", " 也"]
[[0 0 1 1 0 1 1 1 0]
[1 1 0 1 1 0 1 0 1]]
特征的预处理:对数值型的数据进行处理
无量纲:
在机器学习算法的实践中,我们经常有将不同规格的数据转换为同一规格的数据,或者将不同分布的数据转换为特定分布的需求。这种需求统称为“无量纲”数据。
例如,在以梯度和矩阵为核心的算法中,如逻辑回归、支持向量机、神经网络等,无量纲化可以加快求解速度;
在距离模型中,比如K近邻、K-Means聚类等,无量纲化可以帮助我们提高模型的精度,避免取值范围特别大的特征对距离计算的影响。
一个特例是决策树和树集成算法。我们不需要决策树的维数。决策树可以很好地处理任何数据。
预处理是用于实现维度的方法。
概念:通过特定的统计方法(数学方法)将数据转化为算法所需的数据
方式:
归一化
标准化
归一化
将numpy 导入为np
数据=pd.DataFrame(data=np.random.randint(10,500,size=(5,3)))
从sklearn.preprocessing 导入MinMaxScaler
毫米=最小最大缩放器()
结果=mm.fit_transform(数据)
结果数组([[0. 1. 0.08860759],
[0.07792208, 0.36507937, 1.],
[0.22857143, 0.69206349, 0.39240506],
[0.04155844, 0. 0.27848101],
[1. 0.92063492, 0.]])
标准化
来自sklearn.preprocessing 导入StandardScaler
s=标准缩放器()
结果=s.fit_transform(数据)
结果数组([[ 0.60183668, -0.42772629, 0.80643289],
[-1.13395705, 0.40361115, -0.13566161],
[1.11403811,-1.19560285,-1.89172574],
[-1.27623522,-0.50387933,0.67077128],
[0.69431749, 1.72359731, 0.55018318]])
归一化和标准化总结
对于归一化来说,如果出现异常值,就会响应特征的最大值和最小值,最终结果会受到很大影响。
对于标准化来说,如果出现异常值,由于数据量一定,少数异常值不会对平均值产生大的影响,因此标准差变化较小。
StandardScaler和MinMaxScaler选哪个?
视情况而定。在大多数机器学习算法中,选择StandardScaler进行特征缩放是因为MinMaxScaler对异常值非常敏感。在PCA、聚类、逻辑回归、支持向量机和神经网络等算法中,StandardScaler往往是最佳选择。当距离测量、梯度、协方差计算以及需要将数据压缩到特定区间时,MinMaxScaler 被广泛使用。例如,在数字图像处理中量化像素强度时,将使用MinMaxScaler将数据压缩到[0,1]区间。
建议首先尝试StandardScaler。如果效果不好,改用MinMaxScaler。
特征选择
在做特征选择之前,有三件非常重要的事情:联系数据提供者、与数据提供者沟通、与数据提供者开会。
一定要和给你提供数据的人,尤其是了解业务和数据含义的人聊一会儿。技术可以让模型起飞,但前提是您像业务人员一样了解数据。因此,特征选择的第一步实际上是利用业务常识,根据我们的目标来选择特征。
特征选择的原因:
冗余:有些功能相关性很强,很容易消耗计算机性能。
噪声:某些特征对预测结果有偏执的影响。
特征选择的实现:
手动丢弃不相关的特征。
如果遇到极端情况,无法依靠对业务的理解来选择特征,我们会根据已有的特征和相应的预测结果,使用相关工具过滤掉一些无用或权重较低的特征。
工具:
Filter(过滤器类型)【主要说明】
嵌入式:决策树模型选择对其重要的特征。
PCA降维
Filter过滤式(方差过滤)
原理:这是一个通过特征本身的方差来过滤特征的类。例如,如果某个特征本身的方差很小,则说明该特征的样本之间基本没有差异。特征中的大部分值可能是相同的,甚至整个特征的值是相同的。那么这个特征对区分样本就没有作用了。因此,无论接下来的特征工程做什么,都应该优先考虑剔除方差为0或者方差极低的特征。
数据=pd.DataFrame(数据=np.random.randint(10,50,size=(6,5)))
从sklearn.feature_selection 导入VarianceThreshold
vt=VarianceThreshold(threshold=50) ##threshold 是方差的值。删除方差小于x 的所有特征。默认值为0,这意味着保留所有方差非零的特征。
结果=vt.fit_transform(数据)
结果数组([[30, 18, 42],
[28,44,43],
[47,37,25],
[18,17,18],
[24,20,47],
[13, 37, 29]])方差过滤对模型的影响:减少运行时间,提高精度,
注意:
方差过滤主要服务的对象是:需要遍历特征的算法模型。
过滤方法的主要目的是帮助算法降低计算成本,同时保持算法性能。
PCA降维
功能:可以减少回归分析或聚类分析中的特征数量。
数据=[[0,2,4,3],[0,3,7,3],[0,9,6,3]]
从sklearn.decomposition 导入PCA
pca=PCA(n_components=3)##n_components可以是小数(保留特征的百分比)、整数(减少到的特征数量)
结果=pca.fit_transform(数据)
结果数组([[-2.88362421e+00,-1.25443227e+00,2.03388303e-16],
[-1.45140588e+00, 1.56492061e+00, 2.03388303e-16],
[4.33503009e+00, -3.10488337e-01, 2.03388303e-16]])
sklearn的数据集
数据集划分
数据集接口介绍
数据集划分
前提:机器学习是从数据中自动分析并获取规则,并利用规则来预测未知数据。换句话说,我们的模型必须先对样本数据进行训练,然后才能预测未知数据。
如果模型对原始数据进行预测,由于模型(数据的模式)最初是从数据中获得的,因此预测精度几乎是100%。所以如果想要评估模型的质量,就需要使用一组新的数据来评估模型。
因此我们需要将原始样本数据分为两部分:
训练集:训练模型
测试集:评估模型
不同类型的模型有不同的评估方法。
将sklearn.datasets 作为数据集导入
iris=datasets.load_iris()
#1.提取样本数据
feature=iris.data # 特征数据
target=iris.target # 标签数据
#2.分割数据集
从sklearn.model_selection 导入train_test_split
x_train,x_test,y_train,y_test=train_test_split(特征,目标,test_size=0.2,random_state=2020)
# test_size是测试集大小,random_state是用于打乱原始数据的随机种子
## x_train训练集特征数据
## y_train训练集标签数据
## x_test 测试集特征数据
## y_test测试集标签数据
数据集接口介绍
sklearn.datasets.load_*(): 获取小规模数据集
sklearn.datasets.fetch_*(data_home=None,subset): 获取大规模数据集data_home 代表数据集下载目录,默认值None 代表主目录/scikit_learn_data(该文件夹是自动创建的)。需要从网上下载。subset是需要下载的数据集,可以是train、test或all。
机器学习基础
机器学习的最终预测结果实际上是通过相关算法计算出来的结果。因此,在机器学习中,算法是核心,数据是计算的基础。
【深入浅出:探索机器学习的基础原理】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
想学点机器学习知识,从这儿开始就不错啦!
有11位网友表示赞同!
我一直对AI很感兴趣,正好趁着空闲时间来了解一下基础知识。
有15位网友表示赞同!
这个入门教程看起来挺详细的,希望能让我快速上手。
有16位网友表示赞同!
学习机器学习真的很有挑战性,但也是很有意思的一门学问啊!
有10位网友表示赞同!
好久没好好研究过编程技巧了,机器学习好像是个很有潜力的领域。
有19位网友表示赞同!
要入门机器学习,基础还是要打牢的,这篇博客感觉很好用!
有12位网友表示赞同!
对人工智能一直好奇,这篇文章看起来像是很好的起点。
有20位网友表示赞同!
希望看完这篇文章能明白机器学习的基本概念是什么。
有8位网友表示赞同!
准备开始我的算法学习之旅,从这儿出发吧!
有5位网友表示赞同!
感觉这个教程讲得非常清晰易懂,很适合初学者。
有10位网友表示赞同!
现在很多行业都需要用到机器学习,打算学习一下看看能应用到哪。
有5位网友表示赞同!
想了解更多关于深度学习的知识,从这儿基础了解下再说吧!
有17位网友表示赞同!
之前没接触过机器学习,看完这篇文章感觉很有启发。
有7位网友表示赞同!
很期待能够掌握机器学习的技能,这可是未来发展的趋势啊!
有13位网友表示赞同!
学习新东西总让人兴奋,希望我能应用到实际项目中去!
有6位网友表示赞同!
看了标题就感觉很有意思,来仔细看看文章内容吧!
有10位网友表示赞同!
以后想从事AI相关行业的工作,这篇文章正好可以帮助我入门。
有6位网友表示赞同!
希望能从这篇博客中学习到一些实际的机器学习应用案例。
有20位网友表示赞同!
这个标题太吸引人了,感觉很有学识和干货!
有9位网友表示赞同!
希望文章能涵盖比较全面的机器学习知识,期待深入了解!
有7位网友表示赞同!