目录
为什么要写博客
小编过去是一名Java微服务开发人员。由于最近项目组换成了机器学习相关的项目,所以临时学习Python语言以及数学算法等知识。领导说:“如果要知道你是否已经学会了这个知识点,就把它记下来,说明白”。所以小编会记录并分享学习过程中的没一点。所以请大家看清楚,我也是一名小白,希望可以跟着大家一起学习机器学习入行大数据行业吧。这里重点说明,这些只是我的学习总结,部分code也是参考别人的例子。
机器学习相关常用Python库
为什么要使用Python
机器学习一般依赖Python语言来完成。为什么要使用Python呢?因为Python提供很多非常方便的类库供我们使用。我们可以不需要过度的考虑代码的风格或者代码的规范等限制,而专注与我们的数据分析数据。
关于如何安装Python,大家可以去官网下载Python安装包。但是小编比较懒,所以我会选择安装Anaconda。主要因为Anaconda会自带比较多的Python类库不需要我们手动下载,对于开发学习其实非常友好。
关于Python的学习,网上面其实有很多的资料视频或者文档,大家对着敲打一遍其实就差不多了。这里我就不做学习记录了。下面讲大概列举一些常用类库,方便大家学习。但因为我不想过多的去讲解代码产品如何使用。所以这里只做列举,具体的更多用法,请大家去查看官方API文档。
关于IDE的选择
关于IDE,其实并没有非哪一个IDE不可的。但相对起PyCharm,我更推荐Jupyter。这里不是说PyCharm不好用。只是Jupyter可以让我们的python脚本分段运行,我们可以运行一下段,然后写下一个方法输出个图,然后再运行一小段。而PyCharm的话更适合在拥有具体项目的把控和管理的时候使用。所以我比较推荐Jupyter。
关于Jupyter创建的文件路径,他在C盘你的user目录下面。
常用类库之numpy
numpy在Python关于数据处理方面发挥着重大的功效。他提供这很多方便我们操作数据的方法。如利用numpy创建向量或者数组。
# 引入numupy类库
import numpy as np
# 创建向量
vector = np.array([1,2,3,4])
# 创建数组
matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(vector)
print(matrix)
# 打印维度
print('matirx 的维度为',matrix.shape)
常用类库之pandas
pandas是机器学习当中最常用的类库。同样的提供着各式各样的数据操作,但pandas部分功能比numpy更优越。而且他提供强大的读写文件功能。在机器学习方面,我们大多使用文件来存储我们的数据。Pandas可以简单的把数据读成dataframe(一个它定义的数据格式)。然后我们可以通过dataframe来玩我们的数据。
import pandas as pd
# 读取csv文件
food_info = pd.read_csv('food_info.csv')
# 打印前五行
food_info.head(5)
# 取第0行数据
print(food_info.loc[0])
# 取Shrt_Desc列数据
print(food_info['Shrt_Desc'])
# 排序
food_info.sort_values('Water_(g)',inplace=True,ascending=False)
常用类库之Matplotlib
Matplotlib是Python类库当中的画图工具。在机器学习算法研究的过程中,我们需要先对数据进行调研以构建适合我们的模型。而在数据调研的过程中,有时候我们需要绘制一些图表。这样我们可以更容易的分析我们的数据,或者评价我们的模型是否合适。
import pandas as pd
import matplotlib.pyplot as plt
unrate_df = pd.read_csv('UNRATE.csv')
# 把时间转化成date格式
unrate_df['DATE'] = pd.to_datetime(unrate_df['DATE'])
unrate_df.head(10)
firs_12 = unrate_df[0:12]
# 绘制图
plt.plot(firs_12['DATE'],firs_12['VALUE'])
# 展示图
plt.show()
常见类库之Seaborn
Seaborn同样是Python当中重要的绘图工具之一。他与Matplotlib对比,各有优缺点。但就我暂时学习情况来讲的话,似乎Seaborn更强大一些。也不知道到底是我更重学后者还是怎么回事。下面是一些样例code,图片有点多,大家自己运行查看吧。
import seaborn as sns
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
from scipy import stats, integrate
#根据均值和协方差生成数据
mean,cov = [0,1],[(1,.5),(.5,1)]
data = np.random.multivariate_normal(mean,cov,200)
df = pd.DataFrame(data,columns=['x','y']) # 这里就使用到上述说的pandas.dataframe
#观测两个变量之间的关系,最好使用散点图
sns.jointplot(x='x',y='y',data=df)
# 绘制分布深度图,判断点出现得大小
x,y = np.random.multivariate_normal(mean,cov,1000).T
with sns.axes_style('white'):# 黑白风格
sns.jointplot(x=x,y=y,kind='hex',color='k')
#绘制各属性之间的对比图
iris = sns.load_dataset('iris')
sns.pairplot(iris)
机器学习基本理解
在我看来,机器学习与数据挖掘具备着一定的相似性。它涉及着一定的数学知识。如:概率论、统计学、工程算法等。但不同的是机器学习更着重于建模,也就是算法的设计。我们需要不断的对数据进行分析从而设计出更好的算法去拟合实际需求。(一般不会有完全拟合)这样可以让我们的计算机从中学习到个中规律,并利用这些规律对新的数据进行预测。
或许你会问:要玩机器学习,我们是不是要拥有很强的数学知识?我问了一些老师们,其中得出的结果是:我们需要具备一定的数学知识,但其实不需要过于精通。所以我认为只要我们掌握基本的积分、求导等知识后。后面可以通过学习慢慢掌握。(仅仅是个人见解)
一般的流程是我们首先需要明确我们的需求,然后寻找相关的数据进行分析。接着使用各种算法或组合设计出我们的模型。然后去训练我们的模型,以此达到更好的拟合度。最后运行我们的模型。
机器学习大致可以分为以下五个大类:
- 监督学习:从给定的训练数据集中学习出-一个函数,当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求是输人和输出,也可以说是特征和目标。训练集中的目标是由人标注的。常见的监督学习算法包括回归与分类。
- 无监督学习:无监督学习与监督学习相比,训练集没有人为标注的结果。常见的无监督学习算法有聚类等。
- 半监督学习:这是一"种介于监督学习与无监督学习之间的方法。
- 迁移学习:将已经训练好的模型参数迁移到新的模型来帮助新模型训练数据集。
- 增强学习:通过观察周围环境来学习。每个动作都会对环境有所影响,学习对象根据观察到的周围环境的反馈来做出判断。
当然,讲到机器学习少不了的是算法,这里稍微列举一下,以后学习复习中会细致描述:
- 回归算法:所谓的回归算法就是通过我们的模型来预测一笔新数据的具体值。比如线性回归。
这里列举线性回归的一个经典例子。如果我们想要预测放假,而放假是跟面积有关联的。假设房价为y,面积是x。我们可以得到一个算法:y=a*x+b。这里b是允许的误差值。假设我们通过训练之后我们知道a和b的具体值。那么我们就可以输入任意面积x来预测出我们的房价y - 分类算法:所谓的分类算法就是我们输入一个样本的时候,模型会帮我们对这个样本进行分类。比如决策树。假设我们现在有一棵决策树模型用于判断学生考试成绩是否及格。成绩<60为不及格,60<=成绩<=100是及格。假如小明的成绩为89分,那么模型会将小明该科成绩归为及格。
- 聚类算法:聚类是一种无监督学习任务,该算法基于数据的内部结构寻找观察样本的集群。比如最常见的K-means算法。他可以将我们输入的各种样本进行分类,分出多个集合。如图所示,我们将样本分成3块
好了,第一篇机器学习的知识回顾就先到这里。接下来我会更新我所学习到的知识内容,特别是算法以及实践。以后我会公开我学习的git仓库,里面有会有一些我将来学习各种算法以及实践的样例。假如各位看到这个文章又觉得我说的不好,欢迎大家做出指点。
点我阅读更多算法分享