代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path = 'ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])
data.head()
data.plot(kind='scatter', x='Population', y='Profit', figsize=(12, 8))
plt.show()
# 新增一例,x0
data.insert(0, 'Ones', 1)
data.head()
cols = data.shape[1]
X = data.iloc[:, 0:cols - 1]
Y = data.iloc[:, cols - 1:cols]
X = np.matrix(X.values)
Y = np.matrix(Y.values)
theta = np.matrix(np.array([0, 0]))
# scikit-learn
# 拟合
from sklearn import linear_model
model = linear_model.LinearRegression() # 创建一个线性回归模型对象
model.fit(X, Y) # 使用给定的特征矩阵 X 和目标变量 Y 来拟合线性回归模型
x = np.array(X[:, 1].A1) # 从特征矩阵 X 中提取第二列的数据,并将其转换为 NumPy 数组
y = model.predict(X).flatten() # 使用训练好的模型对特征矩阵 X 进行预测,并将结果展平为一维数组
fig, ax = plt.subplots(figsize=(12, 8)) # 创建一个大小为 12x8 的图形窗口和一个坐标轴对象
ax.plot(x, y, 'r', label='Prediction') # 绘制预测值与特征值之间的关系曲线
ax.scatter(data.Population, data.Profit, label='Traning Data') # 绘制训练数据的散点图
ax.legend(loc=2) # 显示图例,位置在左上角
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()
效果