#课程链接
https://www.imooc.com/video/20165

一、机器学习介绍以及环境部署

1、机器学习介绍及其原理

1)什么是人工智能

人工智能就其本质而言,是机器对人的思维信息过程的模拟,让它能像人一样思考。根据输入信息进行模型结构、权重更新,实现最终优化

特点:信息处理、自我学习、优化升级。

2)核心方法

机器学习:一种实现人工智能的方法,使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。比如垃圾邮件检测、房价预测。

深度学习:一种实现机器学习的技术,模仿人嘞神经网络,建立模型,进行数据分析。比如人脸识别、语义理解、无人驾驶。

3)主要类别

监督学习:基于数据及结果进行预测。一组输入数据对应一个正确的输出结果

非监督学习:从数据中挖掘关联性。不存在“正确的”答案

4)基本原理

监督学习核心步骤:1)使用标签数据训练机器学习模型;2)调用训练好的机器学习模型,根据新的输入数据预测对应的结果

非监督学习:不需要标签数据,而是通过引入预先设定的优化准则进行模型训练,比如自动将数据分为三类

2、机器学习开发环境部署

1)python介绍

python是一种解释性的、面向对象的、移植性强的高级程序设计语言。

2)scikit-learn介绍

python语言中专门针对机器学习而发展起来的一款开源框架,可以实现数据预处理、分类、回归、降维、模型选择等常用的机器学习算法

3)Jupyter notebook介绍

它是一个开源的web应用程序,旨在方便开发者创建和共享代码文档。

4)环境部署

#第一步,安装python
https://www.python.org/
#第二步,安装Anaconda
https://www.anaconda.com/
#第三步,新建开发环境、安装numpy、scikit-learn库
conda create -n env_name
pip(conda) install package_name -i source_address
#第四步,Jupter notebook界面优化
https://github.com/dunovank/jupter-themes

二、机器学习编程实战

3、机器学习实现之数据预处理

1)Iris数据集

Iris鸢尾花数据集是一个经典数据集,属于监督式学习应用:根据花的四个特征预测鸢尾花卉属于哪一品种。

2)使用scikit-learn进行数据处理的关键

区分属性数据与结果数据;属性数据与结果数据都是量化的;运算过程中,属性数据与结果数据的类型都是Numpy数组;属性数据与结果数据的维度是对应的

3)代码

#iris数据加载
from sklearn import datasets
iris = datasets.load_iris()
展示iris数据
print(iris.data)
print(iris.feature_names)
print(iris.target)
print(iris.target_names)
print(type(iris.data))
print(type(iris.target))
print(iris.data.shape)
#x输入数据赋值,y输出数据赋值
x = iris.data
y = iris.target
print(x)
print(y)

4、机器学习实现之模型训练

1)分类问题介绍

定义:根据数据集目标的特征或属性,划分到已有的类别中,常用的分类算法:KNN、逻辑回归、决策树、朴素贝叶斯

2)KNN模型

给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最相邻的k个实例,这k个实例的多数属于某个类,就把该输入实例分类到这个类中

3)代码

#导入iris数据集
from sklearn import datasets
iris = datasets.load_iris() #样本数据与结果分别赋值到x,y
x = iris.data
y = iris.target #确认样本与输出数据维度
print(x.shape)
print(y.shape) '''
使用scikit-learn建模四步骤
1、调用需要使用的模型类
2、模型初始化
3、模型训练
4、模型预测
'''
from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors=1) print(knn) knn.fit(x,y) knn.predict([[1,2,3,4]]) x_test = [[1,2,3,4],[2,4,1,2]] knn.predict(x_test) #可设置新的k值

5、机器学习实现之模型评估(一)

1)评估流程

<1>将整个数据集用于训练与测试:1'使用整个数据集进行模型训练;2'使用相同的数据集进行测试,并通过对比预测结果与实际结果来评估模型表现

准确率:正确预测的比例;用于评估分类模型表现的常用指标

缺点:1'训练模型的最终目标是为了预测新数据对应的结果;2'最大化训练准确率通常会导致模型复杂化(比如增加维度),因此将降低模型的通用性;3'过度复杂模型容易导致训练数据的过度拟合

<2>分离训练数据与测试数据:1'把数据分成两部分:训练集、测试集;2'使用训练集数据进行模型训练;3'使用测试集数据进行预测,从而评估模型表现

优点:1'可实现在不同数据集上进行模型训练和预测;2'建立数学模型的目的是对新数据的预测,基于测试数据计算的准确率能有效地评估模型表现

2)模型关键参数选择

目标:确定合适的参数组,提高模型预测准确率

方法:

1、遍历参数组合,建立对应的模型

2、使用训练集数据进行模型训练

3、使用测试集数据进行预测,评估每个模型表现

4、通过图形展示参数组与准确率的关系,确定合适的参数组

3)代码

