内容大纲

1、回归算法-线性回归分析

2、线性回归实例

3、回归性能评估

4、分类算法-逻辑回归

5、逻辑回归实例

6、聚类算法-kmeans

7、k-means实例

Q:如何判断是分类算法还是回归算法

由目标值特征来决定使用分类(离散型)算法还是回归(连续型)算法

Q:回归有什么应用分类

回归的应用:一个是知道具体的数据预测,一个是得到回归后的分类问题

1. 回归算法-线性回归分析

1.1关于线性回归

Q:线性回归的作用

寻找一种能预测的趋势

Q:线性回归特征值与目标值的特点

二维:直线关系

三维:平面

1.2关于线性关系模型

Q:概念

一个函数,功能是预测,方式是通过学习属性的线性组合。

Q:线性回归的定义和对机器算法的对照

定义:线性回归通过一个或者多个自变量(特征值)因变量(目标值)之间之间进行建模的回归分析。其中特点为一个或多个称为回归系数的模型参数的线性组合

一元线性回归:涉及到的变量(特征值)只有一个

多元线性回归:涉及到的变量(特征值)两个或两个以上

Q:数组的特点

几维数组就包括有几层括号

N维数组就包括N-1维的数组。

Q:矩阵和数组

矩阵是二维的数组

Q:矩阵为什么在机器算法中非常重要,是大多数算法的基础。以线性回归为例

线性回归中用属性和权重的组合来预测结果

矩阵满足特定运算的需求。

矩阵乘法:

1.2预测的误差

预测结果和真实值会有偏差

预测与真实的误差 决定了回归与神经网络用的是迭代的算法

通过不断改变权重wi

Q:损失函数的概念与内涵

指的是误差大小

损失 越小,误差越小——找到目标,使总损失最小。

优化的过程,就是不断学习,找到最优的动态权重的过程,

Q:最小二乘法正规方程?

Q:机器算法:梯度下降(降到最底,底部为损失函数最小)

a为超参数,手工指定,体现学习调整的速度

方向为系统自带,不用考虑

理解:沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后

更新W值

使用:面对训练数据规模十分庞大的任务

示意图:

算法的自我学习的过程

Q:回归API

最终目的是求出W

•sklearn.linear_model.LinearRegression()

•普通最小二乘线性回归
•coef_:回归系数

•sklearn.linear_model.SGDRegressor( )

•通过使用SGD最小化线性模型
•coef_:回归系数
•梯度下降

Q:sklearn优缺点

参数在API内部优化,有点像黑盒子

VS~

tensorflow可以自己实现

1.3实例:波士顿房价

Q:步骤

1、波士顿地区房价数据获取

2、波士顿地区房价数据分割

3、训练与测试数据标准化处理(另一个需要标准化的是K近邻~~~~否则由于二乘法的原因,导致异常。)

特征值和目标值都要标准化处理

(用inverse_transform返回标准化前的处理)

另外特征值和目标值 还不能用同一个标准化实例,因为特征值肯定是多个的,目标值只有一个。

4、使用最简单的线性回归模型LinearRegression和

梯度下降估计SGDRegressor对房价进行预测

Q:正规方程和梯度下降两种方式的对比

LinearRegression()会有两个版本,两个版本的对比:

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor,  Ridge, LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
def mylinear():"""线性回归直接预测房子价格:return: None"""# 获取数据lb = load_boston()# 分割数据集到训练集和测试集(先特征值再目标值,先训练集再测试集)x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)# print(y_train, y_test)# 进行标准化处理,特征值 和目标值 都要进行标准化处理,但需要用两个不同的标准化实例# 特征值和目标值是都必须进行标准化处理, 实例化两个标准化APIstd_x = StandardScaler()x_train = std_x.fit_transform(x_train)x_test = std_x.transform(x_test)# 目标值std_y = StandardScaler()y_train = std_y.fit_transform(y_train.reshape(-1, 1))y_test = std_y.transform(y_test.reshape(-1, 1))# 预测房价结果#通过inverse_transform返回标准化之前的值y_predict = std_y.inverse_transform(x_test)print("保存的模型预测的结果:", y_predict)# estimator预测# 正规方程求解方式预测结果lr = LinearRegression()#fit导入训练集中的特征值和目标值lr.fit(x_train, y_train)#打印特征值的系数print('特征权重',lr.coef_)# 保存训练好的模型# joblib.dump(lr, "./tmp/test.pkl")# 预测测试集的房子价格y_lr_predict = std_y.inverse_transform(lr.predict(x_test))print("正规方程测试集里面每个房子的预测价格:", y_lr_predict)return Noneif __name__ == "__main__":mylinear()

