人工智能入门-02 线性回归

153 阅读3分钟

什么是机器学习

机器学习是一种实现人工智能的方法,从数据中寻找规律,建立关系,根据建立的关系去解决问题

机器学习的应用场景

  • 数据挖掘
  • 计算机视觉
  • 自然语言处理
  • 证券分析
  • 医疗诊断
  • 机器人
  • DNA测序

实现机器学习的基本框架

将训练数据喂给计算机,计算机自动求解数据关系,在新的数据上做出预测或者建议。

机器学习的类别

监督学习(Supervised learning)

训练数据包括正确的结果 (标签-label)

无监督学习

训练数据不包括正确的结果

半监督学习(semi-supervised learning)

训练数据包括少量正确的结果

强化学习(Reubfircement learing)

根据每次结果收获的奖惩进行学习,实现优化

什么是回归分析

根据数据,确定两种或者两种以上变量间相互依赖的定量关系 y = f(x1,x2,。。。xn)

一元回归 y = f(x) 多元回归 y = f(x1,x2,... xn) 线性回归 y =ax + b 非线性回归 y = ax2 +bx +c

线性回归

回归分析中,变量和因变量存在线性关系

梯度下降法

寻找极小值的一种方法,通过向函数上当前点对应的梯度(或者近似梯度)的反方向的规定步长距离点进行迭代搜索,直到极小点收敛

损失函数

均方误差

MSE = (1/n) * Σ(yi - ŷi)^2

其中,n表示样本数,yi表示第i个样本的真实标签,ŷi表示模型对第i个样本的预测值。

Scikit-learn

集成了机器学习中各类成熟的算法,容易安装和使用,样例丰富,教程和文档也非常详细 不支持python以外的语言

评估模型

均方误差MSE 越小越好

R方值 越接近1越好 R2 = MSE/方差

LR实现线性预测

基于geneated_data.csv数据 建立线性回归模型,预测x=3.5对应的y值,并评估模型表现

#加载数据
import pandas as pd
data = pd.read_csv('generated_data.csv')
#查看数据
data.head()

x= data.loc[:,'x']
y= data.loc[:,'y']
print(x,y)
#数据可视化
form matplotlib import pyplot as plt
plt.figure(figsize=(20,20))
plt.scatter(x,y)
plt.show()
#建立线性回归模型
from sklearn.linear_model import LinearRegression
lr_model = LinearRegression()

import numpy as np
#转化为二位数组
x = np.array(x)
x = x.reshape(-1,1)
y = np.array(y)
y = y.reshape(-1,1)
print(type(x),x.shape,type(y),y.shape)
# <class 'numpy.ndarray'> (10, 1) <class 'numpy.ndarray'> (10, 1)

#训练模型
lr_model.fit(x,y)

#预测数据
y_predict = lr_model.predict(x)

y_3 = lr_model.predict([[3.5]])
print(y_3)


#求a b的值  y = ax + b
a = lr_model.coef_
b = lr_model.intercept_
print(a,b)

#模型评估
from sklern.metrics import mean_squared_error,r2_score
MSE = mean_squared_error(y,y_predict)
R2 = r2_score(y,y_predict)
print(MSE,R2)


线性回归预测房价

#从usa_housing_price.csv中加载数据
import pandas as pd
import numpy as np
data = pd.read_csv('usa_housing_price.csv')
data.head()

#展示数据
%matplotlib inline
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(10,10))

#展示价格和收入关系的表格
fig1 =plt.subplot(231)
plt.scatter(data.loc[:,'Avg. Area Income'],data.loc[:,'Price'])
plt.title('Price VS Income')
#展示价格和房屋年龄关系的表格
fig2 =plt.subplot(232)
plt.scatter(data.loc[:,'Avg. Area House Age'],data.loc[:,'Price'])
plt.title('Price VS House Age')
#展示价格和房间数量关系的表格
fig3 =plt.subplot(233)
plt.scatter(data.loc[:,'Avg. Area Number of Rooms'],data.loc[:,'Price'])
plt.title('Price VS Number of Rooms')
#展示价格和区域人口密度的表格
fig4 =plt.subplot(234)
plt.scatter(data.loc[:,'Area Population'],data.loc[:,'Price'])
plt.title('Price VS Area Population')
#展示价格和房屋面积的表格
fig5 =plt.subplot(235)
plt.scatter(data.loc[:,'size'],data.loc[:,'Price'])
plt.title('Price VS size')
plt.show()


# X是尺寸数据 y是价格数据,
X = data.loc[:,'size']
y = data.loc[:,'Price']
y.head()
X = np.array(X).reshape(-1,1)
from sklearn.linear_model import LinearRegression
LR1 = LinearRegression()
#训练模型
LR1.fit(X,y)
#预测数据
y_predict_1 = LR1.predict(X)
#模型评估
from sklearn.metrics import mean_squared_error,r2_score
mean_squared_error_1 = mean_squared_error(y,y_predict_1)
r2_score_1 = r2_score(y,y_predict_1)
print(mean_squared_error_1,r2_score_1)
#可视化
fig6 = plt.figure(figsize=(8,5))
plt.scatter(X,y)
plt.plot(X,y_predict_1,'r')
plt.show()
#以上只是建立了 房屋面积和价格之间的模型,效果比较差,下面建立价格和房屋面积,房间数,区域人口密度,收入,房屋年龄等模型

#定义 多重条件,数据中提出房价,房价是结果y
X_multi = data.drop(['Price'],axis=1)
LR_multi = LinearRegression()
#训练模型
LR_multi.fit(X_multi,y)
#预测数据
y_predict_multi = LR_multi.predict(X_multi)
#模型评估
mean_squared_error_multi = mean_squared_error(y,y_predict_multi)
r2_score_multi = r2_score(y,y_predict_multi)
print(mean_squared_error_multi,r2_score_multi)

#预测房价  根据 收入,房屋年龄 ,房间数,人口密度,面积
X_test = [65000,5,5,30000,200]
X_test = np.array(X_test).reshape(1,-1)
y_test_predict = LR_multi.predict(X_test)
print(y_test_predict)