首页 > 编程语言 >python+sklearn 机器学习代码备忘

python+sklearn 机器学习代码备忘

时间:2023-12-09 13:55:17浏览次数:45  
标签:shap plt python 备忘 train test import sklearn

import sklearn
from sklearn.model_selection import train_test_split 
from sklearn.linear_model import LinearRegression  
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import preprocessing
import csv
import numpy as np
from sklearn.inspection import partial_dependence
from sklearn.inspection import plot_partial_dependence
from sklearn.inspection import partial_dependence
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import cross_val_score
import shap
from sklearn.preprocessing import OneHotEncoder
from matplotlib.pyplot import MultipleLocator
from sklearn.metrics import r2_score


#读取原表格
pd_data=pd.read_csv('QYD.csv')

#提取特征与标签,此处X_origin输入特征,Y_origin输入因变量
X_origin = pd_data.loc[:, ('BTSM','SVF','GVI','ROAD','POI','JZMD','NDVI','DLMD','POPU','FLOOR')]
y_origin = pd_data.loc[:, 'temp']

X, y = sklearn.utils.shuffle(X_origin, y_origin)

#划分测试集和训练集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=532)#选择20%为测试集
print('训练集测试及参数:')
print('X_train.shape={}\n y_train.shape ={}\n X_test.shape={}\n,  y_test.shape={}'.format(X_train.shape,y_train.shape,X_test.shape,y_test.shape))

#定义训练模型
rfreg = RandomForestRegressor(n_estimators=161, max_depth=19, random_state=90)

#训练
model = rfreg.fit(X_train, y_train)

#输出模型超参数
print('模型参数:')
print(model)

# 训练后模型截距
print('模型特征重要性:')
print(rfreg.feature_importances_)

# 训练后模型权重
score = cross_val_score(rfreg, X_train, y_train, cv=10).mean()
print(score)


#对测试集进行训练
y_pred = rfreg.predict(X_test)

#初始化误差参数
sum_mean = 0

#计算均方误差
for i in range(len(y_pred)):
    sum_mean += (y_pred[i] - y_test.values[i]) ** 2
sum_erro = np.sqrt(sum_mean /len(y_pred))

#打印均方误差
print ("RMSE by hand:", sum_erro)
print("R2:", rfreg.score(X_test,y_test))


#返回十次交叉验证值,此处返回负的MSE,转为正值
cross_score=cross_val_score(rfreg, X, y, cv=10,scoring = 'neg_mean_squared_error')
print(pow(-cross_score,0.5))

# 做验证集的原始数据-预测数据曲线
plt.figure()
plt.plot(range(len(y_pred)), y_pred, 'r', label="predict")
plt.plot(range(len(y_pred)), y_test, 'b', label="test",)
plt.legend(loc="upper right")  # 显示图中的标签
plt.xlabel("the number of sales")
plt.ylabel('value of sales')
plt.show()
plt.close()


#绘制特征的相关性热力图
hot = X.corr()
plt.subplots(figsize = (4,4))
sns.heatmap(hot,annot = True,vmax = 1,square = True,cmap = "Blues")
plt.show()
plt.close()



#绘制部分依赖图,输入特征
features = ['BTSM','SVF','GVI','ROAD','POI','JZMD','NDVI','DLMD','POPU','FLOOR']
plot_partial_dependence(rfreg, X_train, features,n_jobs=3, grid_resolution=20, method='brute')#,line_kw={"color": "black","lw":0.8},line_kw是传给plot的关键字字典
fig = plt.gcf()
fig.subplots_adjust(hspace=0.3)
plt.show()
plt.close()



#shap可解释机器学习
#创建explainer,输入特征
cols = ['BTSM','SVF','GVI','ROAD','POI','JZMD','NDVI','DLMD','POPU','FLOOR']
explainer = shap.TreeExplainer(rfreg)

#numpy.array数组
shap_values = explainer.shap_values(pd_data[cols])

