机器学习(ML)(五)——回归和聚类算法

回归和聚类算法

线性回归

线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值和因变量(目标值)之间关系进行建模的一种分析方式。

通用公式:h(w)=w1x1+w2x2+w3x3……+b=wTx+b

广义线性模型:
线性回归当中线性模型有两种,一种是线性关系,另一种是非线性关系
线性关系:
机器学习(ML)(五)——回归和聚类算法_第1张图片
机器学习(ML)(五)——回归和聚类算法_第2张图片

注释:单特征与目标值的关系呈直线关系,或者两个特征与目标值呈现平面的关系

非线性关系:
机器学习(ML)(五)——回归和聚类算法_第3张图片
线性模型:自变量是一次的;参数是一次的

线性回归中的损失与函数优化原理

目标:

求模型参数,模型参数使得预测准确

真实关系:真实房子价格=0.0x中心区域的距离+0.04×城市一氧化氮浓度+(-0.12×自住房平均房价)
随意假定:预测房子价格=0.25×中心区域的距离+0.14×城市一氧化氮浓度+0.42×自住房平均房价

损失函数:

真实值与预测值之间的误差
机器学习(ML)(五)——回归和聚类算法_第4张图片
如何找到模型中的w,使得损失最小?

优化算法:

找到最小损失对应的w值

正规方程——直接求解

机器学习(ML)(五)——回归和聚类算法_第5张图片

理解:X为特征值矩阵,y为目标值矩阵。直接求到最好的结果
缺点:当特征过多过复杂时,求解速度太慢并且得不到结果

梯度下降——不断试错,改进

机器学习(ML)(五)——回归和聚类算法_第6张图片

使用方法:

sklearn.linear_model.LinearRegression(fit_intercept=True)
#通过正规方程优化
#fit_intercept:是否计算偏置
#LinearRegression.coef_:回归系数
#LinearRegression..intercept_:偏置
sklearn.linear_model.SGDRegressor(loss="squared_loss",fit_intercept=True,learning_rate ='invscaling',eta0=0.01)
#SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型。
#loss:损失类型;loss=”squared_loss'”:普通最小二乘法
#fit_intercept:是否计算偏置
#learning_rate string,optional
#学习率填充
'constant':eta etao
'optimal':eta =1.0/(alpha *(t to))[default]
'invscaling':eta etao/pow(t,power_t)
  power_.t=0.25:存在父类当中
#对于一个常数值的学习率来说,可以使用learning_rate='constant',并使用eta0来指定学习率。
#SGDRegressor.coe_:回归系数
#SGDRegressor.intercept_:偏置

波士顿房价预测

流程分析:

流程:
1)获取数据集
2)划分数据集
3)特征工程:
无量纲化一标准化
4)预估器流程
fit()–>模型
coef_
intercept_
5)模型评估

from sklearn.datasets import load boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression,SGDRegressor
def linear1():
#正规方程的优化方法对波士顿房价进行预测
#1)获取数据
  boston=load boston()
#2)划分数据集
  x_train,x_test,y_train,y_test=   train_test_split(boston.data,boston.target,random_state=22)
#3)标准化
  transfer=Standardscaler()
  x train=transfer.fit_transform(x_train)
  x_test=transfer.transform(x test)
#4)预估器
  estimator=LinearRegression()
  estimator.fit(x_train,y_train)
#5)得出模型
  print("正规方程-权重系数为:\n",estimator.coef_)
  print("正规方程-偏置为:\n",estimator.intercept_)
#6)模型评估
 return None
def linear2():
#梯度下降的优化方法对波士顿房价进行预测
#1)获取数据
  boston=load_boston()
  print("特征数量:\n",boston.data.shape)
#2)划分数据集
  x_train,x_test,y_train,y_test=   train_test_split(boston.data,boston.target,random_state=22)
#3)标准化
  transfer=StandardScaler()
  x train=transfer.fit_transform(x_train)
  x_test=transfer.transform(x_test)
#4)预估器
  estimator=SGDRegressor()
  estimator.fit(x_train,y_train)
#5)得出模型
  print("梯度下降-权重系数为:\n",estimator,coef_)
  print("梯度下降-偏置为:\n",estimator,intercept)
#6)模型评估
  return None

回归的性能评估

