近两年发现,身边充满了机器学习,AI这些词汇,感觉全世界都是他们的声音.突然有想法写一段博客,来记录一个普通的菜鸟程序员,如何一点点入门,上手机器学习.
先helloworld,再逐步了解什么是机器学习什么是算法吧.
本系列文章统一使用Python做演示.
1.安装Python
可以在python.org(https://www.python.org)下载合适的版本,并参照相应的安装说明进行安装,本文使用Python3.6
2.安装必要工具包
SciPy,Numpy,Matplotlib和pandas
安装完成后通过打印版本号进行校验,打印出相应版本号则认为安装成功
import scipy
import numpy
import matplotlib
import pandas
print(scipy.__version__)
print(numpy.__version__)
print(matplotlib.__version__)
print(pandas.__version__)
#################################
推荐一种更加便捷的方式 Anaconda
Anaconda提供了包管理与环境管理的功能,可以很方便的解决多版本Python并存,切换以及各种第三方包的安装问题.Anaconda是免费的可以自由的进行下载(https://www.continuum.io/downloads)和安装,选择适合自己操作系统的版本安装即可.机器学习科学技算涉及到的大部分包已经包含在其中.无需手动安装.具体使用方法此处不多做介绍.
接下来开始我们的HelloWorld项目
这个项目是针对鸢尾花(Iris Flower)进行分类的一个项目,数据集是含鸢尾花的三个亚属的分类信息,通过机器学习算法生成一个模型,自动分类新数据应该属于这三种的哪一个分类.
没错,大名鼎鼎的Iris数据集,为什么使用它做案例呢,因为这个数据集有以下特点:
1.所有特征数据都是数字,不需要考虑如果导入和处理数据
2.这是一个分类问题,可以很方便的通过有监督学习算法来解决问题
3.所有的特征数值采用相同的单位,不需要进行尺度的转换
我们将通过以下的步骤来实现我们的第一个项目
(1)导入数据
(2)浏览数据
(3)数据可视化
(4)评估算法
(5)实施预测
下面开始代码部分
首先我们导入项目需要用到的类库和方法,这部分不应该有报错提示.如果出现了错误提示,停下来检查是否环境有问题或者拼写错误
from pandas import read_csv
from pandas.plotting import scatter_matrix
from matplotlib import pyplot
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
导入数据
这里我们选择自行下载数据集保存到项目所在的目录中.(http://archive.ics.uci.edu/ml/datasets/Iris)
#数据集文件的名称是iris.data.csv
filename = 'iris.data.csv'
#names可以理解为数据集中每列数据的标题
names = ['separ-length','separ-width','petal-length','petal-width','class']
#调用pandas中现成的方法导入数据集
dataset = read_csv(filename,names =names)
数据浏览
执行到这一步没有出错,那么恭喜我们可以开始对数据做一些事情了
print(dataset.shape)
我们可以看到我们导入了一个多少行多少列的数据
print(dataset.head(10))
查看数据的前十行,对数据有个大概映像
以及可以通过print(dataset.describe())来查看数据集的各项统计数据,执行结果如下
separ-length separ-width petal-length petal-width
count 150.000000 150.000000 150.000000 150.000000
mean 5.843333 3.054000 3.758667 1.198667
std 0.828066 0.433594 1.764420 0.763161
min 4.300000 2.000000 1.000000 0.100000
25% 5.100000 2.800000 1.600000 0.300000
50% 5.800000 3.000000 4.350000 1.300000
75% 6.400000 3.300000 5.100000 1.800000
max 7.900000 4.400000 6.900000 2.500000
观察数据不同分类的分布情况
print(dataset.groupby('class').size())
class
Iris-setosa 50
Iris-versicolor 50
Iris-virginica 50
dtype: int64
现在我们就对我们的数据有了一些初步的认识了,接下来通过可视化更加直观的观察数据
dataset.hist()
pyplot.show()
散点图
scatter_matrix(dataset)
pyplot.show()
到这一步我们已经了解了我们的数据集,将要对他做一些操作了.这这里我们需要把我们的数据集分离一下.我们发现数据集的前四列是一些特征的值,而第五列是他对应的分类,也就是我们要预测的目标.同时我们应该把数据集分为两部分,其中的一部分用来训练算法模型,另一部分留出来用来评价和检测模型
array = dataset.values
X = array[:,0:4]
Y = array[:,4]
validation_size = 0.2
seed = 7
X_train,X_validation,Y_train,Y_validation = train_test_split(X,Y,test_size = validation_size,random_state = seed)
下一步我们使用一些大家可能听过的,几个著名的算法来对数据集进行训练,并作出准确率等评估.
此处提几个名词,我们可能在其他地方有听到,现在我们就来用一下他们,走近他们.在系列文章的后面我会逐个讲解这些算法是什么,原理等,在此处,我们只需要拿来用即可
线性回归(LR)
线性判别分析(LDA)
K近邻(KNN)
分类与回归树(CART) //或者说决策树大家更熟悉一些?
贝叶斯分类器(NB)
支持向量机(SVM)
models ={}
models['LR'] = LogisticRegression()
models['LDA'] = LinearDiscriminantAnalysis()
models['KNN'] = KNeighborsClassifier()
models['CART'] = DecisionTreeClassifier()
models['NB'] = GaussianNB()
models['SVM'] = SVC()
这是Python的字典,我们先把用到的六个算法放到字典里,方便一会儿对字典中的算法遍历使用
results = []
for key in models:
kfold = KFold(n_splits =10,random_state =seed)
cv_results = cross_val_score(models[key],X_train,Y_train,cv=kfold,scoring='accuracy')
results.append(cv_results)
print(key,cv_results.mean(),cv_results.std())
LR 0.9666666666666666 0.04082482904638632
LDA 0.975 0.03818813079129868
KNN 0.9833333333333332 0.03333333333333335
CART 0.9666666666666666 0.04082482904638632
NB 0.975 0.053359368645273735
SVM 0.9916666666666666 0.025000000000000012
观察结果,我们会发现在这个数据集总,svm的准确度得到了最好的表现,那我们就使用SVM对我们的测试数据集进行一个预测.看看表现如何
svm = SVC()
svm.fit(X=X_train,y=Y_train)
predictions = svm.predict(X_validation)
#打印算法预测的准确度,我们会发现准确度达到了0.93是一个挺不错的表现
print(accuracy_score(Y_validation,predictions))
#打印冲突矩阵
print(confusion_matrix(Y_validation,predictions))
到这里我们就成功完成了一个机器学习项目.这个项目包含了从数据导入到生成模型,以及通过模型对数据进行分类的全部过程.在之后的文章里,我会对机器学习各环节展开详细的描述.
第一次写博客,欢迎大家拍砖~