#shap.Explanation对象
shap_values2 = explainer(pd_data[cols])

print(shap_values.shape)

#绘制Summary Plot
shap.summary_plot(shap_values, pd_data[cols])

#绘制heatmap
shap.plots.heatmap(shap_values2)

 

标签:shap,plt,python,备忘,train,test,import,sklearn
From: https://www.cnblogs.com/Vicrooor/p/17890866.html

相关文章

  • Python 变量类型
    变量是存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。变量赋值Python中的变量赋值不需要类型声明。每个变量在内存......
  • Python算法——快速排序
    快速排序(QuickSort)是一种高效的分治排序算法,它选择一个基准元素,将数组分成两个子数组,小于基准的放在左边,大于基准的放在右边,然后递归地排序子数组。快速排序通常比冒泡排序和选择排序更高效,特别适用于大型数据集。本文将详细介绍快速排序的工作原理和Python实现。快速排序的工作原......
  • Python:函数综合案例-黑马ATM
    综合案例:黑马ATM主菜单查询余额效果存取款效果#总额totaltotal=5000000#定义None影响不大,可以不定义name=None#要求客户输入姓名name=input("请输入您姓名:")#菜单提示defmenu():print("-"*19+"主菜单"+"-"*19)print(f"{name},您......
  • Python:数据容器-list(列表)
    列表定义语法:字面量[元素1,元素2,元素3,...]定义变量变量名称=[元素1,元素2,元素3,...]定义空列表变量名称=[]变量名称=list()列表内的每个数据,称之为元素以[]作为标识列表内每个元素用,逗号隔开注意事项:列表可以一次多个数据,且可以为不同数据类型,支持嵌套"......
  • Python:列表的下标索引
    列表的下标(索引):取出特定位置的数据语法:列表[下标索引]列表的下标(索引)-反向反向索引就是从后向前:从-1开始,依次递减(-1、-2、-3...)嵌套列表的下标(索引)列表[内层列表[索引]]#通过下标索引取出对应位置的数据my_list=["itheima",666,True]#列表[下标索引],从前向后从......
  • Python:列表的常用操作方法
    列表上限:2**63、922372036854775807个查询元素查找指定元素在列表的下标,如果找不到,报错ValueError语法:列表.index(元素)插入元素在指定下标位置,插入指定的元素语法:列表.insert(下标,元素)追加元素将指定元素,追加到列表的尾部语法:列表.append(元素)将其他数据容器的内容......
  • Python:列表的循环遍历
    while循环遍历for循环遍历#列表的遍历-while循环遍历deflist_while_func():"""列表的遍历-while循环遍历:return:None"""list1=[21,25,21,23,22,20]index=0whileindex<len(list1):tmp=list1[ind......
  • Python:元组的定义和操作
    1、元组的定义语法:定义元组使用小括号,且使用逗号隔开各个数据元组面量(元素1,元素2,元素3,...)定义元组变量变量名称=(元素1,元素2,元素3,...)定义空元组变量名称=()变量名称=tuple()2、元组的特点元组同列表一样,可以存储多个、不同的数据类的元素(混装)元组一旦定义完......
  • Python中函数的基础定义语法
    1、函数的定义语法:def函数名(传入参数):函数体return返回值2、函数的调用:函数名(参数)3、函数使用步骤:先定义函数后调用函数4、注意事项:参数不需要,可以省略返回值如不需要,可以省略函数必须先定义后使用#定义一个函数,输出相关信息defsay_hi():......
  • Python中函数的传入参数
    函数的传入参数:在函数进行计算的时候,接受外部(调用时)提供数据函数的定义语法:def函数名(传入参数):函数体return返回值函数定义的x和y称之为形式参数(形参),表示函数声明将要使用2个参数参数之间使用逗号进行分隔函数调用的5和5称之为实际参数(形参),表示函数执行时真正使......