文章目录

  • 机器学习数据分析极简思路
    • 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算法小试相关推荐

  1. 大数乘法【极简思路、代码模板】

    793. 高精度乘法 - AcWing题库 极简思路 大数乘法可能和前面我们提到的大数减法 和 大数加法 的分治 思路不太一样,对于大数乘法我们可以有更加简单的思路. 这里提到的大数乘法,是针对与 一 ...

  2. java stl分解_[STL训练]寻梦-题解(Java代码)极简思路

    注意事项:  insert()方法只能被 StringBuffer 类的对象调用 参考代码: import java.util.Scanner; public class Main { private ...

  3. Python极简讲义——一本书入门数据分析与机器学习(序言)

    为什么写此书? 我们正处于一个数据科技(Data Technology,简称DT)的时代.我们的一举一动,都有能在数据空间留下电子印记.于是海量的社交.电商.行为及科研大数据铺面而来.然而,太多的数据 ...

  4. python数据分析入门书籍-Python极简讲义:一本书入门数据分析与机器学习

    "1.轻松入门:文笔流畅,通俗易懂,从Python基础.NumPy.Pandas.Matplotlib,到机器学习算法,循序渐进,帮助零基础读者快速入门.2.图文并茂:一图胜千言,书中配有精 ...

  5. 为 AI 初学者打造的《机器学习极简入门》面世了!

    随着人工智能技术的发展,机器学习已成为软件 / 互联网行业的常用技能,并开始向更多行业渗透.对越来越多的 IT 技术人员及数据分析从业者而言,机器学习正在成为必备技能之一. 今天我们就来聊聊机器学习的 ...

  6. 机器学习极简入门课程

    开篇词 | 入门机器学习,已迫在眉睫 大家好,我是李烨.现就职于微软(Microsoft),曾在易安信(EMC)和太阳微系统(Sun Microsystems)任软件工程师.先后参与过聊天机器人.大数 ...

  7. 今日推荐课程:机器学习极简入门

    课程介绍 本达人课针对机器学习初学者,从机器学习.深度学习最基本的原理及学习意义入手,以模型为驱动,带领大家吃透几个最经典的机器学习模型--学习这些模型的原理.数学推导.训练过程和优化方法. 本课为每 ...

  8. 数据分析入门极简书单

    本文授权转载自麻瓜编程 如果你找一个熟悉的朋友给你推荐书单,他会倾向于越短越好,因为他想把他知道的最好的推荐给你,让你少花时间在不重要的事情上. 但如果你在网上看到一个书单,往往会发现都很长长长长长, ...

  9. python函数五要素_机器学习极简入门

    首先,我们来看下当前机器学习领域招聘市场行情. 上面图例中所有带有"算法"."人工智能"."数据挖掘"."NLP"字样的 ...

最新文章

  1. POJ 1001(高精度乘法 java的2种解法)
  2. Flink在美团的实践与应用
  3. 小程序的事件处理参数不能取得
  4. 主键约束、外键约束、唯一约束、检查约束、默认值约束实例
  5. 在webclient UI page里嵌入external view
  6. 向服务器上传本地大文件的方法xshell
  7. 【Alpha】十天屠龙记
  8. 密码库LibTomCrypt学习记录——(0)LibTomCrypt简介
  9. 【Matlab身份证识别】BP神经网络身份证号码识别【含源码 1344期】
  10. 介绍一款非常好用的高效率截图工具----Snipaste(下载及安装)
  11. android相关素材以及网站
  12. 米世金《货币经济学》思维导图 附自制PPT
  13. 阿里云Redis开发遇到的问题总结
  14. c语言设计由数组,C语言程序设计_07数组.ppt
  15. SQLMAP进阶:参数讲解
  16. Dropbear替代Openssh-ssh client使用
  17. App流量变现并不一定损害用户体验,这些方法你得了解
  18. 学了这么久数据库,你知道五大系统数据库是什么吗?
  19. 鸿蒙系统能超过ios多少年,未来3年,鸿蒙系统能与iOS系统媲美吗,能否超越iOS系统?...
  20. python进阶路线知乎_Python学习教程(Python学习路线):第九天-面向对象进阶

热门文章

  1. 沧小海读《图解TCP/IP》笔记——第四章 IP协议
  2. 我用python代码表白,泡到了大学小师妹
  3. 第七章 如何增加收入
  4. 大数据如何使用OSM模型和AARRR模型搭建指标体系
  5. C语言——兔子繁殖问题多解
  6. 医疗行业虚拟化终端管理平台解决方案
  7. CSS 网格 Gird 布局
  8. 【机器学习开放项目】安然公司电子邮件数据集
  9. 从简单的线性方程开始了解Paddle Fluid 的全连接层 FC
  10. 矩阵方程的计算求解(Matlab实现)