python进行回归分析(1)

数据来源:R软件自带的包alr4中的数据集

library(alr4)
data<-UN11
write.table(data,"C:/Users/admin/Desktop/数据分析/a.csv",row.names=FALSE,col.names=TRUE,sep=",")

接下来用python分析:

np.array(x).reshape(-1,1):把array的行形式转为列形式,这是regr函数里fit、predict中参数的数据格式

math.log( x ) :返回自然对数,另外,可以通过log(x, base)来设置底数,如math.log(100,10)=2

'Slope: %.3f' % regr.coef_:设置回归系数输出格式为:三位小数。

import math
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model

data=pd.read_csv("a.csv")

x=data["ppgdp"]
y=data["fertility"]
x=[math.log(x) for x in x]
y=[math.log(y) for y in y]

# 建立线性回归模型
regr = linear_model.LinearRegression()
regr.fit(np.array(x).reshape(-1,1), y)

#拟合值
y_pred=regr.predict(np.array(x).reshape(-1,1))
#print(y_pred)

#回归系数
# a, b = regr.coef_, regr.intercept_
# print(a,b)
print('Slope: %.3f' % regr.coef_)
print('Intercept: %.3f' % regr.intercept_)

#print(type(regr.predict(np.array(x).reshape(-1,1))))

plt.scatter(x, y, color ="blue")
plt.plot(x, regr.predict(np.array(x).reshape(-1,1)), color = 'orange', linewidth = 4)
plt.show()

输出结果:Slope: -0.207    Intercept: 2.666


第一种方法用的库是sklearn,下面用的是另外一种方法,用的是statsmodels.api:

import statsmodels.api as sm # 最小二乘
import matplotlib.pyplot as plt
import pandas as pd
import math
import numpy as np

data=pd.read_csv("a.csv")
x=data["ppgdp"]
y=data["fertility"]
x=[math.log(x) for x in x]
y=[math.log(y) for y in y]

plt.scatter(x, y, color ="blue")
x=sm.add_constant(x)    #线性回归增加常数项 y=kx+b
#print(x)是numpy类型,第一列全1,第二列为数据
regr = sm.OLS(y, x) # 普通最小二乘模型,ordinary least square model
res = regr.fit()

#回归系数。
print(res.params)
#回归结果
print(res.summary())
# 获得拟合值
y_fitted = res.fittedvalues

#x[:,1]提取第二列数据,是list
plt.scatter(x[:,1],y,color='g',label="data")  
plt.plot(x[:,1],y_fitted,color='r',label="OLS")
plt.legend(loc='best')#自动生成图列,loc是位置参数,best也可以用plt.legend
plt.xlabel("ppgdp")
plt.ylabel("fertility")

plt.grid(True)
plt.show()

输出:[ 2.66550734 -0.20714979]

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                          y                  R-squared:                       0.526
Model:                                    OLS              Adj.R-squared:                 0.524
Method:                  Least Squares              F-statistic:                         218.6
Date:                Mon, 18 Nov 2019              Prob (F-statistic):              9.06e-34
Time:                               16:24:31              Log-Likelihood:                -46.435
No. Observations:                   199              AIC:                                  96.87
Df Residuals:                           197             BIC:                                  103.5
Df Model:                                    1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef          std err          t            P>|t|        [0.025      0.975]
------------------------------------------------------------------------------
const         2.6655     0.121       22.108      0.000       2.428       2.903
x1            -0.2071      0.014      -14.785      0.000      -0.235      -0.180
==============================================================================
Omnibus:                     1.037        Durbin-Watson:                   2.130
Prob(Omnibus):           0.595       Jarque-Bera (JB):                1.148
Skew:                          -0.151       Prob(JB):                             0.563
Kurtosis:                       2.782       Cond. No.                            48.3
==============================================================================

 

 

 

Python是一种强大的编程语言,对于数据分析和机器学习任务,包括回归分析,提供了丰富的库支持。回归分析是预测因变量(通常是连续值)与一个或多个自变量之间的关系。在Python中,最常用的库用于回归分析的是`scikit-learn`。 使用`scikit-learn`进行回归分析的基本步骤如下: 1. 导入库:首先导入必要的模块,如`numpy`, `pandas`, 和 `sklearn`。 ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn import metrics ``` 2. 数据预处理:加载数据集,可能需要清洗、编码分类变量,以及将数据分为训练集和测试集。 ```python data = pd.read_csv('your_data.csv') # 替换为你的数据文件路径 X = data.drop('target_column', axis=1) # 假设target_column是目标变量 y = data['target_column'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 3. 构建模型:选择一个回归模型,如线性回归(LinearRegression)、决策树回归等。 ```python model = LinearRegression() # 对于线性回归 ``` 4. 训练模型:用训练数据拟合模型。 ```python model.fit(X_train, y_train) ``` 5. 预测:用测试集数据进行预测。 ```python y_pred = model.predict(X_test) ``` 6. 评估:计算模型性能指标,如均方误差(MSE)、R²分数等。 ```python print("Mean Absolute Error:", metrics.mean_absolute_error(y_test, y_pred)) print("Mean Squared Error:", metrics.mean_squared_error(y_test, y_pred)) print("R^2 Score:", metrics.r2_score(y_test, y_pred)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值