机器学习-线性学习

一、线性回归

  • 1 回归和分类的区别在于要预测的目标是连续值
  • 定义:给定由m个属性描述的样本x=(x1,x2…xn),其中xi是x在第i个属性上的取值,线性回归试图学得一个通过属性值的线性组合来进行预测函数:
    f ( x ) = w 1 x 1 + w 2 x 2 + . . . . . . + w m x m + b f(x)=w_{1}x_{1}+w_{2}x_{2}+......+w_{m}x_{m}+b f(x)=w1x1+w2x2+......+wmxm+b
    一般的向量的形式是
    f ( x ) = w t x + b f(x)=w^{t}x+b f(x)=wtx+b,其中 w = ( w 1 ; w 2 ; . . . . . . ; w m ) w=(w_{1};w_{2};......;w_{m}) w=(w1;w2;......;wm)
  • 给定训练数据 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . ( x i , y i ) , . . . . , ( x n , y n ) D={{(x_{1},y_{1}),(x_{2},y_{2}),....(x_{i},y_{i}),....,(x_{n},y_{n})}} D=(x1,y1),(x2,y2),....(xi,yi),....,(xn,yn)
  • 其中 x i = ( x i 1 ; x i 2 ; . . . . ; x i m ) , y i ∈ R x_{i}=(x_{i1};x_{i2};....;x_{im}),y_{i}\in{R} xi=(xi1;xi2;....;xim),yiR
  • 用最小二乘法对参数w和b进行估计,最小二乘法就是基于预测值和真实值的均方差最小化的方法来估计参数w和b:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二、广义线性回归

  • 只要学到w和b,模型就可以确定;对于任意的测试样例,只要输入它的属性值,就可以输出它的预测值。

  • 线性回归假定输入空间到输出空间的函数映射成线性关系,但现实应用中,很多问题都是非线性的。

  • 为拓展其应用场景,我们可以将线性回归的预测值做一个非线性的函数变化去逼近真实值,这样得到 的模型统称为广义线性回归(generalized linear regression)
    y = g ( w T x + b ) y=g(w^{T}x+b) y=g(wTx+b),其中g(.)称为联系函数(link function).理论上,联系函数可以是任意函数,比如当被指定为指数函数时,得到的回归模型称为对数线性回归:
    y = e w T x + b y=e^{w^{T}x+b} y=ewTx+b之所以叫对数线性回归,是因为它将真实值的对数作为线性回归逼近的目标,即:
    l n y = w T x + b lny=w^{T}x+b lny=wTx+b

    逻辑回归

    • 把线性回归所得的 z = w T x + b z=w^Tx+b z=wTx+b值转换为0/1就是逻辑回归,最简单的逻辑回归函数是单位阶跃函数:
      y = { 0 , z > 0   预 测 值 大 于 零 就 判 为 正 列 0.5 , z = 0 预 测 值 为 临 界 值 零 则 可 任 意 判 别 1 , z < 0 预 测 值 小 于 零 就 判 为 反 列 y= \begin{cases} 0, z>0 & \text { $预测值大于零就判为正列$} \\ 0.5,z=0 & \text{$预测值为临界值零则可任意判别$} \\1,z<0&\text{$ 预测值小于零就判为反列$}\end{cases} y=0,z>00.5,z=01,z<0 预测值大于零就判为正列预测值为临界值零则可任意判别预测值小于零就判为反列
      但是单位阶跃函数不连续,因此不能直接用作联系函数g(x),于是需要找到一个函数在零界点连续且单调可微,所以就可以得到常用的函数是:
      y = 1 1 + e − z y=\frac{1}{1+e^{-z}} y=1+ez1
      y = 1 1 + e − ( w T x + b ) y=\frac{1}{1+e^{-(w^{T}x+b)}} y=1+e(wTx+b)1
      在这里插入图片描述- 逻辑回归是分类学习方法, 它的优点是:
      • 1)可以直接对分类可能性进行预测,将y视为样本x作为正例的概率;
      • 2)无需事先假设数据分布,这样就避免了假设分布不准确所带来的问题;
      • 3)是任意阶可导的凸函数,可直接应用现有数值优化算法求取最优解

多分类学习


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多分类学习

案例

# -*- coding: utf-8 -*-
"""
=========================
@Time : 2021/12/23 16:00
@Author : yhz
@File : Liner.py
=========================
"""
from sklearn import linear_model
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
print(reg.coef_)
print(reg.intercept_)

# 加载数据
data = pd.read_csv("G:/python/AiMLDL/Regression/data/bank-data.csv")
print(data)
print(data.shape)
# 绘图,画出图像
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong']  # 指定默认字体
x = data['age']
y = data['income']
plt.scatter(x, y, c='black')
plt.xlabel('年龄', fontsize=12)
plt.ylabel('收入(亿元)', fontsize=12)
plt.show()

# 建模
X = data['age'].values.reshape(-1, 1)
y = data['income'].values.reshape(-1, 1)
from sklearn.linear_model import LinearRegression

slModel = LinearRegression()
# 训练
slModel.fit(X, y)
# 查看预测精度
score = slModel.score(X, y)
print(score)
# 计算w和b
print(slModel.coef_)
print(slModel.intercept_)

# 预测
print("预测:")
X1 = [[10], [20]]
X2 = np.array(X1)
y_predict = slModel.predict(X2)
print(y_predict)

y_pred = slModel.predict(X)
fig, ax = plt.subplots()
# ax.scatter(x, y, c='black', label="观测值")
ax.plot(x, y_pred, 'black', label="回归直线")
plt.legend(loc="lower right")
plt.xlabel('x', fontsize=16)
plt.ylabel('y', fontsize=16)
plt.show()

  • 逻辑回归
# -*- coding: utf-8 -*-
"""
=========================
@Time : 2021/12/23 16:31
@Author : yhz
@File : logistic.py
=========================
"""
# 癌症分类预测

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
from sklearn.metrics import roc_auc_score

# 显示所有列
# pd.set_option('display.max_columns', None)
# # 显示所有行
# pd.set_option('display.max_rows', None)
# # 设置value的显示长度为100,默认为50
# pd.set_option('max_colwidth', 100)
# 获取数据
names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
         'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
         'Normal Nucleoli', 'Mitoses', 'Class']
data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer"
                   "-wisconsin.data",
                   names=names)

print(data)

# 数据预处理
# 缺失值处理
data = data.replace(to_replace="?", value=np.nan)
data = data.dropna()
print(data)
x = data.iloc[:, 1:-1]
y = data['Class']
print(x)
print(y)
# 数据分割
x_trian, x_test, y_train, y_test = train_test_split(x, y, random_state=2, test_size=0.2)
# x_train = transfer.fit_transform(x_trian)
# x_test = transfer.fit_transform(x_test)


# 4机器学习(逻辑回归)
estimator = LogisticRegression()
estimator.fit(x_trian, y_train)
print(estimator)
# 评估模型
y_pre = estimator.predict(x_test)
print("预测值是:\n", y_pre)
score = estimator.score(x_test, y_test)
print("准确率是:\n", score)
# 5.2 其他评估
ret = classification_report(y_test, y_pre, labels=(2, 4), target_names=("良性", "恶性"))
print(ret)

# 不平衡二分类问题评估方法
y_test = np.where(y_test > 3, 1, 0)

ret1 = roc_auc_score(y_true=y_test, y_score=y_pre)
print(ret1)

资料

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值