花瓣网网站模板,建设网站一定需要云服务器么,重庆制作网站软件,山东平台网站建设多少钱机器学习实践案例总体流程 文章目录 机器学习实践案例总体流程一、引言二、案例1、决策树对鸢尾花分类1.数据来源2.数据导入及描述3.数据划分与特征处理4.建模预测 2、各类回归波士顿房价预测1.案例数据2.导入所需的包和数据集3.载入数据集#xff0c;查看数据属性#xff0c…机器学习实践案例总体流程 文章目录 机器学习实践案例总体流程一、引言二、案例1、决策树对鸢尾花分类1.数据来源2.数据导入及描述3.数据划分与特征处理4.建模预测 2、各类回归波士顿房价预测1.案例数据2.导入所需的包和数据集3.载入数据集查看数据属性可视化 3、分割数据集并对数据集进行预处理4、利用各类回归模型对数据集进行建模5、利用网格搜索对超参数进行调节 一、引言
前面学习了一些基础知识但还没有步入机器学习算法。通过两个案例来掌握机器学习模型的训练与评估、机器学习模型搭建的总体流程以及特征处理、决策树模型、交叉检验、网格搜索等常用数据挖掘方法的知识。
二、案例
1、决策树对鸢尾花分类
1.数据来源
本道题目使用数据集为“iris.data”。这份数据集包含3种不同类型的鸢尾花 (Setosa, Versicolour, and Virginica) 的数据数据形状为150x5, 五列字段分别为sepal_length(萼片长度)、sepal_width(萼片宽度)、petal_length(花瓣长度)、petal_width(花瓣宽度)、类别。
2.数据导入及描述
导入数组处理numpy、数据分析pandas模块、可视化模块matplotlib。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt导入数据集文件 “iris.data”命名为iris_data将5列数据列名设置为’sepal_length_cm’, ‘sepal_width_cm’, ‘petal_length_cm’, ‘petal_width_cm’, ‘class’。
iris_data pd.read_csv(./iris.data)
iris_data.columns [sepal_length_cm, sepal_width_cm, petal_length_cm, petal_width_cm, class]查看除表头外前 5 行数据查看数据描述信息。
iris_data.head()
iris_data.describe()输出
sepal_length_cmsepal_width_cmpetal_length_cmpetal_width_cmcount150.000000150.000000150.000000150.000000mean5.8433333.0573333.7580001.199333std0.8280660.4358661.7652980.762238min4.3000002.0000001.0000000.10000025%5.1000002.8000001.6000000.30000050%5.8000003.0000004.3500001.30000075%6.4000003.3000005.1000001.800000max7.9000004.4000006.9000002.500000
3.数据划分与特征处理
将数据集切分为4列特征和类别导入sklearn库中的train_test_split方法将数据集的75%作为训练集和25%作为测试集。
from sklearn.model_selection import train_test_split
all_inputs iris_data[[sepal_length_cm, sepal_width_cm, petal_length_cm, petal_width_cm]].values
all_classes iris_data[class].values
(training_inputs,testing_inputs,training_classes,testing_classes) train_test_split(all_inputs, all_classes, train_size0.75, random_state1)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wCJdleQM-1688539473388)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230703151156315.png)]
4.建模预测
导入sklearn中的DecisionTreeClassifier构建决策树模型进行分类模型训练并在测试集上进行评分。
from sklearn.tree import DecisionTreeClassifier
decision_tree_classifier DecisionTreeClassifier()
decision_tree_classifier.fit(training_inputs, training_classes)
decision_tree_classifier.score(testing_inputs, testing_classes)输出
0.9736842105263158导入sklearn中的cross_val_score构建决策树模型进行10次交叉验证并输出评分。
from sklearn.model_selection import cross_val_score
decision_tree_classifier DecisionTreeClassifier()
cv_scores cross_val_score(decision_tree_classifier, all_inputs, all_classes, cv10)
print (cv_scores)输出
[1. 0.93333333 1. 0.93333333 0.93333333 0.866666670.93333333 1. 1. 1. ]构建决策树模型设置max_depth1进行10次交叉验证并输出评分。
decision_tree_classifier DecisionTreeClassifier(max_depth1)
cv_scores cross_val_score(decision_tree_classifier, all_inputs, all_classes, cv10)
print (cv_scores)输出
[0.66666667 0.66666667 0.66666667 0.66666667 0.66666667 0.666666670.66666667 0.66666667 0.66666667 0.66666667]导入sklearn中的GridSearchCV和StratifiedKFold构建决策树模型对决策树模型参数进行网格搜索设置parameter_grid {max_depth: [1, 2, 3, 4, 5],max_features: [1, 2, 3, 4]}进行10次交叉验证输出最优模型评分和最佳参数。
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import StratifiedKFold
decision_tree_classifier DecisionTreeClassifier()
parameter_grid {max_depth: [1, 2, 3, 4, 5],max_features: [1, 2, 3, 4]}
cross_validation StratifiedKFold(n_splits10)
grid_search GridSearchCV(decision_tree_classifier, param_gridparameter_grid, cvcross_validation)
grid_search.fit(all_inputs, all_classes)print(Best score: {}.format(grid_search.best_score_))
print(Best parameters: {}.format(grid_search.best_params_))输出
Best score: 0.96
Best parameters: {max_depth: 3, max_features: 4}2、各类回归波士顿房价预测
由于本案例使用的数据集样本量较小且数据来自于scikit-learn自带的开源波士顿房价数据。波士顿房价预测项目是一个简单的回归模型通过此案例可以学会一些关于机器学习库sklearn的基本用法和一些基本的数据处理方法。
1.案例数据
该案例主要内容是进行波士顿数据集共有13个特征总共506条数据每条数据包含房屋以及房屋周围的详细信息。其中包含城镇犯罪率一氧化氮浓度住宅平均房间数到中心区域的加权距离以及自住房平均房价等等。具体如下
CRIM城镇人均犯罪率。
ZN住宅用地超过 25000 sq.ft.的比例。
INDUS城镇非零售商用土地的比例。
CHAS查理斯河空变量如果边界是河流则为1否则为0。
NOX一氧化氮浓度。
RM住宅平均房间数。
AGE1940 年之前建成的自用房屋比例。
DIS到波士顿五个中心区域的加权距离。
RAD辐射性公路的接近指数。
TAX每 10000 美元的全值财产税率。
PTRATIO城镇师生比例。
B1000Bk-0.63^ 2其中 Bk 指代城镇中黑人的比例。
LSTAT人口中地位低下者的比例。
target自住房的平均房价以千美元计。2.导入所需的包和数据集
保证下方引入的内容已经被安装。
如pip install xgboost 等
# 防止不必要的警告
import warnings
warnings.filterwarnings(ignore)# 引入数据科学基础包
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
import scipy.stats as st
import seaborn as sns# 引入机器学习预处理模型选择评估指标
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import r2_score# 引入本次所使用的波士顿数据集
from sklearn.datasets import load_boston# 引入算法
from sklearn.linear_model import RidgeCV, LassoCV, LinearRegression, ElasticNet
#对比SVC是svm的回归形式
from sklearn.svm import SVR
# 集成算法
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from xgboost import XGBRegressor3.载入数据集查看数据属性可视化
载入波士顿房价数据集获取特征和标签查看相关属性
# 载入波士顿房价数据集
boston load_boston()# x是特征y是标签
x boston.data
y boston.target# 查看相关属性
print(特征的列名)
print(boston.feature_names)
print(样本数据量:%d, 特征个数%d % x.shape)
print(target样本数据量:%d % y.shape[0])输出
特征的列名
[CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIOB LSTAT]
样本数据量:506, 特征个数13
target样本数据量:506数据转化为dataframe形式
x pd.DataFrame(boston.data, columnsboston.feature_names)
x.head()输出
CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTAT00.0063218.02.310.00.5386.57565.24.09001.0296.015.3396.904.9810.027310.07.070.00.4696.42178.94.96712.0242.017.8396.909.1420.027290.07.070.00.4697.18561.14.96712.0242.017.8392.834.0330.032370.02.180.00.4586.99845.86.06223.0222.018.7394.632.9440.069050.02.180.00.4587.14754.26.06223.0222.018.7396.905.33
对标签的分布进行可视化
sns.distplot(tuple(y), kdeFalse, fitst.norm)3、分割数据集并对数据集进行预处理
将数据分割为训练集和测试将数据集进行标准化处理
# 数据分割
x_train, x_test, y_train, y_test train_test_split(x, y, test_size0.2, random_state28)# 标准化数据集
ss StandardScaler()
x_train ss.fit_transform(x_train)
x_test ss.transform(x_test)
x_train[0:100]输出
array([[-0.35703125, -0.49503678, -0.15692398, ..., -0.01188637,0.42050162, -0.29153411],[-0.39135992, -0.49503678, -0.02431196, ..., 0.35398749,0.37314392, -0.97290358],[ 0.5001037 , -0.49503678, 1.03804143, ..., 0.81132983,0.4391143 , 1.18523567],...,[-0.34697089, -0.49503678, -0.15692398, ..., -0.01188637,0.4391143 , -1.11086682],[-0.39762221, 2.80452783, -0.87827504, ..., 0.35398749,0.4391143 , -1.28120919],[-0.38331362, 0.41234349, -0.74566303, ..., 0.30825326,0.19472652, -0.40978832]])4、利用各类回归模型对数据集进行建模
输入模型名字
# 模型的名字
names [LinerRegression,Ridge,Lasso,Random Forrest,GBDT,Support Vector Regression,ElasticNet,XgBoost]创建模型列表
# 定义模型
# cv在这里是交叉验证的思想
models [LinearRegression(),RidgeCV(alphas(0.001,0.1,1),cv3),LassoCV(alphas(0.001,0.1,1),cv5),RandomForestRegressor(n_estimators10),GradientBoostingRegressor(n_estimators30),SVR(),ElasticNet(alpha0.001,max_iter10000),XGBRegressor()]输出所有回归模型的R2评分
# 先定义R2评分的函数
def R2(model,x_train, x_test, y_train, y_test):model_fitted model.fit(x_train,y_train)y_pred model_fitted.predict(x_test)score r2_score(y_test, y_pred)return score遍历所有模型进行评分
# 遍历所有模型进行评分
for name,model in zip(names,models):score R2(model,x_train, x_test, y_train, y_test)print({}: {:.6f}, {:.4f}.format(name,score.mean(),score.std()))输出
LinerRegression: 0.564115, 0.0000
Ridge: 0.563673, 0.0000
Lasso: 0.564049, 0.0000
Random Forrest: 0.735384, 0.0000
GBDT: 0.730172, 0.0000
Support Vector Regression: 0.517260, 0.0000
ElasticNet: 0.563992, 0.0000
XgBoost: 0.759977, 0.00005、利用网格搜索对超参数进行调节
使用网格搜索以及交叉验证
# 模型构建
kernel: 核函数C: SVR的正则化因子,gamma: rbf, poly and sigmoid核函数的系数影响模型性能
parameters {kernel: [linear, rbf],C: [0.1, 0.5,0.9,1,5],gamma: [0.001,0.01,0.1,1]
}# 使用网格搜索以及交叉验证
model GridSearchCV(SVR(), param_gridparameters, cv3)
model.fit(x_train, y_train)输出
GridSearchCV(cv3, estimatorSVR(),param_grid{C: [0.1, 0.5, 0.9, 1, 5],gamma: [0.001, 0.01, 0.1, 1],kernel: [linear, rbf]})获取最优参数
# 获取最优参数
print (最优参数列表:, model.best_params_)
print (最优模型:, model.best_estimator_)
print (最优R2值:, model.best_score_)输出
最优参数列表: {C: 5, gamma: 0.1, kernel: rbf}
最优模型: SVR(C5, gamma0.1)
最优R2值: 0.7965173649188232可视化
ln_x_test range(len(x_test))
y_predict model.predict(x_test)# 设置画布
plt.figure(figsize(16,8), facecolorw)
# 用红实线画图
plt.plot(ln_x_test, y_test, r-, lw2, labelu真实值)
# 用绿实线画图
plt.plot(ln_x_test, y_predict, g-, lw 3, labeluSVR算法估计值,$R^2$%.3f % (model.best_score_))# 图形显示
plt.legend(loc upper left)
plt.grid(True)
plt.title(u波士顿房屋价格预测(SVM))
plt.xlim(0, 101)
plt.show()结果 如汉字不能正常显示请设置为英文或将字体文件放到指定路径中在使用时调用字体文件。
如不能解决请参考https://blog.csdn.net/hfy1237/article/details/128218567