-
数学理论:
当遇到非线性问题,类似,y=\theta_0+\theta_1x_1+\theta_2x_2^2+...
通过令,t_1=x_1, t_2=x_2^2, ....
将原始转化为,y=\theta_0+\theta_1t_1+\theta_2t_2+....
这时候该问题就转化为线性问题,同之前写的线性问题一个解法。
-
算法实现
- 导入模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
- 导入数据散点可视化
data=pd.read_csv('PDM\\xx\\4.3\\data.csv')
font={'family':'SimHei'}
plt.scatter(data['等级'],data['资源'])
plt.xlabel('等级')
plt.ylabel('资源')
plt.show()
font = { 'family' : 'SimHei'};
matplotlib.rc('font', **font);
matplotlib.rcParams['axes.unicode_minus'] = False
from pandas.tools.plotting import scatter_matrix;
scatter_matrix(data[["等级", "资源"]], alpha=0.8, figsize=(10, 10), diagonal='kde')
plt.show()
非线性关系,尝试二阶polynomial
- 导入计算模块
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
x = data[['等级']]
y = data[['资源']]
pf = PolynomialFeatures(degree=2)
x_fit = pf.fit_transform(x)
IrModel = LinearRegression()
IrModel.fit(x_fit,y)
yy=np.array(np.mat(x_fit)*np.mat(IrModel.coef_).T)+IrModel.intercept_
font={'family':'SimHei'}
plt.scatter(data['等级'],data['资源'])
plt.xlabel('等级')
plt.ylabel('资源')
plt.plot(x_fit[:,1],yy)
plt.show()
- 预测
x_2_fit=pf.fit_transform([[21],[22],[23]])
IrModel.predict(x_2_fit)