机器学习数据分析极简思路及sklearn算法小试
文章目录
- 机器学习数据分析极简思路
- 1)理解和清理数据
- 2)特征选择
- 3)算法建模
- 4)测试评估模型
- sklearn 算法小试
- 实现目的
- 步骤
- 代码环境
- 源码
- 参考
作者:余涛
email:yutao@big.ac.cn
中国科学院大学
机器学习数据分析极简思路
机器学习拥有庞大的知识体系,这里对机器学习的数据分析的整个思路和流程作最最简单的归纳。机器学习的步骤大致包括:
1)理解和清理数据
2)特征选择
3)算法建模
4)测试评估模型
1)理解和清理数据
- 理解数据
数据是机器学习大餐的原始食材,对数据分析起着至关重要的作用,理解原始数据的含义将有助于进一步分析。例如,甲基化图谱与年龄有着显著的相关性,而与性别关系不大,因此在数据分析中,对这两个特征(faeature)需要区别对待。更好的理解方式是直接可视化某些数据,例如对于经典的鸢尾花数据集,可以通过python seaborn绘图包可视化各个特征(feature)之间的关系;对于大数据,则可以进行降维分析(PCOA、tSNE),理解数据组成主成分贡献度。
#pip install seabornimport matplotlib.pyplot as pyplotimport seaborn as sbimport pandas as pd%matplotlib inlinedata=pd.read_csv('iris.csv') #pandas 读入数据data.head(3) #查看数据data.describe() #数据基本统计sb.pairplot(data.dropna(),hue='Species')
鸢尾花数据组成
鸢尾花数据所有feature基本数理统计
鸢尾花数据不同feature相互关系
- 剔除异常值
清理数据的目的在于去除原始数据中的异常值和想办法处理缺失值,我们拿到手上的数据不可能尽善尽美,总有一些妖孽作祟,对于异常值我们应当剔除。举个栗子,假设在鸢尾花数据集中,有一个样本显示鸢尾花花瓣长度10m,其他诸如花瓣宽度、花萼长宽值都正常,可以脑补一下这是一朵什么样的花,那么这个样本显然应该剔除。 - 处理缺失值
缺失值在数据分析中很常见,总有一些样本观测值会因为这那的问题缺失,处理缺失值如果样本数量很大,而包含缺失值的样本又少,这个时候果断去掉这些样本,眼不见为净;如果因为样本有限或者缺失值太多,就要想办法补全缺失值(imputation),常常利用逻辑回归建立模型,找出这些数据变化的规律,从而预测缺失值。如何合理推断和填回这些缺失值是一门大学问,哪种方法好,我也不敢妄言。
2)特征选择
工业界广泛流传的一句话是:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征选择是机器学习的关键的关键。特征选择目的在于提取跟目标最为有效的信息,降低数据维度和计算成本,同时防止过拟合(overfitting,训练集特征用的太多太细,以致于在测试集中不适)。要知道,并不是特征越多,结果越好,没有严格意义上的特征累加效应,有时候好的几个特征胜于大量零碎的特征取得的效果。
在许多大数据挖掘竞赛中(国内的阿里天池和国外的kaggle平台),最复杂的过程莫过于特征工程建立阶段,大概占据了整个竞赛过程的70%的时间和精力,最终建立的模型的好坏大多也取决于特征工程建立的好坏。遗憾的是,特征工程不像模型建立的过程有着固定的套路,特征工程的建立凭借的更多的是经验,因此没有统一的方法。这里抛砖引玉介绍一些常见的办法,更为详细的内容请参考文后链接。
a)特征过滤法
比较简单,它按照特征的发散性或者相关性指标对各个特征进行评分,设定评分阈值或者待选择阈值的个数,选择合适特征。例如,我们可以简单的计算出每个feature的方差,方差越大说明这个feature在样本中变异大,即有区分性;而越小的(极端时方差为0),即表示在所有样本中一样,特征选择时则可不考虑这些特征。我们可以选择方差最大的前n个feature用于建模,这就是最为简单的方差筛选法。
b)包装法
根据目标函数,通常是预测效果评分,每次选择部分特征,或者排除部分特征。
c)嵌入法
则稍微复杂一点,它先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大到小来选择特征。类似于过滤法,但是它是通过机器学习训练来确定特征的优劣,而不是直接从特征的一些统计学指标来确定特征的优劣。
踩雷说:特征选择之后,需要从原始数据矩阵提取相应的特征重构矩阵,那么训练集和测试集的特征经过你各种变换之后,应当保持一一对应,类别和顺序在矩阵中都应该一致。
目前,已经有一些套路化的特征选择工具,例如python的FeatureSlector包,见链接。
3)算法建模
针对具体的问题,是分类问题?回归问题?还是其他?选择合适的模型,或者使用集成的算法模型。常见的算法模型包括:
对于回归问题:
a)线性回归(回归,LinearRegression)
b)岭回归(回归,Ridge)Ridge是线性回归加L2正则平方,以防止过拟合
c)拉索回归(Lasso),加入惩罚函数L1正则绝对值,防止过拟合
d)弹性网络回归(回归),同时使用L1和L2正则。
e)K近邻(回归和分类,KNeighborsRegressor)
f)决策树(回归和分类,DecisionTreeRegressor)
g)支持向量机(回归和分类,SVR)
对于分类问题:
a)支持向量机(回归和分类,SVC)
b决策树(回归与分类,DecisionTreeClassifier)
c)逻辑回归(分类,LogisticRegression)
d)LDA线性判别分析(分类,LinearDiscriminantAnalysis)
e)K近邻(分类,KNeighborsClassifier)
值得一提的是无论是分类还是回归问题,基于决策树和SVM的算法都有比较好的表现。
4)测试评估模型
测试评估模型的目的在于,解决模型的欠拟合(under-fitting)和过拟合(over-fitting)问题,通过即时的反馈不断调整模型、优化模型,使得模型更加稳健。
实际上,测试评估模型应该在你建模之前就考虑,例如是否需要设置纯粹的外部数据验证集,若没有这样的数据,你怎样划分数据进行建模预测?
在实际训练中,模型通常对训练数据好,但是对训练数据之外的数据拟合程度差。用于评价模型的泛化能力(即模型普适性)。交叉验证的基本思想是把在某种意义下将原始数据进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对模型进行训练,再利用验证集来测试模型的泛化误差。另外,现实中数据总是有限的,为了对数据形成重用,比较常用的是k-fold交叉验证法。测试评估模型的时候,常常结合AUC曲线判断模型好坏。
sklearn 算法小试
实现目的
sklearn是python中一个强大的机器学习模块,拥有众多的机器学习算法和功能。这里,通过sklearn的datasets构建一个数据集,并用4种常用算法:逻辑回归(LogisticRegression)、支持向量机(SVM)、决策树(DecisionTree)和集成算法(VotingClassifier)对训练集建模,然后对测试集预测,最终通过得分看一下4种算法的差异。
步骤
1)构建本次使用的数据集
2)将数据拆分成训练集和测试集
3)用4种算法分别建模、预测
代码环境
python版本:python3
1)如果不想被python各种安装包困扰,推荐Jupyter在线python,Jupyter官网,点击"Try Jupyter with Python",点击“+”号即可。安装包的时候直接pip install packages_name,例如pip install sklearn,点击“Run”,提示“Successfully installed sklearn-0.0”即安装完成。
2)Pycharm,专业、高效、强大的python开发端。
源码
#!/bin/env python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets #built-in datasets#make_moons,generated datasets
X,y = datasets.make_moons(n_samples=500,noise=0.3,random_state=42)
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.show() #plot for datasets#split datasets for train and test part
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=42)#1.logistic regression model
from sklearn.linear_model import LogisticRegression
log_clf=LogisticRegression() #create LR classifer
log_clf.fit(X_train,y_train) #train and fit the model
log_score=log_clf.score(X_test,y_test) #test the model#2.svm model
from sklearn.svm import SVC
svm_clf=SVC()
svm_clf.fit(X_train,y_train)
svm_score=svm_clf.score(X_test,y_test)#3.decision tree model
from sklearn.tree import DecisionTreeClassifier
dt_clf=DecisionTreeClassifier()
dt_clf.fit(X_train,y_train)
dt_score=dt_clf.score(X_test,y_test)#4.ensemble method
from sklearn.ensemble import VotingClassifier
voting_clf=VotingClassifier(estimators=[('log_clf',LogisticRegression()),('svm_clf',SVC()),('dt_clf',DecisionTreeClassifier())],voting="hard")
voting_clf.fit(X_train,y_train)
voting_score=voting_clf.score(X_test,y_test)print("log score:%s"%log_score)
print("svm score:%s"%svm_score)
print("dt score:%s"%dt_score)
print("voting score:%s"%voting_score)
构建数据集:
4种算法预测结果:
log score:0.864
svm score:0.888
dt score:0.84
voting score:0.904
可以看到,单一算法SVM比较好,集成算法较单一的算法还是有一定的提高。
参考
机器学习中,有哪些特征选择的工程方法?
FeatureSlector:一个可以进行机器学习特征选择的python工具
机器学习中的交叉验证
机器学习数据分析极简思路及sklearn算法小试相关推荐
- 大数乘法【极简思路、代码模板】
793. 高精度乘法 - AcWing题库 极简思路 大数乘法可能和前面我们提到的大数减法 和 大数加法 的分治 思路不太一样,对于大数乘法我们可以有更加简单的思路. 这里提到的大数乘法,是针对与 一 ...
- java stl分解_[STL训练]寻梦-题解(Java代码)极简思路
注意事项: insert()方法只能被 StringBuffer 类的对象调用 参考代码: import java.util.Scanner; public class Main { private ...
- Python极简讲义——一本书入门数据分析与机器学习(序言)
为什么写此书? 我们正处于一个数据科技(Data Technology,简称DT)的时代.我们的一举一动,都有能在数据空间留下电子印记.于是海量的社交.电商.行为及科研大数据铺面而来.然而,太多的数据 ...
- python数据分析入门书籍-Python极简讲义:一本书入门数据分析与机器学习
"1.轻松入门:文笔流畅,通俗易懂,从Python基础.NumPy.Pandas.Matplotlib,到机器学习算法,循序渐进,帮助零基础读者快速入门.2.图文并茂:一图胜千言,书中配有精 ...
- 为 AI 初学者打造的《机器学习极简入门》面世了!
随着人工智能技术的发展,机器学习已成为软件 / 互联网行业的常用技能,并开始向更多行业渗透.对越来越多的 IT 技术人员及数据分析从业者而言,机器学习正在成为必备技能之一. 今天我们就来聊聊机器学习的 ...
- 机器学习极简入门课程
开篇词 | 入门机器学习,已迫在眉睫 大家好,我是李烨.现就职于微软(Microsoft),曾在易安信(EMC)和太阳微系统(Sun Microsystems)任软件工程师.先后参与过聊天机器人.大数 ...
- 今日推荐课程:机器学习极简入门
课程介绍 本达人课针对机器学习初学者,从机器学习.深度学习最基本的原理及学习意义入手,以模型为驱动,带领大家吃透几个最经典的机器学习模型--学习这些模型的原理.数学推导.训练过程和优化方法. 本课为每 ...
- 数据分析入门极简书单
本文授权转载自麻瓜编程 如果你找一个熟悉的朋友给你推荐书单,他会倾向于越短越好,因为他想把他知道的最好的推荐给你,让你少花时间在不重要的事情上. 但如果你在网上看到一个书单,往往会发现都很长长长长长, ...
- python函数五要素_机器学习极简入门
首先,我们来看下当前机器学习领域招聘市场行情. 上面图例中所有带有"算法"."人工智能"."数据挖掘"."NLP"字样的 ...
最新文章
- POJ 1001(高精度乘法 java的2种解法)
- Flink在美团的实践与应用
- 小程序的事件处理参数不能取得
- 主键约束、外键约束、唯一约束、检查约束、默认值约束实例
- 在webclient UI page里嵌入external view
- 向服务器上传本地大文件的方法xshell
- 【Alpha】十天屠龙记
- 密码库LibTomCrypt学习记录——(0)LibTomCrypt简介
- 【Matlab身份证识别】BP神经网络身份证号码识别【含源码 1344期】
- 介绍一款非常好用的高效率截图工具----Snipaste(下载及安装)
- android相关素材以及网站
- 米世金《货币经济学》思维导图 附自制PPT
- 阿里云Redis开发遇到的问题总结
- c语言设计由数组,C语言程序设计_07数组.ppt
- SQLMAP进阶:参数讲解
- Dropbear替代Openssh-ssh client使用
- App流量变现并不一定损害用户体验,这些方法你得了解
- 学了这么久数据库,你知道五大系统数据库是什么吗?
- 鸿蒙系统能超过ios多少年,未来3年,鸿蒙系统能与iOS系统媲美吗,能否超越iOS系统?...
- python进阶路线知乎_Python学习教程(Python学习路线):第九天-面向对象进阶