机器学习(ML)(五)——回归和聚类算法_第7张图片
使用方式:

sklearn.metrics.mean_squared_error(y_true,y_pred)
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression,SGDRegressor
from sklearn.metrics import mean_squared_error
def linear1():
#正规方程的优化方法对波士顿房价进行预测
#1)获取数据
  boston=load boston()
#2)划分数据集
  x_train,x_test,y_train,y_test=   train_test_split(boston.data,boston.target,random_state=22)
#3)标准化
  transfer=Standardscaler()
  x train=transfer.fit_transform(x_train)
  x_test=transfer.transform(x test)
#4)预估器
  estimator=LinearRegression()
  estimator.fit(x_train,y_train)
#5)得出模型
  print("正规方程-权重系数为:\n",estimator.coef_)
  print("正规方程-偏置为:\n",estimator.intercept_)
#6)模型评估
  y_predict=estimator.predict(x_test)
  print("正规方程预测房价为:\n",y_predict)
  error=mean_squared_error(y_test,y_predict)
  print("正规方程-均方误差为:\n",error)
def linear2():
#梯度下降的优化方法对波士顿房价进行预测
#1)获取数据
  boston=load_boston()
  print("特征数量:\n",boston.data.shape)
#2)划分数据集
  x_train,x_test,y_train,y_test=   train_test_split(boston.data,boston.target,random_state=22)
#3)标准化
  transfer=StandardScaler()
  x train=transfer.fit_transform(x_train)
  x_test=transfer.transform(x_test)
#4)预估器
  estimator=SGDRegressor()
  estimator.fit(x_train,y_train)
#5)得出模型
  print("梯度下降-权重系数为:\n",estimator,coef_)
  print("梯度下降-偏置为:\n",estimator,intercept)
#6)模型评估
  y_predict=estimator.predict(x_test)
  print("正规方程预测房价为:\n",y_predict)
  error=mean_squared_error(y_test,y_predict)
  print("正规方程-均方误差为:\n",error)

机器学习(ML)(五)——回归和聚类算法_第8张图片
机器学习(ML)(五)——回归和聚类算法_第9张图片

拓展:
1、GD 梯度下降(GradientDescent),原始的梯度下降法需要计算所有样本的值才能够得出梯度,计算量大,所以后面才有会一系列的改进。
2、SGD随机梯度下降(Stochastic gradient descent)是一个优化方法。它在一次迭代时 只考虑一个训练样本。
SGD的优点是:(1)高效(2)容易实现
SGD的缺点是: SGD需要许多超参数:比如正则项参数、迭代数。 SGD对于特征标准化是敏感的。
3、SAG 随机平均梯度法(Stochasitc Average Gradient),由于收敛的速度太慢,有人提出SAG等基于梯度下降的算法

欠拟合与过拟合

欠拟合

一个假设在训练数据上不能获得更好的拟合,并且在测试数据集上也不
能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)
欠拟合原因以及解决办法
原因:学习到数据的特征过少
解决办法:增加数据的特征数量

过拟合

一个假设在训练数据上能够获得比其他假设更好的拟合,但是在测试数
据集上却不能很好地拟合数据此时认为这个假设出现了过拟合的现象。(模型过
于复杂)
过拟合原因以及解决办法
原因:原始特征过多,存在一些嘈杂特征,模型过于复杂是因为模型尝试去兼顾各个测试数据点
解决办法:"正则化“
机器学习(ML)(五)——回归和聚类算法_第10张图片

正则化:

L2正则化——岭回归
作用:可以使得其中一些的都很小,都接近于0,网某个特征的影响。
优点:基小的参教说明馍型越简单,越简单的模型侧越不容易产生过拟合现象。

机器学习(ML)(五)——回归和聚类算法_第11张图片
L1正则化——lasso回归
作用:可以使得其中一些W的值直接为0,删除这个特征的影响。

线性回归改进——岭回归

