python手写代码实现一元线性回归
时间: 2023-11-05 12:04:33 浏览: 83
好的,我可以回答这个问题。一元线性回归是指仅有一个自变量的线性回归模型。以下是Python手写代码实现一元线性回归的示例:
```
import numpy as np
# 输入数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 4, 5, 6])
# 定义线性回归函数
def linear_regression(x, y):
n = np.size(x)
m_x, m_y = np.mean(x), np.mean(y)
SS_xy = np.sum(y*x) - n*m_y*m_x
SS_xx = np.sum(x*x) - n*m_x*m_x
b_1 = SS_xy / SS_xx
b_0 = m_y - b_1*m_x
return(b_0, b_1)
# 计算并打印出斜率和截距
b_0, b_1 = linear_regression(x, y)
print('斜率:', b_1)
print('截距:', b_0)
```
这里使用了NumPy库来进行矩阵运算,首先定义了输入数据x和y,然后定义了线性回归函数。该函数计算并返回斜率和截距,最后在主函数中调用该函数并打印出结果。
相关问题
python读取excel数据实现一元线性回归
可以使用Python中的pandas和scikit-learn库来实现一元线性回归。
首先,需要安装pandas和scikit-learn库,可以使用以下命令进行安装:
```
pip install pandas scikit-learn
```
接下来,假设我们有一个名为data.xlsx的Excel文件,其中包含两列数据x和y,我们可以使用以下代码读取数据:
```python
import pandas as pd
# 读取Excel文件中的数据
df = pd.read_excel('data.xlsx')
# 获取x和y的值
x = df['x'].values.reshape(-1, 1)
y = df['y'].values.reshape(-1, 1)
```
接着,我们可以使用scikit-learn库中的LinearRegression模型来进行一元线性回归,代码如下:
```python
from sklearn.linear_model import LinearRegression
# 创建线性回归模型
model = LinearRegression()
# 使用数据训练模型
model.fit(x, y)
# 打印模型的截距和系数
print('Intercept:', model.intercept_)
print('Coefficient:', model.coef_)
```
最后,我们可以使用matplotlib库将数据和回归线可视化,代码如下:
```python
import matplotlib.pyplot as plt
# 绘制数据散点图
plt.scatter(x, y)
# 绘制回归线
plt.plot(x, model.predict(x), color='red')
# 显示图形
plt.show()
```
完整代码如下:
```python
import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# 读取Excel文件中的数据
df = pd.read_excel('data.xlsx')
# 获取x和y的值
x = df['x'].values.reshape(-1, 1)
y = df['y'].values.reshape(-1, 1)
# 创建线性回归模型
model = LinearRegression()
# 使用数据训练模型
model.fit(x, y)
# 打印模型的截距和系数
print('Intercept:', model.intercept_)
print('Coefficient:', model.coef_)
# 绘制数据散点图
plt.scatter(x, y)
# 绘制回归线
plt.plot(x, model.predict(x), color='red')
# 显示图形
plt.show()
```
用python实现一元线性回归
以下是使用Python实现一元线性回归的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 输入数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([3, 5, 7, 9, 11])
# 计算均值
x_mean = np.mean(x)
y_mean = np.mean(y)
# 计算斜率和截距
num = 0
denom = 0
for i in range(len(x)):
num += (x[i] - x_mean) * (y[i] - y_mean)
denom += (x[i] - x_mean) ** 2
slope = num / denom
intercept = y_mean - slope * x_mean
# 输出结果
print("斜率:", slope)
print("截距:", intercept)
# 绘制数据和拟合直线
plt.scatter(x, y)
plt.plot(x, slope * x + intercept, 'r')
plt.show()
```
输出:
```
斜率: 2.0
截距: 1.0
```
绘制的图形如下所示:
![一元线性回归图](https://img-blog.csdn.net/20170627101451805?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hvcnR5X2Jsb2dfY29kZS5wbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
相关推荐
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)