目录

  • 1 模块一  Python与机器学习概述
    • 1.1 Python与机器学习简介
    • 1.2 发展历程
    • 1.3 基本语法
    • 1.4 帮助
    • 1.5 应用
    • 1.6 示例源代码(食品识别小小专家系统)
    • 1.7 示例代码   蜡笔小新
    • 1.8 小结
    • 1.9 Python基础教程(教&学资料)
      • 1.9.1 安装Python
      • 1.9.2 第一个python程序
      • 1.9.3 Python基础
      • 1.9.4 函数
      • 1.9.5 高级特性
      • 1.9.6 函数式编程
      • 1.9.7 模块
      • 1.9.8 面向对象编程
      • 1.9.9 面向对象高级编程
      • 1.9.10 错误、调试和测试
      • 1.9.11 IO编程
      • 1.9.12 进程和线程
      • 1.9.13 正则表达式
      • 1.9.14 常用内建模块
      • 1.9.15 常用第三方模块
      • 1.9.16 图形界面
      • 1.9.17 网络编程
      • 1.9.18 电子邮件
      • 1.9.19 访问数据库
      • 1.9.20 Web开发
      • 1.9.21 异步IO
      • 1.9.22 使用MicroPython
      • 1.9.23 实战训练(day1~~day10)
        • 1.9.23.1 Day 1 - 搭建开发环境
        • 1.9.23.2 Day 2 - 编写Web App骨架
        • 1.9.23.3 Day 3 - 编写ORM
        • 1.9.23.4 Day 4 - 编写Model
        • 1.9.23.5 Day 5 - 编写Web框架
        • 1.9.23.6 Day 6 - 编写配置文件
        • 1.9.23.7 Day 7 - 编写MVC
        • 1.9.23.8 Day 8 - 构建前端
        • 1.9.23.9 Day 9 - 编写API
        • 1.9.23.10 Day 10 - 用户注册和登录
      • 1.9.24 Day 11 - 编写日志创建页
      • 1.9.25 Day 12 - 编写日志列表页
      • 1.9.26 Day 13 - 提升开发效率
      • 1.9.27 Day 14 - 完成Web App
      • 1.9.28 Day 15 - 部署Web App
      • 1.9.29 Day 16 - 编写移动App
    • 1.10 FAQ
    • 1.11 阶段总结
  • 2 PYthon程序示例
    • 2.1 程序示例(一)初识程序
    • 2.2 程序示例(二)查看今天是今年的第几天
    • 2.3 程序示例(三)if elif else语句
    • 2.4 程序示例(四)元组,列表, 堆栈,队列
    • 2.5 程序示例(五)学玩游戏《学色彩  神魔三龟玩变色》
    • 2.6 程序示例(六)函数
    • 2.7 程序示例(七)字符串
    • 2.8 程序示例(八)文件
    • 2.9 程序示例(九)排序
    • 2.10 程序示例-机器学习中英单词翻译小专家
    • 2.11 程序示例      画花朵  &  画佩奇
    • 2.12 程序示例   华夏时钟
    • 2.13 示例:  显示图片,响声
    • 2.14 播放声音视频文件mp3、wmv、wav、m4a等)
    • 2.15 Python WEB开发技术实战
  • 3 模块2 NumPy数值计算
    • 3.1 ndarray创建与索引
    • 3.2 ndarray的基础操作
    • 3.3 ufunc
    • 3.4 小结
    • 3.5 习题与实训
  • 4 模块3   pandas基础
    • 4.1 pandas常用类
    • 4.2 DataFrame基础操作
    • 4.3 其他数据类型操作
    • 4.4 小结
    • 4.5 习题与实训
    • 4.6 练习题
  • 5 模块4 pandas进阶
    • 5.1 数据读取与写出
    • 5.2 DataFrame进阶
    • 5.3 数据准备
    • 5.4 小结
    • 5.5 习题与实训
    • 5.6 练习习题及解答(参考)
  • 6 模块5 Matplotlib基础绘图
    • 6.1 Matplotlib绘图基础
    • 6.2 分析特征关系常用图形
    • 6.3 分析特征内部数据状态常用图形
    • 6.4 小结
    • 6.5 习题与实训
  • 7 模块6 机器学习库 scikit-learn
    • 7.1 数据准备
    • 7.2 降维
    • 7.3 分类
    • 7.4 回归
    • 7.5 聚类
    • 7.6 模型选择
    • 7.7 小结
    • 7.8 习题与实训
  • 8 模块7 餐饮企业综合分析
    • 8.1 (案例)餐饮企业分析需求
    • 8.2 数据准备
    • 8.3 使用K-means算法进行客户价值分析
    • 8.4 使用决策树算法实现餐饮客户流失预测
    • 8.5 小结
    • 8.6 习题与实训
  • 9 模块8  通信运营商客户流失分析与预测
    • 9.1 通信运营商客户流失分析需求
    • 9.2 数据准备
    • 9.3 特征工程
    • 9.4 使用多层感知器算法实现通信运营商 客户流失预测
    • 9.5 小结
    • 9.6 习题与实训
  • 10 学习参考资源
    • 10.1 机器学习的通俗讲解
    • 10.2 十大机器学习算法及其应用
    • 10.3 常用机器学习算法优缺点及其应用领域
    • 10.4 轻松学会 Python turtle 绘图
    • 10.5 Python 习题库
      • 10.5.1 习题1
    • 10.6 上机操作实训库
    • 10.7 面试准备题
    • 10.8 Python 程序扩展名 及发布程序时的选择
    • 10.9 计算机Python考试大纲
    • 10.10 Python  基础知识点梳理
    • 10.11 Python常用模块大全
    • 10.12 机器学习基本术语
    • 10.13 几个机器学习的成功案例
    • 10.14 60个机器学习算法应用场景实例
  • 11 章节测验(必测)
    • 11.1 测验一
    • 11.2 测验二
    • 11.3 测验三
    • 11.4 测验四
    • 11.5 测验五
    • 11.6 测验六
    • 11.7 测验七
    • 11.8 测验八
    • 11.9 测验九
    • 11.10 测验十
    • 11.11 编程专项测验
    • 11.12 填空题专项测验
    • 11.13 判断题专项测试
    • 11.14 简答题专项测试
    • 11.15 《机器学习技术》总复习
    • 11.16 书本--习题参考解答
  • 12 综合实训项目及展示
    • 12.1 项目(一)作品展示(1)
    • 12.2 项目(一)作品展示(2)
    • 12.3 团队项目实训(必作!)