sklearn.linear_model.Ridge(alpha=1.0,fit_intercept=True,solver="auto",normalize=False)
#具有L2正则化的线性回归
#alpha:正则化力度,也叫入,λ取值:0~1,110
#solver:会根据数据自动选择优化方法
#sag:如果数据集、特征都比较大,选择该随机梯度下降优化
#normalize:数据是否进行标准化
#normalize:=False:可以在fit之前调用preprocessing.StandardScaler标准化数据
#Ridge.coef_:回归权重
#Ridge.intercept:回归偏置
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge
from sklearn.metrics import mean_squared_error
def linear3():
#正规方程的优化方法对波士顿房价进行预测
#1)获取数据
  boston=load boston()
#2)划分数据集
  x_train,x_test,y_train,y_test=   train_test_split(boston.data,boston.target,random_state=22)
#3)标准化
  transfer=Standardscaler()
  x train=transfer.fit_transform(x_train)
  x_test=transfer.transform(x test)
#4)预估器
  estimator=Ridge()
  estimator.fit(x_train,y_train)
#5)得出模型
  print("岭回归-权重系数为:\n",estimator.coef_)
  print("岭回归-偏置为:\n",estimator.intercept_)
#6)模型评估
  y_predict=estimator.predict(x_test)
  print("岭回归预测房价为:\n",y_predict)
  error=mean_squared_error(y_test,y_predict)
  print("岭回归-均方误差为:\n",error)

分类算法——逻辑回归与二分类

应用场景:

广告点击率、是否为垃圾邮件、是否患病、金融诈骗虚假账号

逻辑回归原理:

机器学习(ML)(五)——回归和聚类算法_第12张图片
线性回归的输出就是逻辑回归的输入
激活函数:
机器学习(ML)(五)——回归和聚类算法_第13张图片
将线性回归的结果输入到sigmoid函数中,输出的结果是位于[0,1]区间中的一个概率值。
机器学习(ML)(五)——回归和聚类算法_第14张图片

损失函数:

线性回归中:(预测值-真实值)平方和/总数
逻辑回归中:真实值和预测值:是否属于某个类别

对数似然函数

机器学习(ML)(五)——回归和聚类算法_第15张图片
完整损失函数:
在这里插入图片描述
机器学习(ML)(五)——回归和聚类算法_第16张图片

损失优化:

梯度下降法优化
使用方式:

sklearn.linear_model.LogisticRegression(solver='liblinear',penalty='12',C=1.0)
#solver:优化求解方式(默认开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数)
#sag:根据数据集自动选择,随机平均梯度下降
#penalty:正则化的种类
#C:正则化力度

案例:癌症分类预测-良/恶性乳腺癌肿瘤预测

数据集下载:添加链接描述

机器学习(ML)(五)——回归和聚类算法_第17张图片

import pandas as pd
import numpy as np
path="数据集地址"
column name ['Sample code number','clump Thickness','Uniformity of Cel'
'Marginal Adhesion','single Epithelial Cell size','Ba'
'Normal Nucleoli','Mitoses','class'
data=pd.read_csv(path,names=column_name)
#2、缺失值处理
#1)替换-》np.nan
data data.replace(to_replace="?",value=np.nan)
#2)删除缺失样本
data.dropna(inplace=True)
#3划分数据集
from sklearn.model_selection import train_test_split
筛进特征值和目标值
x=data.11oc[:,1:-1]
y data["class"]
#4、标准化
from sklearn.preprocessing import Standardscaler
transfer=Standardscaler()
x_train=transfer.fit transform(x train)
x_test=transfer.transform(x test)
from sklearn.linear_model import LogisticRegression
estimator=LogisticRegression()
estimator.fit(x train,y_train)
#逻短回归的模型参数:回归系数和偏宣
estimator.coef_
estimator.intercept_
#6、模型评估
#方法1:直接比对真实值和预测值
y_predict =estimator.predict(x_test)
print("y_predict:\n",y_predict)
print("直接比对真实值和预测值:\n",y_test=y_predict)
#方法2:计算准确率
score estimator.score(x test,y test)
print("准确率为:\n",score)

分类的评估方法:

混淆矩阵
在分类任务下,预测结果(Predicted Condition)与正确标记True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)。
机器学习(ML)(五)——回归和聚类算法_第18张图片
精确率:预测结果为正例样本中真实为正例的比例(了解)
机器学习(ML)(五)——回归和聚类算法_第19张图片
召回率:真实为正例的样本中预测结果为正例的比例(查得全,对正样本的区分能力)
机器学习(ML)(五)——回归和聚类算法_第20张图片
F1-score,反映了模型的稳健型
机器学习(ML)(五)——回归和聚类算法_第21张图片

