大家好,今天来为大家分享深度学习在数据挖掘中的应用:scikit-learn算法详解的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
本文是第一篇使用Python编程语言进行机器学习小实验的文章。主要内容如下:
读取数据并清理数据
探索并理解输入数据的特征
分析如何向学习算法呈现数据
选择正确的模型和学习算法
评估程序性能的准确性
读取数据读取数据
在读取数据时,您将面临处理无效或丢失数据的问题,而做好这一点更像是一门艺术,而不是一门精确的科学。由于这部分处理得当,可以应用于更多的机器学习算法,从而提高成功的概率。
使用NumPy 高效咀嚼数据并使用SciPy 智能吸收数据
Python 是一种高度优化的解释语言,在处理大量数值算法时比C 等语言慢得多。那么为什么仍然有很多科学家和公司在计算密集型领域押注Python呢?因为Python可以轻松地将数值计算任务分配给C或Fortran等低级扩展。其中以NumPy和SciPy为代表。
NumPy 提供了许多有效的数据结构,例如数组,而SciPy 提供了许多算法来处理这些数组。无论是矩阵运算、线性代数、优化问题、聚类,甚至快速傅里叶变换,这个工具箱都能满足。
读取数据操作
这里我们以网页点击数据为例。第一个维度属性是小时,第二个维度数据是点击次数。
将scipy 导入为sp
data=sp.genfromtxt("web_traffic.tsv", delimiter="t")
预处理和清理数据
准备好用于存储和处理数据的数据结构后,您可能需要更多数据来确保预测活动,或者您可能拥有大量数据并且需要考虑如何更好地执行数据采样。
在对原始数据进行训练之前细化数据很有用。有时,使用精炼数据的简单算法会比使用原始数据的高级算法表现更好。此工作流程称为特征工程。你富有创造力和智慧,你会立即看到结果。
由于数据集中可能存在无效值(nan),我们可以提前查看无效值的数量:
小时=数据[:0]
点击数=数据[:1]
sp.sum(sp.isnan(点击数))
使用以下方法将其过滤掉:
#清理数据
小时=小时[~sp.isnan(hits)]
命中=命中[~sp.isnan(命中)]
为了直观地理解数据,使用Matplotlib的pyplot包来呈现数据。
将matplotlib.pyplot 导入为plt
plt.scatter(小时数,点击数)
plt.title("上个月的网络流量")
plt.xlabel("时间")
plt.ylabel("点击/小时")
plt.xticks([w*7*24 for w in range(10)],
["周%i"%w for w in range(10)])
plt.autoscale(紧=真)
plt.grid()
plt.show()
显示效果如下:
选择正确的学习算法
选择一个好的学习算法并不像从工具箱中的三四种算法中挑选那么简单。实际上还有很多你可能没有见过的算法。因此,这是一个权衡不同性能和功能要求的深思熟虑的过程,例如执行速度与准确性、可扩展性与易用性。
现在我们对数据有了直观的了解,接下来我们要做的就是找到一个真实的模型,并能够推断未来的数据趋势。
使用近似误差来选择模型
为了在众多模型中选择一个正确的模型,我们需要使用逼近误差来衡量模型的预测性能,并用它来选择模型。在这里,我们将度量误差定义为预测值与真实值之差的平方:
定义错误(f,x,y):
返回sp.sum((f(x)-y)**2)
其中f 表示预测函数。
用简单的直线拟合数据
现在我们假设数据的隐式模型是一条直线,那么我们如何拟合这些数据以最小化近似误差呢?
SciPy的polyfit()函数可以解决这个问题,给出x轴和y轴的数据,以及参数阶数(直线的阶数为1)。该函数给出了使近似误差最小化的模型参数。
fp1、残差、排名、sv、rcond=sp.polyfit(小时、点击数、1、full=True)
fp1 是polyfit 函数返回的模型参数。对于直线来说,它是直线的斜率和截距。
如果polyfit的全参数为True,那么在拟合过程中将会获得更多有用的信息。这里我们只关心残差,即拟合直线的近似误差。
然后在图上画线:
#拟合直线模型
fp1、残差、排名、sv、rcond=sp.polyfit(小时、点击数、1、full=True)
fStraight=sp.poly1d(fp1)
#画拟合直线
fx=sp.linspace(0,hours[-1], 1000) # 生成用于绘图的X 值
plt.plot(fx, fStraight(fx), 线宽=4)
plt.legend(["d=%i" % fStraight.order], loc="左上")
用高阶曲线拟合数据
使用直线是否合适?拟合直线的误差为317,389,767.34。这是否意味着我们的预测结果是好是坏?
我们不妨用高阶曲线来拟合数据,看看能否得到更好的结果。
fCurve3p=sp.polyfit(小时, 命中数, 3)
fCurve3=sp.poly1d(fCurve3p)
print "Curve3 line: 的错误",error(fCurve3,小时,点击数)
fCurve10p=sp.polyfit(小时, 命中数, 10)
fCurve10=sp.poly1d(fCurve10p)
print "Curve10 line: 的错误",error(fCurve10,小时,点击数)
fCurve50p=sp.polyfit(小时、点击次数、50)
fCurve50=sp.poly1d(fCurve50p)
print "Curve50 line: 的错误",error(fCurve50,小时,点击数)
近似误差为:
直线误差: 317389767.34
Curve2线错误: 179983507.878
Curve3线错误: 139350144.032
Curve10 line: 的错误121942326.364
Curve50 line: 的错误109504587.153
下面我们仔细看看实验结果,看看我们的预测曲线是否与数据吻合得很好?特别是当查看多项式阶数从10 到50 的过程时,模型与数据拟合得太紧。这样,模型不仅拟合了数据背后的模型,还拟合了噪声数据,导致曲线剧烈振荡。这种现象称为过拟合。
概括
从上面的小实验我们可以看出,如果是直线拟合就太简单了,但是10到50的多项式阶数的拟合就太多了,那么是2阶还是3阶多项式呢?最好的答案是什么?但我们也发现,如果我们用它们作为预测,它们会无限增长。那么,我们最后看一下,看来我们还是没有真正理解这些数据。
衡量绩效指标
作为ML 的初学者,在衡量学习者表现时,您会遇到许多问题或错误。如果你使用你的训练数据进行测试,这可能是一个非常简单的问题;但当你遇到不平衡的训练数据时,数据决定了预测的成败。
审查数据
我们来仔细分析一下数据,看看吧。在week3和week4之间,似乎有一个明显的拐点,因此我们将week3.5之后的数据分开,并训练一条新的曲线。
inflection=3.5*7*24 #week3.5的时间是一个inflection
time1=小时[:变形]
值1=命中[: 变形]
time2=小时[inflection:]
值2=命中[inflection:]
fStraight1p=sp.polyfit(时间1,值1,1)
fStraight1=sp.poly1d(fStraight1p)
fStraight2p=sp.polyfit(时间2,值2,1)
fStraight2=sp.poly1d(fStraight2p)
显然,这两条直线更好地描述了数据的特征。虽然它们的逼近误差仍然比高次多项式曲线大,但通过这种方式拟合可以更好地捕捉数据的发展趋势。与高次多项式曲线的过拟合现象相比,对于低次曲线来说,缺乏对数据的良好描述导致欠拟合。因此,为了更好地描述数据特征,采用二阶曲线对数据进行拟合,避免过拟合和欠拟合现象。
培训和测试
我们训练了一个模型,这是我们拟合的两条曲线。为了验证我们训练的模型是否准确,我们可以在初始训练时取出一部分训练数据作为测试数据,而不是仅仅通过逼近误差来判断模型的好坏。
总结
本节作为一个机器学习小实验的介绍,主要传达两个意思:
1.训练学习者必须理解和提炼数据,将注意力从算法转移到数据上。
2. 学习如何在不混淆训练和测试数据的情况下进行机器学习实验
今后我会加快速度,学习、实践。
参考
使用Python 构建机器学习系统。 Richert, W. Coelho, L.P.
转载请注明作者Jason Ding及出处
Github 主页(http://jasonding1354.github.io/)
好了,关于深度学习在数据挖掘中的应用:scikit-learn算法详解和的问题到这里结束啦,希望可以解决您的问题哈!
【深度学习在数据挖掘中的应用:scikit-learn算法详解】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
想入门机器学习,scikit-learn paraît bien connu, je pense que ce guide sera parfait !
有10位网友表示赞同!
我一直在找一个scikit-learn的学习资料,这也太棒了!
有5位网友表示赞同!
对机器学习一直比较感兴趣,这次有机会好好了解一下 scikit-learn。
有11位网友表示赞同!
scikit-learn 的文档好像也挺好理解的,这个指南应该可以帮到我。
有18位网友表示赞同!
终于找到一个详细的scikit-learn指南了!之前一直在网上翻找资料。
有19位网友表示赞同!
机器学习入门难吗?这个指南能让我了解更多吧。
有7位网友表示赞同!
打算用 scikit-learn 做一下项目,这篇文章看起来很不错。
有16位网友表示赞同!
看介绍说这指南针对新手,希望能够循序渐进地讲解。
有9位网友表示赞同!
刚开始学习机器学习,不知道从哪里入手,这个指南挺适合我的!
有10位网友表示赞同!
很多人都推荐用 scikit-learn ,这下可以认真学学了。
有15位网友表示赞同!
之前看过一些 scikit-learn 的代码,觉得太复杂了,希望能在这篇指南中有所突破。
有15位网友表示赞同!
学习一下机器学习, scikit-learn 是很常用的工具,这份指南挺有帮助的。
有13位网友表示赞同!
好棒!终于有一份我看得懂的 scikit-learn 学习资源了。
有15位网友表示赞同!
这个指南内容丰富吗?希望能够涵盖一些常见的算法和应用场景。
有16位网友表示赞同!
我已经开始阅读,感觉讲解很清晰易懂,而且有很多实际案例分析。
有5位网友表示赞同!
学习机器学习是一段很有成就感的旅程, scikit-learn 也是很好的工具!
有10位网友表示赞同!
想要用 scikit-learn 来解决一些数据分类问题,这篇文章应该有答案。
有17位网友表示赞同!
在网上找了许多关于 scikit-learn 的资料,但大多都是些很深奥的讲解,这个指南读起来比较顺畅。
有15位网友表示赞同!
scikit-learn 学习起来真是太简单了! 这份指南真的帮了我大忙。
有6位网友表示赞同!
学习机器学习是一件很有意义的事情。希望这份指南能够帮助更多人入门。
有19位网友表示赞同!