回归


(四) 回归     预测与对象关联的连续值属性。

应用:药物反应,股票价格。 算法: SVR,岭回归,套索,......

<知识回顾>

机器学习基础

学习问题     通过分析多个数据样本,尝试预测未知数据的属性及特征。

机器学习问题类型

监督学习(supervised learing)

监督学习的经验数据包含有我们想要预测的属性,输入向量与目标值对应,即从已知正确答案的一系列数据中学习经验。

监督学习的分类:

分类(classifcation):样本数据分为多个类。从已标记的数据集里学习如何标记未分类的数据的类别。如手写数字的识别过程。(离散形式监督学习(discrete))

回归(regression):所需输出有一个或多个连续变量组成,即进行回归分析,预测与对象相关联的连续值属性,如分析鱼类年龄和体重的函数。

无监督学习(unsupervised learning)

训练数据由一组输入向量组成,但没有对应的目标值。机器在训练数据中发现规律。

无监督学习的分类:

聚类(clustering):发现数据中类似的示例,将相似对象自动分组

密度估计(denisty estimation):确定输入空间内的数据分布信息

降维(dimensionality reduction):将高维数据降低维度以便数据的可视化,即将原来的数据数遍归类,筛选不必要的信息,减少要考虑的随机变量的数量。

半监督学习(补充)(semi-supervised learning)

介于监督学习与非监督学习之间的学习,增强学习的一种,问题可以通过决策来获得反馈,但反馈于某一决策没有直接关系。

'''

学习和预测

sklearn中,对数据的学习主要是通过.fit(X,y)和predict(T)两个函数实现的

使用手写数字识别作为学习预测的例子:

sklearn中,对分类器的估计是一个python类,通过fit和predict方法实现

估计器的一个示例是sklearn.svm.SVC实现向量分类的类。估算器的构造函数将模型的参数作为参数。

将估算器视为黑盒子,进行黑盒测试:

'''