Q:正规方程与梯度下降出来的权重是否相同

权重计算出来是不一样的。

Q:回归评价

指标:(均方误差(Mean Squared Error)MSE)

使用的回归评估API

•sklearn.metrics.mean_squared_error

解释:

•mean_squared_error(y_truey_pred)
•均方误差表示回归损失
参数:
•y_true:真实值
•y_pred:预测值
返回值:
•return:浮点数结果

注:真实值,预测值为标准化之前的值 

Q:正规方程和梯度下降对于权重的评价

如果数据量小,应当用正规方式,即LinearRegression

如果数据量大,十几万以上时,SGDregression更适合

官网的推荐:

再次对比:

Q:对于线性回归的评价

线性回归器是最为简单、易用的回归模型。

从某种程度上限制了使用,尽管如此,在不知道特征之间关系的前提下,我们仍然使用线性回归器作为大多数系统的首要选择。

小规模数据:LinearRegression(不能解决过拟合或者欠拟合的问题)

(有其他的回归算法可以选择)

大规模数据:SGDRegressor

1.4拟合问题

Q:拟合问题

过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)

欠拟合:一个假设在训练数据上不能获得更好的拟合, 但是在训练数据外的数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

对线性模型进行训练学习会变成复杂模型,主要原因是实际情况中,线性的情况非常少,基本是如下图的情况。但是我们用线性回归分析时,不考虑X,即特征值,只关注权重 。

进而产生欠拟合和过拟合的问题,通过交叉验证的方式进行验证

Q:对于欠拟合,解决办法

•原因:
•学习到数据的特征过少
•解决办法:
•增加数据的特征数量

Q:对于过拟合,解决办法

•原因:
•原始特征过多,存在一些嘈杂特征,模型过于复杂是因为模型尝试去兼顾

各个测试数据点

•解决办法:
•进行特征选择,消除关联性大的特征(很难做)
•交叉验证(让所有数据都有过训练)
•正则化(了解)

Q:解决过拟合的问题

权重越小,高次项就越小。

而Lineregression是做不到的,因为线性回归是尽可能的把所有的样本数据都统计进去,并尽可能的精确。

使用如下示意图的方法可以减少高次项权重的目的:

此方法称为:L2正则化

作用:可以使得W的每个元素都很小,都接近于0

优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象

Q:岭回归

•sklearn.linear_model.Ridge

•sklearn.linear_model.Ridge(alpha=1.0)
•具有l2正则化的线性最小二乘法
•alpha:正则化力度
•coef_:回归系数

如下图,从右往左,X轴越大,正则化力度越大,越趋近于0

Q:线性回归和岭回归的对比

•岭回归:回归得到的回归系数更符合实际,更可靠。另外,能让估计参数的波动范围变小,变的更稳定。在存在病态数据偏多的研究中有较大的实用价值。

Q:岭回归的超参数

参照网格搜索,进行调整

Q:模型的保存与加载

把自己的模型保存下来,下次使用,或者使用别人已经做好的模型

    import joblib# 保存训练好的模型joblib.dump(lr, "./temp01/test1.pkl")#方式二:使用保存的lr模型预测结果#打开此前保存的模型model=joblib.load(r'C:\Users\Administrator\PycharmProjects\数据算法基础\temp01\test1.pkl')y_lr_predict=std_y.inverse_transform(model.predict(x_test))print("使用保存的模型预测价格:", y_lr_predict)

需要具体说明

(1)pycharm的这个版本中,对于joblib的导入,已经采用

import joblib,而不再是视频中的例子

(2)保存的模型文件是pkl

保存前必须有相应的路径文件夹,pycharm不会新建文件夹路径

# 保存训练好的模型
joblib.dump(lr, "./temp01/test1.pkl")

(3)使用时

先通过load加载出来

