赞
踩
1. 波士顿房产数据(完整数据)
使用sklearn.datasets.load_boston即可加载相关数据。该数据集是一个回归问题。每个类的观察值数量是均等的,共有 506 个观察,13 个输入变量和1个输出变量。
CRIM:城镇人均犯罪率。
ZN:住宅用地超过 25000 sq.ft. 的比例。
INDUS:城镇非零售商用土地的比例。
CHAS:查理斯河空变量(如果边界是河流,则为1;否则为0)。
NOX:一氧化氮浓度。
RM:住宅平均房间数。
AGE:1940 年之前建成的自用房屋比例。
DIS:到波士顿五个中心区域的加权距离。
RAD:辐射性公路的接近指数。
TAX:每 10000 美元的全值财产税率。
PTRATIO:城镇师生比例。
B:1000(Bk-0.63)^ 2,其中 Bk 指代城镇中黑人的比例。
LSTAT:人口中地位低下者的比例。
MEDV:自住房的平均房价,以千美元计。
每条数据包含房屋以及房屋周围的详细信息。其中包含城镇犯罪率,一氧化氮浓度,住宅平均房间数,到中心区域的加权距离以及自住房平均房价等等。
2. 实现多变量(手写代码)
#读取数据 %matplotlib notebook import tensorflow as tf import matplotlib.pyplot as plt import numpy as np import pandas as pd #能快速读取常规大小的文件。Pandas能提供高性能、易用的数据结构和数据分析工具 from sklearn.utils import shuffle #随机打乱工具,将原有序列打乱,返回一个全新的顺序错乱的值 #读取数据文件 df = pd.read_csv("data/boston.csv",header=0) #显示数据描述信息 # print(df.describe()) # print(df) #数据准备 #获取df的值 df = df.values #把df转换成np的数组格式 df = np.array(df)
3. 数据标准化(手写代码)
#特征数据归一化
#对特征数据{0到11}列 做(0-1)归一化
for i in range(12):
df[:,i] = (df[:,i]-df[:,i].min())/(df[:,i].max()-df[:,i].min())
#x_data为归一化后的前12列特征数据
x_data = df[:,:12]
#y_data为最后1列标签数据
y_data = df[:,12]
4. 网格搜索调参
GridSearch
网格化调整超参数所需要做的是告诉GridSearchCV要试验有哪些超参数,要试验什么值,GridSearchCV就能用交叉验证试验所有可能超参数值的组合。
比如下面对随机森林的网格化调参:
grid_search.best_estimator_
grid_search.best_params_
#在得到相应的分数
housing_predictions = grid_search.predict(housing_prepared)
scores = cross_val_score(grid_search,housing_prepared,housing_labels.values,scoring="neg_mean_squared_error", cv=5)
grid_score= np.sqrt(-scores)
display(grid_score)
输出得到最优参数后,我们可以代入到原来的模型中然后进行计算:
rnd_clffited = RandomForestRegressor(n_estimators=30,max_features=6,random_state=42)
scores = cross_val_score(rnd_clffited,housing_prepared,housing_labels.values,scoring="neg_mean_squared_error", cv=5)
rnd_clfscore= np.sqrt(-scores)
display(rnd_clfscore)
现在在给一个支持向量机的调参方式:
from sklearn.model_selection import GridSearchCV
param_grid = [
{'kernel': ['linear'], 'C': [10., 30., 100., 300., 1000., 3000., 10000., 30000.0]},
{'kernel': ['rbf'], 'C': [1.0, 3.0, 10., 30., 100., 300., 1000.0],
'gamma': [0.01, 0.03, 0.1, 0.3, 1.0, 3.0]},
]
svm_reg = SVR()
grid_search = GridSearchCV(svm_reg, param_grid, cv=5, scoring='neg_mean_squared_error', verbose=2, n_jobs=4)
grid_search.fit(housing_prepared, housing_labels)
这里的scoring 就是sklearn metric中的一些评估指标。
这里的参数列表我们可以研究一下:
这里的交叉验证参数是分别尝试线性核 和rbf 核 ,如gama = 0.1 kernel =‘linear’,‘C’ = 10 ,gama = 0.1 kernel =‘linear’,‘C’ = 10 共(86+76)*5 这里之所以乘以5 是因为 grid_search 里的cv =5
5. from sklearn.linear_model import LinearRegression对比
sklearn中的线性回归模型LinearRegression()是使用最小二乘法来实现的。
##加载线性回归模型
model=LinearRegression()
##将训练数据传入开始训练
model.fit(X_train,y_train)
print(model.coef_) #系数,有些模型没有系数(如k近邻)
print(model.intercept_) #与y轴交点,即截距
输出:
[[-0.01759158 4.3701041 -0.94665828 -0.60046412]]
[ 20.27487956]
官网上还有提到Ridge Regression,我们也来试一试,它其实就是在最小二乘法的基础上对系数的L2范数的平方加了一个λλ惩罚项。
对于普通的线性回归,我们的算法思路是:
对于Ridge Regression,它的思路是:
导入Ridge Regression模型:
model_ridge=linear_model.Ridge(alpha = .5)
model_ridge.fit(X_train,y_train)
print(model_ridge.coef_)
print(model_ridge.intercept_)
输出:
[[-0.01757544 4.35451637 -0.94714198 -0.6012894 ]]
[ 20.39189661]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。