线性回归——基本使用和特点分析

线性回归的原型:y=wx+b

代价函数:最小二乘法构造(y-y')**2.sum()

目标函数:对代价函数求导=0,找全局最小值对应W值

线性回归特点:

  • 线性回归一定是一条直线,可能容易欠拟合;
  • 线性回归求解效率高

特征选择:

1、经验选择:在原始特征上,根据业务的理解来人为的主观选择;

2、算法选择:

  • 回归模型特征选择:查看每一个特征和目标之间的线性关系,构造线性回归模型,利用回归系数给出重要性评估
  • 分类模型特征选择:看数据分布是一种特征选择很重要的方式;logistic回归可以评估分类模型的特征重要性;
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import LinearRegression

sns.set()
colors = sns.color_palette('husl')
# 生成测试数据:从1-4中取20个等差序列数,二维数组
X = np.linspace(1, 4, 20).reshape(-1, 1)
# 生成真值数据并拍扁成一维
y = np.sin(X).ravel()
print(y.shape)
# 引入噪声
noise = np.random.random(20) * 0.3 - 0.1
print(noise.shape)
# 包含噪声的y
y_noise = y + noise
# 显示含噪声的数据
# plt.scatter(X, y_noise, color=colors[0])
# plt.plot(X, y_noise, color=colors[1])
# plt.show()
# 构造两个算法对象
knn = KNeighborsRegressor()
linear = LinearRegression()
# 分别用knn与线性回归训练数据
knn.fit(X, y_noise)
linear.fit(X, y_noise)

# 获取测试数据
xmin, xmax = X.min() - 0.5, X.max() + 0.5
X_test = np.linspace(xmin, xmax, 30).reshape((-1, 1))

# 进行预测
y1_ = knn.predict(X_test)
y2_ = linear.predict(X_test)

plt.scatter(X, y_noise, color=colors[0], label='true')
plt.plot(X, y, color=colors[1], label='f(x)')
plt.xlabel('X', fontsize=16)
plt.ylabel('y', fontsize=16)
# 绘制预测结果
plt.plot(X_test, y1_, label='knn', color=colors[2])
plt.plot(X_test, y2_, label='linear', color=colors[3])
# plt.legend()
# plt.show()


# 获取线性回归的解y=w*x+b
# 获取斜率
w = linear.coef_
# 获取截距
b = linear.intercept_
# 验证解是否与预测结果吻合
test = np.linspace(2, 4, 20)
f = lambda x: w * x + b
y_test = f(test)
plt.plot(test, y_test, color=colors[5], label='verify')
plt.legend()
plt.show()

 

 

你可能感兴趣的:(机器学习,线性回归,python)