model=joblib.load(r'C:\Users\Administrator\PycharmProjects\数据算法基础\temp01\test1.pkl')

接下来,通过predict()方法预测,参数为需要进行预测的参数。

y_lr_predict=std_y.inverse_transform(model.predict(x_test))

最后,留意模型预测时,导出的是标准化的值,需要逆转化成业务的实际值。

Q:全部回归代码及解释说明

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor,  Ridge, LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, classification_report
#from sklearn.externals import joblib
import joblib
import pandas as pd
import numpy as npdef mylinear():"""线性回归直接预测房子价格:return: None"""# 获取数据lb = load_boston()# 分割数据集到训练集和测试集(先特征值再目标值,先训练集再测试集)x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)# print(y_train, y_test)# 进行标准化处理,特征值 和目标值 都要进行标准化处理,但需要用两个不同的标准化实例# 特征值和目标值是都必须进行标准化处理, 实例化两个标准化APIstd_x = StandardScaler()x_train = std_x.fit_transform(x_train)x_test = std_x.transform(x_test)# 目标值std_y = StandardScaler()y_train = std_y.fit_transform(y_train.reshape(-1, 1))y_test = std_y.transform(y_test.reshape(-1, 1))#通过inverse_transform返回标准化之前的值y_predict = std_y.inverse_transform(x_test)print("模型预测的结果:", y_predict)# estimator预测# 正规方程求解方式预测结果lr = LinearRegression()#fit导入训练集中的特征值和目标值lr.fit(x_train, y_train)#打印特征值的系数print('正规方程特征权重',lr.coef_)# 保存训练好的模型joblib.dump(lr, "./temp01/test1.pkl")# 方式一:预测测试集的房子价格#y_lr_predict = std_y.inverse_transform(lr.predict(x_test))#print("正规方程测试集里面每个房子的预测价格:", y_lr_predict)#方式二:使用保存的lr模型预测结果#打开此前保存的模型model=joblib.load(r'C:\Users\Administrator\PycharmProjects\数据算法基础\temp01\test1.pkl')y_lr_predict=std_y.inverse_transform(model.predict(x_test))print("使用保存的模型预测价格:", y_lr_predict)#注意的是不是标准化后的值对比print("正规方程的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict))# 梯度下降去进行房价预测sgd = SGDRegressor()sgd.fit(x_train, y_train)print('梯度回归的特征权重:',sgd.coef_)# 预测测试集的房子价格y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))print("梯度下降测试集里面每个房子的预测价格:", y_sgd_predict)#注意的是不是标准化后的值 对比print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict))# 岭回归去进行房价预测#alpha为超参数,一般在0~1之间rd = Ridge(alpha=1.0)rd.fit(x_train, y_train)print('岭回归的特征权重',rd.coef_)# 预测测试集的房子价格y_rd_predict = std_y.inverse_transform(rd.predict(x_test))print("岭回归测试集里面每个房子的预测价格:", y_rd_predict)print("岭回归的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_rd_predict))return Noneif __name__ == "__main__":mylinear()

4.分类算法——逻辑回归

Q:逻辑回归的概念

解决二分类问题:

•广告点击率
•判断用户的性别
•预测用户是否会购买给定的商品类
•判断一条评论是正面的还是负面的

Q:如何解决

通过输入线性回归样本数据,得到二分类的概率

输入:h

