[TOC] 更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlhtml
import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties from sklearn.linear_model import LinearRegression from sklearn.metrics import r2_score %matplotlib inline font = FontProperties(fname='/Library/Fonts/Heiti.ttc')
在《代码-普通线性回归》的时候说到特征LSTAT和标记MEDV有最高的相关性,可是它们之间并非线性关系,尝试多项式回归发现能够获得不错的结果,可是多项式可能会增长模型的复杂度容易致使过拟合的问题出现,是否是能够假设特征和标记之间可能符合对数线性回归呢?即$y$和$x$的关系为python
下面将使用对数线性回归作尝试。算法
df = pd.read_csv('housing-data.txt', sep='\s+', header=0) X = df[['LSTAT']].values y = df['MEDV'].values # np.log()默认以$e$为底数 y_sqrt = np.log(y)
# 增长x轴坐标点 X_fit = np.arange(X.min(), X.max(), 1)[:, np.newaxis] lr = LinearRegression() # 线性回归 lr.fit(X, y) lr_predict = lr.predict(X_fit) # 计算线性回归的R2值 lr_r2 = r2_score(y, lr.predict(X))
plt.scatter(X, y, c='gray', edgecolor='white', marker='s', label='训练数据') plt.plot(X_fit, lr_predict, c='r', label='线性,$R^2={:.2f}$'.format(lr_r2)) plt.xlabel('地位较低人口的百分比[LSTAT]', fontproperties=font) plt.ylabel('ln(以1000美圆为计价单位的房价[RM])', fontproperties=font) plt.title('波士顿房价预测', fontproperties=font, fontsize=20) plt.legend(prop=font) plt.show()
_9_0.png?x-oss-process=style/watermark)数据结构
上图能够看出对数线性回归也能比较不错的拟合特征与标记之间的关系,此次只是使用了标准的对数线性回归拟合二者之间的关系,你也能够自行选择不一样的关系函数$g(·)$去拟合二者之间的关系,也许可能会获得一个不错的结果。机器学习