機器學習是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。專門研究電腦怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的性能。它是人工智慧的核心,是使電腦具有智能的根本途徑。它的應用已遍及人工智慧的各個分支,如專家系統、自動推理、自然語言理解、模式識別、電腦視覺、智能機器人等領域。其中尤其典型的是專家系統中的知識獲取瓶頸問題,人們一直在努力試圖採用機器學習的方法加以剋服。
模型(model):模型在未进行训练前,其可能的参数是多个甚至无穷的,故可能的模型也是多个甚至无穷的,这些模型构成的集合就是假设空间。
策略(strategy):即从假设空间中挑选出参数最优的模型的准则。模型的分类或预测结果与实际情况的误差(损失函数)越小,模型就越好。那么策略就是误差最小。
算法(algorithm):即从假设空间中挑选模型的方法(等同于求解最佳的模型参数)。机器学习的参数求解通常都会转化为最优化问题,故学习算法通常是最优化算法,例如最速梯度下降法、牛顿法以及拟牛顿法等。
基于generated_data.csv数据
# load the data
import pandas as pd
data = pd.read_csv('generated_data.csv')
data.head()
print(type(data),data.shape)
# data賦值
x = data.loc[:,'x']
y = data.loc[:,'y']
print(x,y)
# visualize the data
from matplotlib import pyplot as plt
plt.figure()
plt.scatter(x,y) #散點圖
plt.show()
#set up a linear regression model
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(x.shape) # 查看維度
a=lr_model.coef_ #得到係數
b=lr_model.intercept_
print(a,b)
y_predict = lr_model.predict(x)
from sklearn.metrics import mean_squared_error,r2_score
MSE = mean_squared_error(y,y_predict)
R2 = r2_score(y,y_predict)
print(MSE,R2)
MSE好像是越接近0越小越好因爲數據多也很難直觀看出好壞,R2分數越接近1越好
plt.figure()
plt.plot(y,y_predict)
plt.show()
可視化
基于usa_housing_price.csv数据,以人均收入、房屋年龄、房间数量、区域人口、房屋面积作为输入变量,来预测房屋价格
#load the data
data = pd.read_csv('usa_housing_price.csv')
data.head() #预览数据。数据很多,预览数据只是预览前五项。
# %matplotlib inline #老版本的才要這個新版本寫這個會報錯,後面的也不寫這個了
fig = plt.figure(figsize=(15,12)) #定義畫布大小,覺得效果還行也可以不定義畫布
fig1 =plt.subplot(231) #231是指两行三列的第一个图,下面的232是指两行三列的第二个图,依次类推
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() #展示散点图
#define X_multi
X_multi = data.drop(['Price'],axis=1) #去掉price所在列
y = data.loc[:,'Price']
X_multi.head()
LR_multi = LinearRegression()#建立模型
LR_multi.fit(X_multi,y) #训练模型
這樣就訓練好模型了
#模型预测
y_predict_multi = LR_multi.predict(X_multi)
print(y_predict_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)
可以發現R2分數的已經非常接近與1了,這就比下面單獨用一個因子的模型好
x_Income = data.loc[:,'Avg. Area Income']
x_Income=np.array(x_Income)
x_Income=x_Income.reshape(-1,1)
LR_Income = LinearRegression()#建立模型
LR_Income.fit(x_Income,y) #训练模型
y_predict_Income = LR_Income.predict(x_Income)
mean_squared_error_Income = mean_squared_error(y,y_predict_Income)
r2_score_Income = r2_score(y,y_predict_Income)
print(mean_squared_error_Income,r2_score_Income)
寫一個只有Avg. Area Income一個因子對price的影響
這裏可以看出MSE分數也是遠大於多因子的模型,R2分數只有0.4,綜合看出單因子比上面多因子的模型差的多
#图形评估
fig6 = plt.figure(figsize=(9,6))
plt.scatter(y,y_predict_multi)
因爲多維度難以畫圖所以使用y和預測y對比,若是直綫且越接近45°則越好
可以看出这里y值和y的预测值接近一条45度的直线
相比單因子的這個圖還是好很多
附上數據集和源碼給需要的小夥伴
鏈接:https://github.com/fbozhang/python/tree/master/jupyter