#将整个数据集用于训练与测试
#数据加载 模型训练与预测
from sklearn import datasets
iris = datasets.load_iris()
x = iris.data
y = iris.target from sklearn.neighbors import KNeighborsClassifier
knn_5 = KNeighborsClassifier(n_neighbors= 5)
knn_5.fit(x,y) y_pred = knn_5.predict(x)
print(y_pred)
print(y_pred.shape) #准确率计算
from sklearn.metrics import accuracy_score
print(accuracy_score(y, y_pred)) #KNN(K=1)
knn_1 = KNeighborsClassifier(n_neighbors = 1)
knn_1.fit(x, y )
y_pred = knn_1.predict(x)
print(accuracy_score(y, y_pred))
#分离训练数据与测试数据
#数据分离
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size =0.4) #分离后数据集的维度确认
print(x_train.shape,x_test.shape,y_train.shape,y_test.shape) #分离后数据集的训练与评估
knn_5_s = KNeighborsClassifier(n_neighbors = 5)
knn_5_s.fit(x_train, y_train)
y_train_pred = knn_5_s.predict(x_train)
y_test_pred = knn_5_s.predict(x_test) #分离后模型预测的准确率
print(accuracy_score(y_train,y_train_pred))
print(accuracy_score(y_test,y_test_pred))

6、机器学习实现之模型评估(二)

python实现机器学习笔记的更多相关文章

  1. Python机器学习笔记:使用Keras进行回归预测

    Keras是一个深度学习库,包含高效的数字库Theano和TensorFlow.是一个高度模块化的神经网络库,支持CPU和GPU. 本文学习的目的是学习如何加载CSV文件并使其可供Keras使用,如何 ...

  2. Python机器学习笔记:sklearn库的学习

    网上有很多关于sklearn的学习教程,大部分都是简单的讲清楚某一方面,其实最好的教程就是官方文档. 官方文档地址:https://scikit-learn.org/stable/ (可是官方文档非常 ...

  3. Python机器学习笔记:不得不了解的机器学习面试知识点(1)

    机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...

  4. Python机器学习笔记:不得不了解的机器学习知识点(2)

    之前一篇笔记: Python机器学习笔记:不得不了解的机器学习知识点(1) 1,什么样的资料集不适合用深度学习? 数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势. 数据集没有局 ...

  5. Python机器学习笔记 集成学习总结

    集成学习(Ensemble  learning)是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合,从而获得比单个学习器显著优越的泛化性能.它不是一种单独的机器学习算法啊,而更像是一种优 ...

  6. Python机器学习笔记:K-Means算法,DBSCAN算法

    K-Means算法 K-Means 算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means 算法有大量的变体,本文就从最传统的K-Means算法学起,在其基础上学习 ...

  7. python机器学习笔记:EM算法

    EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域的基础,比如隐式马尔科夫算法(HMM),LDA主题模型的变分推断算法等等.本文对于E ...

  8. Python机器学习笔记:SVM(1)——SVM概述

    前言 整理SVM(support vector machine)的笔记是一个非常麻烦的事情,一方面这个东西本来就不好理解,要深入学习需要花费大量的时间和精力,另一方面我本身也是个初学者,整理起来难免思 ...

  9. Python机器学习笔记:异常点检测算法——LOF(Local Outiler Factor)

    完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote 在数据挖掘方面,经常需 ...

随机推荐

  1. Nginx解决跨域问题(CORS)

    跨域 解决跨域问题一般有两种思路: CORS 在后端服务器设置 HTTP 响应头,把你需要运行访问的域名加入加入 Access-Control-Allow-Origin中. jsonp 把后端根据请求 ...

  2. spring boot 与 Mybatis整合(*)

    在pom.xml文件中加入数据库.spring-mybatis整合 <!-- spring boot 整合mybatis --> <dependency> <groupI ...

  3. ThreadLocal引起的一次线上事故

    > 线上用户存储数据后查看提示无权限 前言 不知道什么时候年轻的我曾一度认为Java没啥难度,没有我实现不了的需求,没有我解不了的bug 直到我遇到至今难忘的一个bug . 线上用户存储数据后查 ...

  4. IP子网划分与聚合

    一:IP地址: IP地址是由32位2进制数组成,每8位一组.由点分十进制表达. IP地址可以分为五类 A类(1.0.0.0-126.255.255.255),127.0.0.1 为本地回环地址. B类 ...

  5. Introduction to x265 Rate Control Algorithm

    The rate control in x265 is the same as x264's implementation, which is mostly empirical. It include ...

  6. ES6对象的新增方法的使用

    Object.assign Object Object.assign(target, ...sources) 将所有可枚举属性的值从一个或多个源对象复制到目标对象 参数: target 目标对象 so ...

  7. 登录框-element-ui 样式调节

    element-ui样式调节 首先设置布局 如果想要实现如下效果 需要两行,然后设置偏移,第一行中间只是站位,没有内容,可以考虑使用div占位,设置最小高度 el-card调整圆角 border-ra ...

  8. [linux] Git基本概念&操作

    1.基本概念 版本控制系统:一种软体工程技巧,籍以在开发的过程中,确保由不同人所编写的同一项目代码都得到更新.并追踪.记录整个开发过程. 集中式(SVN)/ 分布式(GIT)版本控制系统:SVN的版本 ...

  9. 一文搞懂spring的常用注解

    spring传统做法是使用xml文件对bean进行注入和配置.通过使用spring提供的注解,可以极大的降低配置xml文件的繁琐.本文将介绍常用的注解. 一@Autowired Autowired意为 ...

  10. 【BIGDATA】ElasticSearch HEAD插件的GET请求的坑

    今使用HEAD插件,发现复杂查询功能下,使用GET请求有坑. 查询语句如下: GET kk/_search { "query": { "match": { &q ...