from sklearn import datasets

from sklearn import svm

iris = datasets.load_iris()

digits = datasets.load_digits()

#clf = svm.SVC(gamma=0.001, C=100.)

#clf.fit(digits.data[:-1],digits.target[:-1])

'''

clf为评估器,它是一个分类器,他必须从模型中学习,通过fit方法完成

其中gamma参数为手动设置.

注意:对于训练集,我们将使用来自数据集的所有图像,除了最后一张图像,我们将保留用于预测。

我们使用[:-1]Python语法选择训练集,该语法生成一个新数组,其中包含除以下项之外的所有项.digits和.data

SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0,

  decision_function_shape='ovr', degree=3, gamma=0.001, kernel='rbf',

  max_iter=-1, probability=False, random_state=None, shrinking=True,

  tol=0.001, verbose=False)

通过训练集得到的数据预测最后一张图片,通过predict方法实现预测。

数据要以集合的形式传入

'''

#clf.predict(digits.data[-1:])

#得到输出

#array([8])

#通过matpoltlib库的imshow方法得到最后一个测试数据的图片

import matplotlib.pyplot as plt

plt.imshow(digits.images[-1], cmap=plt.cm.gray_r)  # 变灰色

plt.show()

#最后一个数据的形式

预测还是有一定准确率的

回归(可以理解为拟合)

2.1 普通线性回归

构造回归数据集:

import matplotlib.pyplot as plt

from sklearn.datasets.samples_generator import make_regression

# X为样本特征,y为样本输出, coef为回归系数,共1000个样本,每个样本1个特征

x, y, coef = make_regression(n_samples=100, n_features=1, noise=10, coef=True)

print(coef)

# 画图

plt.scatter(x, y)

plt.plot(x, x * coef, color='blue', linewidth=3)

plt.show()


然而,对于普通最小二乘问题,其系数估计依赖模型各项相互独立。当各项是相关的,设计矩阵(Design Matrix) x 的各列近似线性相关, 那么,设计矩阵会趋向于奇异矩阵,这会导致最小二乘估计对于随机误差非常敏感,会产生很大的方差。


2.2 回归评估指标

MAE反映预测值误差的实际情况。

MSE衡量的是样本整体与模型预测值偏离程度。

解释方差指标衡量的是所有预测值和样本之间的差的分散程度与样本本身的分散程度的相近程度。本身是分散程度的对比。最后用1-这个值,最终值越大表示预测和样本值的分散分布程度越相近。


R²分数:

指标解读:因变量的方差能被自变量解释的程度

指标越接近1,则代表自变量对于因变量的解释度越高

2.3 过拟合的问题

w过大,模型不稳定

2.4 岭回归

加了一个正则项,对w进行惩罚,α是超参数表示对w惩罚的力度。当w太小,有可能会使损失无法下降

2.4.1 岭系数对回归系数的影响

import numpy as np

import matplotlib.pyplot as plt

from sklearn import linear_model


# X 是10x10的希尔伯特矩阵

X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])

y = np.ones(10)

print(X)

# 计算不同岭系数时的回归系数

n_alphas = 200

alphas = np.logspace(-10, -2, n_alphas)


coefs = []

for a in alphas:

    ridge = linear_model.Ridge(alpha=a, fit_intercept=False)

    ridge.fit(X, y)

    coefs.append(ridge.coef_)


#绘图

ax = plt.gca()

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['axes.unicode_minus'] = False

ax.plot(alphas, coefs)

ax.set_xscale('log')

ax.set_xlim(ax.get_xlim()[::-1])

plt.xlabel('岭系数alpha')

plt.ylabel('回归系数coef_')

plt.title('岭系数对回归系数的影响',)

plt.axis('tight')

plt.show()

2.5 LASSO回归

2.6 弹性网络

L1、L2正则化混用

2.7 逻辑斯蒂回归(原始感知机)

输入数据压缩+L1、L2正则化

本质:加了非线性函数(激活函数)

2.8 贝叶斯岭回归

从贝叶斯的角度看:P(W|x,y)=P(Y|x,w)*P(w)/P(x|y,w)

