2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 机器学习(多元线性回归模型逻辑回归)

机器学习(多元线性回归模型逻辑回归)

时间:2024-03-27 11:34:22

相关推荐

机器学习(多元线性回归模型逻辑回归)

多元线性回归

定义:回归分析中,含有两个或者两个以上自变量,称为多元回归,若自变量系数为1,则此回归为多元线性回归。

(特殊的:自变量个数为1个,为一元线性回归)多元线性回归模型如下所示:

如上图所示,一元线性回归图形为一条直线。而二元线性回归,拟合的为一个平面。多元线性回归拟合出的图像为以超平面;

逻辑回归(分类问题的处理)

求解步骤:1)确定回归函数 (通常用Sigmoid函数); 2)确定代价函数(含有参数);3)求解参数(梯度下降/最大似然)

1)Sigmoid函数可以作为二分类问题的回归函数,而且此函数为连续的且通过0为界限分为大于0.5与小于0.5的两部分;

Sigmoid函数形式为:

Sigmoid函数图像为:(连续可导满足我们的需求,便于后续参数的求解)

第一步:构造预测函数为:

在这里就是将sigmoid函数中的自变量部分替换为多元线性回归模型

第二步:构造损失函数:

这里的y为样本的真实值,根据预测值与真实值之间的关系构造损失函数,求解预测函数参数使得其损失值最小。

结合函数图像当真实值y=1时,预测值越接近1则代价越小(反之越大),同理可得真实值y=0的情况;

由此我们根据y的取值不同构造出损失函数:

第三步:求解函数参数:在这里采用梯度下降法求解参数 ;

通过对参数求偏导数可得变化率为,并通过此关系式求解参数;

逻辑回归实战(Fight)

1)导入所需要的库文件以及获取数据集合(数据集合在最底部^_^)

import numpy as npimport matplotlib.pyplot as pltimport math#导入必备的包positive = [] #正值点negative = [] #负值点#导入数据dataSet = [] #数据点def functionexp(k1,k2,x,y,b):return math.exp(k1 * x + k2 *y + b) #e^(θx+b)#数据集合获取with open('testSet.txt') as f:for line in f:line = line.strip('\n').split('\t')if line[2]=='1':positive.append([float(line[0]),float(line[1])])else:negative.append([float(line[0]),float(line[1])])dataSet.append([float(line[0]),float(line[1]),int(line[2])])

2)根据样本集合求解参数(使用梯度下降法)

#求解参数k1 = 0k2 = 0b = 0step =2500 #学习步长learnrate = 1 #学习率for i in range(step):temp0 = 0temp1 = 0 #初始化参数temp2 = 0for j in dataSet:e = functionexp(k1, k2, j[0], j[1], b)temp0 = temp0 + (e /( 1 + e ) - j[2] ) / len(dataSet)temp1 = temp1 + (e / (1 + e ) - j[2] ) * j[0]/ len(dataSet)temp2 = temp2 + (e / (1 + e ) - j[2] ) * j[1] / len(dataSet)k1 = k1 - temp1 * learnratek2 = k2 - temp2 * learnrateb = b - temp0 * learnrate

3)绘制样本散点图以及决策边界(拟合曲线)

#绘制样本点以及分类边界dataX = []#样本点X集合dataY = []#样本点Y集合for i in positive:dataX.append(i[0])dataY.append(i[1])plt.scatter(dataX,dataY,c='red')#绘制正样本散点图dataX.clear()dataY.clear()for i in negative:dataX.append(i[0])dataY.append(i[1])plt.scatter(dataX,dataY,c='blue')#绘制负样本散点图XX=[-3,3]plt.plot(XX,(-k1/k2)*np.array(XX)-b/k2,'yellow')plt.show()

运行结果如下图所示(这里没有过多使用numpy库中的矩阵运算,仅限理解逻辑回归)

up通过sklearn进行逻辑回归:

