要操作的元数据:
链接:http://pan.baidu.com/s/1jIw1edw
密码:qis4
得到两组数据之间的某种线性关系
==================================================
Python
一些以前操作的说明,不再过多解释。
传送门:http://blog.csdn.net/wiki_su/article/details/78414169
选择好目标文件,然后撸下代码:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
#import dataset
dataset = pd.read_csv('Position_Salaries.csv')
#生成一个二矩阵
X = dataset.iloc[:,1:2].values
y = dataset.iloc[:,2].values
下面我们先做出线性模型,然后再做出多项线性模型,来进行对比。取出最符合的模型。
#喂养线性回归
from sklearn.linear_model import LinearRegression
line_reg = LinearRegression()
line_reg.fit(X,y)
#线性模型。
plt.scatter(X,y,color = 'red')
plt.title = ('Truth or Bluff(Linear Regression)')
plt.plot(X ,line_reg.predict(X),color = 'blue')
plt.xlabel = ('Position Level')
plt.ylabel = ('Salary')
plt.show()
我们可以看到,这个模型和我们的数据差的实在是太多了。
下面我们看下,多项线性回归。
下面这个是2次的多项线性模型。
#喂养多项线性模型
from sklearn.preprocessing import PolynomialFeatures
ploy_reg2 = PolynomialFeatures(degree = 2)
X_ploy2 = ploy_reg2.fit_transform(X)
line_reg2 = LinearRegression()
line_reg2.fit(X_ploy2,y)
plt.scatter(X,y,color = 'red')
plt.title = ('Truth or Bluff(Linear Regression)')
plt.plot(X ,line_reg2.predict(ploy_reg2.fit_transform(X)),color = 'blue')
plt.xlabel = ('Position Level')
plt.ylabel = ('Salary')
plt.show()
从结果看出,曲线稍微好些。
我们改为3次方,4次方来看下,
from sklearn.preprocessing import PolynomialFeatures
ploy_reg3 = PolynomialFeatures(degree = 3)
X_ploy3 = ploy_reg3.fit_transform(X)
line_reg3 = LinearRegression()
line_reg3.fit(X_ploy3,y)
from sklearn.preprocessing import PolynomialFeatures
ploy_reg4 = PolynomialFeatures(degree = 4)
X_ploy4 = ploy_reg4.fit_transform(X)
line_reg4 = LinearRegression()
line_reg4.fit(X_ploy4,y)
#=================================
plt.scatter(X,y,color = 'red')
plt.title = ('Truth or Bluff(Linear Regression)')
plt.plot(X ,line_reg3.predict(ploy_reg3.fit_transform(X)),color = 'blue')
plt.xlabel = ('Position Level')
plt.ylabel = ('Salary')
plt.show()
plt.scatter(X,y,color = 'red')
plt.title = ('Truth or Bluff(Linear Regression)')
plt.plot(X ,line_reg4.predict(ploy_reg4.fit_transform(X)),color = 'blue')
plt.xlabel = ('Position Level')
plt.ylabel = ('Salary')
plt.show()
我们可以看到,图4这个模型是最吻合的了。
我们看数据X,是 1 - 10,我们把这组数据按照0.1的尺度进行分割。分成90个数据,然后再绘图。
#数据可视化(多项) 分割
x_grid = np.arange(min(X), max(X), 0.1)
x_grid = x_grid.reshape(len(x_grid), 1)
plt.scatter(X,y,color = 'red')
plt.title = ('Truth or Bluff(Linear Regression)')
plt.plot(x_grid ,line_reg4.predict(ploy_reg4.fit_transform(x_grid)),color = 'blue')
plt.xlabel = ('Position Level')
plt.ylabel = ('Salary')
plt.show()
我们对比图4 图5会发现,图5的曲线更加平滑。
比方我们看年限为6.5年的,薪资应该多少。
#做出预测 (单一线性预测)
# array([ 330378.78787879])
line_reg.predict(6.5)
#做出预测(多项线性预测)
#array([ 158862.45265153])
line_reg4.predict(ploy_reg4.fit_transform(6.5))
==================================================
R
datasets = read.csv('Position_Salaries.csv')
datasets = datasets[2:3]
#设置单一线性回归
line_reg = lm(formula = Salary ~ .,data = datasets)
summary(line_reg)
#设置多项线性回归
datasets$Level2 = datasets$Level^2
datasets$Level3 = datasets$Level^3
datasets$Level4 = datasets$Level^4
poly_reg = lm(formula = Salary ~ .,data = datasets)
summary(poly_reg)
x_grid = seq(min(datasets$Level), max(datasets$Level), 0.1)
#可视化(单一)
#install.packages('ggplot2')
ggplot()+
geom_point(aes(x = datasets$Level, y = datasets$Salary), colour = 'red')+
geom_line(aes(x = datasets$Level, y = predict(line_reg, newdata = datasets)),colour = 'blue')+
ggtitle('Trhth or Burff')+
xlab('Level')+
ylab('Salary')
#可视化(多项)
ggplot()+
geom_point(aes(x = datasets$Level, y = datasets$Salary), colour = 'red')+
geom_line(aes(x = x_grid, y = predict(poly_reg, newdata = data.frame(Level = x_grid,Level2 = x_grid^2,Level3 = x_grid^3,Level4 = x_grid^4))),colour = 'green')+
ggtitle('Trhth or Burff')+
xlab('Level')+
ylab('Salary')
#预测结果(单一) y_pred = 330378.8
y_pred = predict(line_reg, data.frame(Level = 6.5))
#预测结果(多项) y_pred = 158862.5
y_pred = predict(poly_reg, data.frame(Level = 6.5,
Level2 = 6.5^2,
Level3 = 6.5^3,
Level4 = 6.5^4))
最优秀的结果如下: