by28777 by28777域名查询( 六 )


# -*- coding: utf-8 -*-# By:Eastmount CSDN 2021-07-03from sklearn.linear_model import LinearRegressionfrom sklearn.preprocessing import PolynomialFeaturesimport matplotlib.pyplot as pltimport numpy as np#X表示企业成本 Y表示企业利润X = [[400], [450], [486], [500], [510], [525], [540], [549], [558], [590], [610], [640], [680], [750], [900]]Y = [[80], [89], [92], [102], [121], [160], [180], [189], [199], [203], [247], [250], [259], [289], [356]]print('数据集X: ', X)print('数据集Y: ', Y)#第一步 线性回归分析clf = LinearRegression()clf.fit(X, Y)X2 = [[400], [750], [950]]Y2 = clf.predict(X2)print(Y2)res = clf.predict(np.array([1200]).reshape(-1, 1))[0]print('预测成本1200元的利润:$%.1f' % res)plt.plot(X, Y, 'ks') #绘制训练数据集散点图plt.plot(X2, Y2, 'g-') #绘制预测数据集直线#第二步 多项式回归分析xx = np.linspace(350,950,100)quadratic_featurizer = PolynomialFeatures(degree = 5)x_train_quadratic = quadratic_featurizer.fit_transform(X)X_test_quadratic = quadratic_featurizer.transform(X2)regressor_quadratic = LinearRegression()regressor_quadratic.fit(x_train_quadratic, Y)#把训练好X值的多项式特征实例应用到一系列点上,形成矩阵xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))plt.plot(xx, regressor_quadratic.predict(xx_quadratic), "r--",label="$y = ax^2 + bx + c$",linewidth=2)plt.legend()plt.show()print('1 r-squared', clf.score(X, Y))print('5 r-squared', regressor_quadratic.score(x_train_quadratic, Y))# ('1 r-squared', 0.9118311887769025)# ('5 r-squared', 0.98087802460869788)
输出如下所示,其中红色虚线为五次多项式曲线,它更加接近真实数据集的分布情况,而绿色直线为一元线性回归方程,显然相较于五次多项式曲线 , 线性方程拟合的结果更差 。同时,五次多项式曲线的R方值为98.08%,非常准确的预测了数据趋势 。

最后补充一点,建议多项式回归的阶数不要太高,否则会出现过拟合现象 。
四.逻辑回归1.基础原理在前面讲述的回归模型中,处理的因变量都是数值型区间变量,建立的模型描述是因变量的期望与自变量之间的线性关系或多项式曲线关系 。比如常见的线性回归模型:

而在采用回归模型分析实际问题中,所研究的变量往往不全是区间变量而是顺序变量或属性变量 , 比如二项分布问题 。通过分析年龄、性别、体质指数、平均血压、疾病指数等指标,判断一个人是否换糖尿?。琘=0表示未患?。琘=1表示患?。?这里的响应变量是一个两点(0或1)分布变量 , 它就不能用h函数连续的值来预测因变量Y(Y只能取0或1) 。
总之,线性回归或多项式回归模型通常是处理因变量为连续变量的问题,如果因变量是定性变量 , 线性回归模型就不再适用了,此时需采用逻辑回归模型解决 。
逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法 。

二分类问题的概率与自变量之间的关系图形往往是一个S型曲线,如图17.10所示,采用的Sigmoid函数实现 。这里我们将该函数定义如下:

函数的定义域为全体实数,值域在[0,1]之间,x轴在0点对应的结果为0.5 。当x取值足够大的时候,可以看成0或1两类问题 , 大于0.5可以认为是1类问题,反之是0类问题 , 而刚好是0.5,则可以划分至0类或1类 。对于0-1型变量,y=1的概率分布公式定义如下:

推荐阅读