零基础机器学习之Hello,World

    近两年发现,身边充满了机器学习,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))

 

到这里我们就成功完成了一个机器学习项目.这个项目包含了从数据导入到生成模型,以及通过模型对数据进行分类的全部过程.在之后的文章里,我会对机器学习各环节展开详细的描述.

 

第一次写博客,欢迎大家拍砖~

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值