import numpy as npimport matplotlib.pyplot as pltimport mathfrom sklearn import linear_modelfrom sklearn import preprocessingfrom sklearn.metrics import classification_reportpositive = [] #正值点negative = [] #负值点#导入数据dataSet = [] #数据点X=[]Y=[]#数据集合获取with open('testSet.txt') as f:for line in f:line = line.strip('\n').split('\t')if line[2]=='1':positive.append([float(line[0]),float(line[1])])else:negative.append([float(line[0]),float(line[1])])dataSet.append([float(line[0]),float(line[1]),int(line[2])])X.append([float(line[0]),float(line[1])])Y.append([int(line[2])])#求解参数logistic = linear_model.LogisticRegression()logistic.fit(np.array(X),np.array(Y))#绘制样本点以及分类边界dataX = []#样本点X集合dataY = []#样本点Y集合for i in positive:dataX.append(i[0])dataY.append(i[1])plt.scatter(dataX,dataY,c='red')#绘制正样本散点图dataX.clear()dataY.clear()for i in negative:dataX.append(i[0])dataY.append(i[1])plt.scatter(dataX,dataY,c='blue')#绘制负样本散点图XX=[-3,3]plt.plot(XX,(-np.array(XX)*logistic.coef_[0][0]-logistic.intercept_)/logistic.coef_[0][1],'black')plt.show()

回归效果(感觉比自己写的回归效果好=_=)

总结(关于逻辑回归的思考以及正确率、召回率、F1指标)

在分类问题中可以灵活运用二分类的解法来求解多分类问题(是否问题,即是这一类的和不是这一类的),将多分类问题

转化为二分类问题。而且采用的模型并不一定必须是多元线性模型(非线性模型),根据情况选取合适的模型。

正确率:检索出来的条目有多少是正确的(相对于结果而言)。即:正确的个数在预测为正确总个数的比例;

召回率:正确的有多少被检测出来了,即:检测(预测)出的正确个数/总正确个数;

F1指标:2*正确率*召回率/(正确率+召回率);(综合反映上述两个指标)

以上的指标都是介于0-1之间的,且数值越接近于1说明效果越好;

-0.01761214.0530640-1.3956344.6625411-0.7521576.5386200-1.3223717.15285300.42336311.05467700.4067047.06733510.66739412.7414520-2.4601506.86680510.5694119.5487550-0.02663210.42774300.8504336.92033411.34718313.17550001.1768133.1670201-1.7818719.0979530-0.5666065.74900310.9316351.5895051-0.0242056.1518231-0.0364532.6909881-0.1969490.44416511.0144595.75439911.9852983.2306191-1.693453-0.5575401-0.57652511.7789220-0.346811-1.6787301-2.1244842.67247111.2179169.5970150-0.7339289.0986870-3.642001-1.61808710.3159853.52395311.4166149.6192320-0.3863233.98928610.5569218.29498411.22486311.5873600-1.347803-2.40605111.1966044.95185110.2752219.54364700.4705759.3324880-1.8895679.5426620-1.52789312.1505790-1.18524711.3093180-0.4456783.29730311.0422226.1051551-0.61878710.32098601.1520830.54846710.8285342.6760451-1.23772810.5490330-0.683565-2.16612510.2294565.9219381-0.95988511.55533600.49291110.99332400.1849928.7214880-0.35571510.3259760-0.3978228.05839700.82483913.73034301.5072785.02786610.0996716.8358391-0.34400810.71748501.7859287.7186451-0.91880111.5602170-0.3640094.7473001-0.8417224.11908310.4904261.9605391-0.0071949.07579200.35610712.44786300.34257812.2811620-0.810823-1.46601812.5307776.47680111.29668311.60755900.47548712.0400350-0.78327711.00972500.07479811.0236500-1.3374720.4683391-0.10278113.7636510-0.1473242.87484610.5183899.88703501.0153997.5718820-1.658086-0.02725511.3199442.17122812.0562165.0199811-0.8516334.3756911-1.5100476.0619920-1.076637-3.18188811.82109610.28399003.0101508.4017661-1.0994581.6882741-0.834872-1.7338691-0.8466373.84907511.40010212.62878101.7528425.46816610.0785570.05973610.089392-0.71530011.82566212.69380800.1974459.74463800.1261170.9223111-0.6797971.22053010.6779832.55666610.76134910.6938620-2.1687910.14363211.3886109.34199700.31702914.7390250

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。