使用方法:

sklearn.metrics.classification_report(y_true,y_pred,labels=[],target_names=None)
#y_true:真实目标值
#y_pred:估计器预测目标值
#labels:指定类别对应的数字
#target_names:目标类别名称
#return:每个类别精确率与召回率
#查看精确率、召回率、F1-score
from sklearn.metrics import classification report
report=classification_report(y_test,y_predict,labels=[2,4],target_name=['良性''恶性']

机器学习(ML)(五)——回归和聚类算法_第22张图片
如果是下面这种情况:
机器学习(ML)(五)——回归和聚类算法_第23张图片

ROC曲线和AUC指标——衡量样本不均衡情况

TPR与FPR

TPR=TP/TP+FN)——召回率
所有真实类别为1的样本中,预测类别为1的比例
FPR=FP/(FP+TN)
所有真实类别为0的样本中,预测类别为1的比例
机器学习(ML)(五)——回归和聚类算法_第24张图片
ROC曲线的横轴就是FPRate,纵轴就是TPRate,当二者相等时,表示的意义则是:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的,此时AUC为0.5。

AUC的概率意义是随机取一对正负样本,正样本得分大于负样本的概率。 AUC的最小值为0.5,最大值为1,取值越高越好
AUC=1,完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预 测。绝大多数预测的场合,不存在完美分类器。
0.5

from sklearn.metrics import roc_auc_score
#sklearn.metrics.roc_auc_score(y_true,y_score)
#计算ROC曲线面积,即AUC值
#y_true:每个样本的真实类别,必须为0(反例),1(正例标记)
#y_score:预测得分,可以天正类的估计概率、置信值或者分类器方法的返回值
#y true:每个样本的真实类别,必须为0(反例),1(正例)标记
#将y test转换成01
y_true=np.where(y_test>3,1,0)
from sklearn.metrics import roc_auc_score
roc_auc_score(y_true,y_predict)
总结:

AUC只能用来评价二分类
AUC非常适合评价样本不平衡中的分类器性能

模型的保存和加载

from sklearn.externals import joblib
保存:joblib.dump(rt,'test.pkl')
加载:estimator=joblib.load('test.pkl')
from sklearn.externals import joblib
#保存模型
joblib.dump(estimator,"my_ridge.pkl")
#加载模型
estimator=joblib.load("my_ridge.pkl")

无监督学习-Kmeans算法

无监督学习——没有目标值
无监督学习包含算法:聚类、K-means(K均值聚类)、降维、PCA

K-means聚类步骤

1、随机设置K个特征空间内的点作为初始的聚类中心
2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点
作为标记类别
·3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程。
使用方法:

sklearn.cluster.KMeans(n_clusters=8,init='k-means++)
#k-means聚类
#n_clusters:开始的聚类中心数量
#init:初始化方法,默认为'k-means++'
#labels_:默认标记的类型,可以和真实值比较(不是值比较)

案例:k-means对Instacart Market用户聚类

#预估器流程
from sklearn.cluster import KMeans
estimator=KMeans(n clusters=3)
estimator.fit(data_new)
estimator.predict(data_new)

评估聚类性能指标
机器学习(ML)(五)——回归和聚类算法_第25张图片
机器学习(ML)(五)——回归和聚类算法_第26张图片
高内聚,低耦合
在这里插入图片描述

sklearn.metrics.silhouette_score(X,labels)
#计算所有样本的平均轮廓系数
#X:特征值
#labels:被聚类标记的目标值
#模型评估-轮廓系数
from sklearn.metrics import silhouette_score
silhouette_score(data_new,y_predict)

机器学习(ML)(五)——回归和聚类算法_第27张图片
应用场景:
没有目标值

聚类一般在分类之前

机器学习(ML)(五)——回归和聚类算法_第28张图片
机器学习(ML)(五)——回归和聚类算法_第29张图片
机器学习(ML)(五)——回归和聚类算法_第30张图片
机器学习(ML)(五)——回归和聚类算法_第31张图片
机器学习(ML)(五)——回归和聚类算法_第32张图片

你可能感兴趣的:(自然语言处理,机器学习,python,算法)