基本语法—scaler.fit_transform()、train_test_split()、sklearn.preprocessing.OrdinalEncoder

目录

一、scaler.fit_transform()

 二、train_test_split()

 三、sklearn.preprocessing.OrdinalEncoder


一、scaler.fit_transform()

 我在以前的文章写过,StandardScaler类是一个用来讲数据进行归一化和标准化的类。
而所谓归一化和标准化,即应用下列公式:

使得新的X数据集方差为1,均值为0。

而fit_transform方法是fit和transform的结合,fit_transform(X_train) 意思是找出X_train的和,并应用在X_train上。即fit_transform(partData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该partData进行转换transform,从而实现数据的标准化、归一化等等。

 二、train_test_split()

 基本用法:

X_train,X_test, y_train, y_test =sklearn.model_selection.train_test_split(train_data,train_target,test_size=0.4, random_state=0,stratify=y_train)
  • train_target:所要划分的样本结果
  •  train_data:所要划分的样本特征集
  • test_size:样本占比,如果是整数的话就是样本的数量
  • random_state:是随机数的种子。
  • 随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。

 

来说一下stratify,它是为了保持split前类的分布。比如有1000个数据,750个属于A类,250个属于B类。如果train_test_split(... test_size=0.20, stratify = y_all), 那么split之后数据如下: 
training: 800个数据,其中600个属于A类,15个属于200B类。 
testing: 200个数据,其中150个属于A类,50个属于B类。 用了stratify参数,training集和testing集的类的比例是 A:B= 3:1,等同于split前的比例(750:250)。通常在这种类分布不平衡的情况下会用到stratify。

 三、sklearn.preprocessing.OrdinalEncoder

(*, categories='auto', dtype=<class 'numpy.float64'>)

将分类特征编码为整数数组。该转换器的输入应为整数或字符串之类的数组,表示分类(离散)特征所采用的值。要素将转换为序数整数。这将导致每个要素的一列整数(0到n_categories-1)。

fit(X[, y]):将序数编码器拟合到 X。

 fit_transform(X[, y]):适应数据,然后对其进行转换。

 get_params([deep]):获取此估计器的参数。

 inverse_transform(X):将数据转换回原始表示形式。

 set_params(**参数):设置此估计器的参数。

transform(X):将 X 转换为序号代码。
例如:

import pandas as pd
from sklearn.preprocessing import OrdinalEncoder
X = pd.DataFrame([['male','high'],
                  ['female','high'],
                  ['male','low'],
                  ['female','medium'],
                  ['female','medium'],
                  ['female','low']],
                 columns=['sex','income'])
                 
X = OrdinalEncoder().fit_transform(X)

这个代码为什么输出有问题import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 读取数据集 data = pd.read_csv('adult.csv') # 将数据集中的缺失值用平均值进行填充 data = data.fillna(data.mean()) # 将分类变量进行独热编码 data = pd.get_dummies(data) # 将目标变量进行二元编码 data['income'] = data['income'].apply(lambda x: 1 if x == '>50K' else 0) # 将数据集划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(data.drop('income', axis=1), data['income'], test_size=0.2, random_state=42) # 对数据集进行标准化处理 scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # 使用决策树算法建立分类模型 clf = DecisionTreeClassifier() clf.fit(X_train, y_train) # 对测试集进行预测 y_pred = clf.predict(X_test) # 计算模型的准确率、精确率、召回率和F1值 accuracy = accuracy_score(y_test, y_pred) precision = precision_score(y_test, y_pred) recall = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred) # 输出模型的评估结果 print('Accuracy:', accuracy) print('Precision:', precision) print('Recall:', recall) print('F1 Score:', f1) # 将数据集保存为csv文件 data.to_csv('adult_processed.csv', index=False)
06-04
""" XGBoost房价预测模板 适用于回归任务 """ # 基础库 import pandas as pd import numpy as np # 预处理和评估 from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score from sklearn.preprocessing import StandardScaler # 可视化 import matplotlib.pyplot as plt import seaborn as sns # XGBoost import xgboost as xgb # 1. 数据加载 # 替换为你的数据路径 data = pd.read_csv('F:\房地产\删改.csv') # 显示数据前五行 print("数据预览:") print(data.head(3)) # 2. 数据预处理 # 删除包含缺失值的行(根据实际情况调整处理方式) data = data.dropna() # 分离特征和目标变量(假设目标列名为'price') X = data.drop('房价', axis=1) y = data['房价'] # 处理分类特征(示例) categorical_cols = data['商业营业用房','办公楼','其他用房'] X = pd.get_dummies(X, columns=categorical_cols) # 数据标准化(根据需求选择) scaler = StandardScaler() X = scaler.fit_transform(X) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) # 3. 模型配置 model = xgb.XGBRegressor( objective='reg:squarederror', # 回归任务 n_estimators=1000, # 树的数量 learning_rate=0.01, # 学习率 max_depth=5, # 树的最大深度 subsample=0.8, # 样本采样比例 colsample_bytree=0.8, # 特征采样比例 reg_alpha=0.1, # L1正则化 reg_lambda=1, # L2正则化 random_state=42, early_stopping_rounds=50 # 早停法 ) # 4. 模型训练 model.fit( X_train, y_train, eval_set=[(X_test, y_test)], # 验证集 verbose=10 # 每10轮显示进度 ) # 5. 模型评估 # 预测结果 y_pred = model.predict(X_test) # 计算评估指标 mse = mean_squared_error(y_test, y_pred) rmse = np.sqrt(mse) mae = mean_absolute_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print(f"\n模型评估:") print(f"MSE: {mse:.2f}") print(f"RMSE: {rmse:.2f}") print(f"MAE: {mae:.2f}") print(f"R² Score: {r2:.2f}") # 6. 特征重要性可视化 # feature_importance = model.feature_importances_ # sorted_idx = np.argsort(feature_importance)[::-1] # # plt.figure(figsize=(12, 6)) # plt.title("特征重要性") # sns.barplot(x=feature_importance[sorted_idx][:15], # 显示前15个重要特征 # y=X.columns[sorted_idx][:15] 这个代码疫情结果哪个地方出现了问题,怎样改正这个问题?
03-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值