2.8.1 L1、L2正则化的由来与结论

(1)对参数引入 拉普拉斯先验 等价于 L1正则化。

(2)对参数引入 高斯先验 等价于 L2正则化。

(3)正则化参数等价于对参数引入先验分布,使得模型复杂度变小(缩小解空间),对于噪声以及 outliers 的鲁棒性增强(泛化能力)。整个最优化问题从贝叶斯观点来看是一种贝叶斯最大后验估计,其中正则化项对应后验估计中的先验信息,损失函数对应后验估计中的似然函数,两者的乘积即对应贝叶斯最大后验估计的形式。


2.8.2 代码

# LinearRegression.py

# 普通线性回归

from sklearn import linear_model

import matplotlib.pyplot as plt

import numpy as np

from sklearn import datasets

from sklearn.model_selection import train_test_split

from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score, explained_variance_score

np.random.RandomState(0)

x, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=10)

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)

# reg = linear_model.LinearRegression()# 返回w和b

# reg = linear_model.Ridge(0.5)

# reg = linear_model.Lasso(0.1)

# reg = linear_model.ElasticNet(0.5,0.5)# 弹性网络

# reg = linear_model.LogisticRegression()

reg = linear_model.BayesianRidge()

reg.fit(x_train, y_train)

# print(reg.coef_, reg.intercept_)

y_pred = reg.predict(x_test)

# 平均绝对误差

print(mean_absolute_error(y_test, y_pred))

# 均方误差

print(mean_squared_error(y_test, y_pred))

# R2 评分

print(r2_score(y_test, y_pred))

# explained_variance 可解释方差

print(explained_variance_score(y_test, y_pred))

_x = np.array([-2.5, 2.5])

_y = reg.predict(_x[:,None])

plt.scatter(x_test, y_test)

plt.plot(_x, _y, linewidth=3, color="orange")

plt.show()

2.9 核岭回归

不激活、多项式、rbf(高斯核、径向基)、Sigmoid

import numpy as np

from sklearn.kernel_ridge import KernelRidge

import matplotlib.pyplot as plt

from sklearn.model_selection import GridSearchCV

rng = np.random.RandomState(0)

X = 5 * rng.rand(100, 1)

y = np.sin(X).ravel()

# Add noise to targets

y[::5] += 3 * (0.5 - rng.rand(X.shape[0] // 5))

# kr = KernelRidge(kernel='rbf', gamma=0.4)

kr = GridSearchCV(KernelRidge(),

                  param_grid={"kernel": ["rbf", "laplacian", "polynomial", "sigmoid"],

                              "alpha": [1e0, 0.1, 1e-2, 1e-3],

                              "gamma": np.logspace(-2, 2, 5)})# 表格搜索

kr.fit(X, y)

print(kr.best_score_, kr.best_params_)


X_plot = np.linspace(0, 5, 100)

y_kr = kr.predict(X_plot[:, None])


plt.scatter(X, y)

plt.plot(X_plot, y_kr, color="red")

plt.show()

2.10 SVR(支持向量回归)

import numpy as np

import matplotlib.pyplot as plt

from sklearn.model_selection import GridSearchCV

from sklearn.svm import SVR

rng = np.random.RandomState(0)

X = 5 * rng.rand(100, 1)

y = np.sin(X).ravel()

y[::5] += 3 * (0.5 - rng.rand(X.shape[0] // 5))

svr = SVR(kernel='rbf', C=10, gamma=0.1)

svr.fit(X, y)

X_plot = np.linspace(0, 5, 100)

y_svr = svr.predict(X_plot[:, None])

plt.scatter(X, y)

plt.plot(X_plot, y_svr, color="red")

plt.show()


一、常用的评价指标

1、SSE(误差平方和)

2、R-square(决定系数)

3、Adjusted R-Square (校正决定系数)

二、python中的sklearn. metrics

(1) explained_variance_score(解释方差分)

(2) Mean absolute error(平均绝对误差)

(3)Mean squared error(均方误差)

(4) Mean squared logarithmic error

(5)Median absolute error(中位数绝对误差)

(6) R² score(决定系数、R方)

三、交叉验证在python上的实现