标签:简单算法 sklearn describe 比较 and spl shape 是你 dev
Python目前是机器学习领域增长最快速的编程语言之一。
该教程共分为11小节。在这个教程里,你将学会:
这是一个非常简洁且实用的教程,希望你能收藏,以备后面复习!
接下来进入正题~
开始之前,要搞清楚该教程是否属于你的菜。
如果你不符合以下几点,也没关系,只要花点额外时间搞清楚知识盲点就能跟上。
所以这个教程既不是python入门,也不是机器学习入门。而是引导你从一个机器学习初级开发者,到能够基于python生态开展机器学习项目的专业开发者。
该教程分为12节
第1节:下载并安装python及Scipy生态
第2节:熟悉使用python、numpy、matplotlib和pandas
第3节:加载CSV数据
第4节:对数据进行描述性统计分析
第5节:对数据进行可视化分析
第6节:数据预处理
第7节:通过重采样进行算法评估
第8节:模型比较和选择
第9节:通过算法调整提高模型精度
第10节:通过集合预测提高模型精度
第11节:完善并保存模型
希望大家在学习的过程中能够自主寻找解决困难的办法,网上资源很丰富,这也是自我提升很关键的一步。当然也可以在评论区留言哦!
这一节内容比较简单,你需要下载python3.6并安装在你的系统里,我用的win10系统。
接着要安装Scipy生态和scikit-learn库,这里推荐使用pip安装。
简单介绍一下Scipy,Scipy是一个基于python的数学、科学和工程软件开源生态系统。包含一些核心库:numpy、scipy、pandas、matplotlib、ipython、sympy
如果你不想这么麻烦,那么也可以使用傻瓜式一条龙安装-Anaconda,这里面预装了python及一百多个库。
安装好后,就可以在命令行键入“python”,就可以运行python了。
看一下python及各个库的版本:
# Python version import sys print(‘Python: {}‘.format(sys.version)) # scipy import scipy print(‘scipy: {}‘.format(scipy.__version__)) # numpy import numpy print(‘numpy: {}‘.format(numpy.__version__)) # matplotlib import matplotlib print(‘matplotlib: {}‘.format(matplotlib.__version__)) # pandas import pandas print(‘pandas: {}‘.format(pandas.__version__)) # scikit-learn import sklearn print(‘sklearn: {}‘.format(sklearn.__version__))
如果没有报错,那么安装环节就成功了。
第一步,你要能够读写python脚本。
python是一门区分大小写、使用#注释、用tab缩进表示代码块的语言。
这一小节目的在于练习python语法,以及在python环境下如何使用重要的Scipy生态工具。
包括:
# 导入各个库 import numpy as np import pandas as pd import matplotlib.pyplot as plt myarray = np.array([[1, 2, 3], [4, 5, 6]]) # 使用numpy数组 rownames = [‘a‘, ‘b‘] colnames = [‘one‘, ‘two‘, ‘three‘] # 使用列表操作 mydataframe = pd.DataFrame(myarray, index=rownames, columns=colnames) #生成DataFrame print(mydataframe) mp = plt.plot(myarray) # 使用matplotlib绘制简单图表 plt.show() # 显示图像
机器学习算法需要有数据,这节讲解如何在python中正确地加载CSV数据集
有几种常用的方法供参考:
这里使用pandas来加载数据集,数据集使用网上数据Pima Indians onset of diabetes,你也可以使用本地数据练习
# Load CSV using Pandas from URL import pandas # 导入pandas库 url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv" names = [‘preg‘, ‘plas‘, ‘pres‘, ‘skin‘, ‘test‘, ‘mass‘, ‘pedi‘, ‘age‘, ‘class‘] data = pandas.read_csv(url, names=names) # 读取数据 print(data.head(5)) # 打印数据集前5行
导入数据后,第一步要做的是理解数据。
对数据理解的越透彻,建立的模型也会越精确。这里就要提到描述性统计分析,主要包括数据的频数分析、集中趋势分析、离散程度分析、分布以及一些基本的统计图形。
有以下几点操作:
依然使用pima数据集,接上一节读取数据后:
# Load CSV using Pandas from URL import pandas # 导入pandas库 url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv" names = [‘preg‘, ‘plas‘, ‘pres‘, ‘skin‘, ‘test‘, ‘mass‘, ‘pedi‘, ‘age‘, ‘class‘] data = pandas.read_csv(url, names=names) # 读取数据 head_5 = data.head(5) # 查看前5行 print(head_5) tail_5 = data.tail(5) # 查看后5行 print(tail_5) shape_ = data.shape # 查看数据规格,即多少行多少列 print(shape) dtypes_ = data.dtypes # 查看每个变量的数据类型 print(dtypes_) corr_ = data.corr() # 查看各个变量之间的相关性 print(corr_) description = data.describe() # 查看数据描述 print(description)
数据描述结果
仅仅是做描述性统计无法直观地理解数据,python提供了丰富的可视化工具,帮助展示数据。这一小节就是对上节数据集进行可视化描述,让你一目了然。
有以下几点操作:
# Load CSV using Pandas from URL import pandas # 导入pandas库 url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv" names = [‘preg‘, ‘plas‘, ‘pres‘, ‘skin‘, ‘test‘, ‘mass‘, ‘pedi‘, ‘age‘, ‘class‘] data = pandas.read_csv(url, names=names) # 读取数据 import matplotlib.pyplot as plt # 导入绘图模块 data.hist() # 直方图 data.plot(kind=‘box‘) # 箱图 pd.plotting.scatter_matrix(data) # 矩阵散点图 plt.show() # 展示图表
直方图
箱图
矩阵散点图
在将数据用作机器学习模型之前,需要对数据的内容和结构做适当的调整,才能更好的适应模型。这就是数据预处理工作。
有一些方法技术可以用于数据预处理,比如:
["男", "女"]
这样的数据, 可以编码成[1,2]
, 但是这种数据通常不是可以直接进入机器学习模型的。将这种分类数据进行连续化的方法最著名的就是one-hot-encoding
上面提到的数据预处理技术都可以通过scikit-learn提供的方法实现。
简单介绍下scikit-learn,scikit-learn拥有可以用于监督和无监督学习的方法,一般来说监督学习使用的更多。sklearn中的大部分函数可以归为估计器(Estimator)和转化器(Transformer)两类。
估计器(Estimator)其实就是模型,它用于对数据的预测或回归。基本上估计器都会有以下几个方法:
转化器(Transformer)用于对数据的处理,例如标准化、降维以及特征选择等等。同与估计器的使用方法类似:
列如,我要对数据集进行标准化处理,用到scikit-learn库中的StandardScaler()函数,那么先要用该函数的fit()方法,计算出数据转换的方式,再用transform()方法根据已经计算出的变换方式,返回对输入数据x标准化变换后的结果。
# 标准化数据 (0 mean, 1 stdev) from sklearn.preprocessing import StandardScaler # 导入标准化函数 import pandas import numpy # 读取数据 url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv" names = [‘preg‘, ‘plas‘, ‘pres‘, ‘skin‘, ‘test‘, ‘mass‘, ‘pedi‘, ‘age‘, ‘class‘] dataframe = pandas.read_csv(url, names=names) array = dataframe.values # 将数据分割为输入和响应两部分,即X和Y X = array[:,0:8] Y = array[:,8] # 对数据进行标准化处理 scaler = StandardScaler().fit(X) rescaledX = scaler.transform(X) # summarize transformed data numpy.set_printoptions(precision=3) print(rescaledX[0:5,:])
用于训练模型的数据集称为训练集,但如何评估训练出来的模型的准确度呢?显然不能再用训练集,否则既是裁判又是运动员。
所以,需要一个新的数据集用于验证模型的准确度,新数据的获取就需要用到重采样方法了。重采样可以将数据集切分为训练集和验证集两个数据,前者用于训练模型,后者用于评估模型。
验证数据取自训练数据,但不参与训练,这样可以相对客观的评估模型对于训练集之外数据的匹配程度。
模型在验证数据中的评估常用的是交叉验证,又称循环验证。它将原始数据分成K组(K-Fold),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型。这K个模型分别在验证集中评估结果,最后的误差MSE(Mean Squared Error)加和平均就得到交叉验证误差。
交叉验证有效利用了有限的数据,并且评估结果能够尽可能接近模型在测试集上的表现,可以做为模型优化的指标使用。
最后要通过某种评估规则计算出模型准确度的分数,这里提供了cross_val_score(scoring=‘‘)函数评估交叉验证结果,其中参数scoring代表评估规则。评估规则有很多种,针对回归和分类,有不同的选择,比如:
这一节要做的是:
# 使用交叉验证评估模型 from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression # 加载数据 url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv" names = [‘preg‘, ‘plas‘, ‘pres‘, ‘skin‘, ‘test‘, ‘mass‘, ‘pedi‘, ‘age‘, ‘class‘] dataframe = read_csv(url, names=names) array = dataframe.values X = array[:,0:8] Y = array[:,8] # 使用k折交叉验证,n-split就是K值,shuffle指是否对数据洗牌,random_state为随机种子 kfold = KFold(n_splits=10,shuffle = True, random_state=7) # 使用逻辑回归模型,这是一个分类算法 model = LogisticRegression(solver=‘liblinear‘) # 交叉验证,cv代表交叉验证生成器,这里是k折,scoring代表评估规则,输出模型对于10个验证数据集准确度的评估结果 results = cross_val_score(model, X, Y, cv=kfold,scoring=‘neg_mean_squared_error‘) # 打印这10个结果的平均值和标准差 print("Accuracy: %.3f%% (%.3f%%)") % (results.mean()*100.0, results.std()*100.0)
如果大家想要学习更多的python数据分析知识,请关注我的公众号:pydatas
标签:简单算法 sklearn describe 比较 and spl shape 是你 dev
原文地址:https://www.cnblogs.com/zhuwjwh/p/11308163.html