机器算法基础——回归分析相关推荐

  1. AI人士不得不了解的十大机器算法

    往期精彩文章回顾: pytorch--人工智能的开源深度学习框架 PyTorch 手把手搭建神经网络 (MNIST) 神经网络的自我修养--神经网络结构搜索NAS简述 AI人士不得不了解的十大机器算法 ...

  2. 数据结构(二)算法基础与复杂度

    一.算法基础 1.算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作. 2.算法具有五个基本特性:输入.输出.有穷性.确定性和可行性. (1)输入输出:算 ...

  3. 【python】一道LeetCode搞懂递归算法!#131分割回文串 #以及刷LeetCode的一点点小心得 [数据结构与算法基础]

    题目:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串.返回 s 所有可能的分割方案. # 示例 输入: "aab" 输出: [["aa",&q ...

  4. 人工神经网络算法与机器算法是相同的算法吗

    什么是人工神经网络及其算法实现方式 人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点.它从信息处理角度对人脑神经元网络 ...

  5. 传统算法与神经网络算法,神经网络是机器算法吗

    机器学习和神经网络有什么区别 机器学习是目前实现人工智能最主要的方式.输入给程序,以及程序自行学习到的规律,就是机器学习算法.这个程序就是一个机器学习的系统. 神经网络是一种模拟人脑,取其精华去其糟粕 ...

  6. 数据结构与算法基础(java版)

    目录 数据结构与算法基础(java版) 1.1数据结构概述 1.2算法概述 2.1数组的基本使用 2.2 数组元素的添加 2.3数组元素的删除 2.4面向对象的数组 2.5查找算法之线性查找 2.6查 ...

  7. C/C++ 算法基础

    如果要真正掌握算法,必须要写代码的,那这时候就必须选择一门语言来进行,而具体的语言其实无所谓 ,C.C++.Java.Python,go甚至JavaScript.VB都可以,关键是自己要用的熟悉,面试 ...

  8. 计算机导论mod,算法基础计算机导论.ppt

    算法基础计算机导论 计算机导论 黄国兴.陶树平.丁岳伟编著 计算机导论 --软件部分 巢爱棠 atchao@yeah.net 办公室:1208 软件部分 第2章 计算机的基础知识(2.4-2.6) 第 ...

  9. 算法基础-十大排序算法及其优化(文末有抽奖福利哦)

    算法基础-十大排序算法及其优化 算法基础-十大排序算法及其优化 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kw1LA5Q4-1607527572080)(/uplo ...

  10. 《算法基础:打开算法之门》一1.5 拓展阅读

    本节书摘来自华章出版社<算法基础:打开算法之门>一书中的第1章,第1.5节,作者 [美]托马斯 H 科尔曼(Thomas H Cormen),更多章节内容可以访问云栖社区"华章 ...

最新文章

  1. 扔掉Swagger,试试这款功能强大,零注解侵入的API接口文档生成工具!
  2. 网易伏羲三项研究入选CVPR:AI感知表情能力将达到人类水平
  3. ASP.NET MVC Framework体验(1):从一个简单实例开始
  4. 【PM模块】维护处理简介
  5. boost::unique_copy相关的测试程序
  6. 用putty中的pscp命令拷贝文件
  7. linux-时间日期类
  8. EventBridge 事件总线及 EDA 架构解析
  9. SQL Server删除整个数据库中表数据的方法(不影响表结构)
  10. 英国FCA将比特币ATM加入未注册加密业务名单
  11. 汉文博士 0.5.7.2356 版发布
  12. 51Nod-1031 骨牌覆盖【递推】
  13. 凸优化第七章统计估计 7.5 实验设计
  14. 关于DIPS的MVC 4.0项目发布与在IIS 7.0上的部署的方法
  15. 二、Linux 教程-基础命令(1~180未完)
  16. 腾讯云IM Web端支持发送语音消息
  17. 批量添加时id使用mybatisplus的id生成策略
  18. Vim使用全指南 (环境配置,插件推荐,美化) (C++,Python,MarkDown,R...)
  19. HTML中怎么改变一条线的粗细
  20. android ip查看工具,安卓手机查看IP地址的两种方法

热门文章

  1. 专家:苹果手机换电池对系统速度几乎没影响
  2. 解决合并压缩包分卷无法解压 错误信息:文件格式未知或者压缩文件数据已经损坏
  3. [Codeforces266E]More Queries to Array...——线段树
  4. 基于jsp+mysql+Spring+SpringMVC+mybatis的大学生缴费系统
  5. CodeForces 1556C :Compressed Bracket Sequences 思维
  6. UMLChina建模竞赛第3赛季第7轮:假烟假酒假朋友,假情假意假温柔
  7. 项目管理 之三 项目生命周期、项目管理生命周期、产品生命周期、阶段方法、质量管理、配置管理等
  8. 云业务“探路” 中国联通成立产业互联网子公司
  9. wim工具扫描linux磁盘,[V1.30.2011.501版]WimTool -- Wim文件的图形视窗处理工具[无忧首发]...
  10. you are in emergency mode解决办法