当前位置: 首页 > news >正文

【Kaggle】练习赛《鲍鱼年龄预测》(上)

前言

上一篇文章,讲解了《肥胖风险的多类别预测》机器学习方面的文章,主要是多分类算法的运用,本文是一个回归的算法,本期是2024年4月份的题目《Regression with an Abalone Dataset》即《鲍鱼年龄预测》,在此分享高手在这个比赛过程的代码。
由于内容比较多,分成两篇来完成,上篇着重 讲解数据探索( EDA) 方面,下篇讲解 建模优化方面。

题目简介

先上一张鲍鱼的图。
abalone
这一段话写得非常棒,我就直接引用了。

🚀 在这个激动人心的探索中,我们深入了解鲍鱼生物学的迷人世界。我们的使命?利用先进的机器学习技术,根据鲍鱼的身体测量结果预测鲍鱼的年龄。
我们的数据集是从对这些海洋软体动物的细致研究和观察中收集的信息宝库。🐚 从外壳尺寸到身体质量,我们拥有解开鲍鱼年龄预测秘密所需的所有工具。
但为什么这个预测任务很重要?鲍鱼的年龄传统上是通过费力的方法来确定的,包括外壳切片和显微镜检查。
🕵️‍♂️ 通过利用现成的物理测量,我们旨在简化这一过程,并提供更快、更高效的替代方案。
当我们开始这段旅程时,我们将深入研究数据集,探索鲍鱼的不同特征与年龄之间的关系。通过分类和回归技术,我们将努力将均方根对数误差(RMSLE)降至最低,并提供准确的预测。📊💡
所以,准备好让自己沉浸在鲍鱼生物学和预测建模的世界中。用决心和创新,让我们一起揭开鲍鱼年龄预测的奥秘!🌊🔍✨

加载库

保证完整性,这部分也写上了。

# 加载库
import warnings as wrn
wrn.filterwarnings('ignore', category = DeprecationWarning) 
wrn.filterwarnings('ignore', category = FutureWarning) 
wrn.filterwarnings('ignore', category = UserWarning) import optuna
import xgboost as xgb
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import GroupKFold
from sklearn.metrics import accuracy_score, classification_report, mean_absolute_error
from sklearn.ensemble import RandomForestRegressor
from sklearn.svm import LinearSVC
from sklearn.preprocessing import RobustScaler
from sklearn.pipeline import make_pipeline
from sklearn.decomposition import PCA
from sklearn.model_selection import cross_val_score
from sklearn.metrics import make_scorer, accuracy_score, median_absolute_error
from imblearn.over_sampling import RandomOverSampler
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import mean_squared_error, r2_score
import lightgbm as lgb
import numpy as np
from scipy import stats

加载数据

# 加载所有数据
train_data = pd.read_csv("/kaggle/input/playground-series-s4e4/train.csv")
test_data = pd.read_csv("/kaggle/input/playground-series-s4e4/test.csv")
original_data = pd.read_csv('/kaggle/input/abalone-dataset/abalone.csv')

这里特别说明一下,这个original_data 是原始数据集,即来自于UCI。参考链接为:https://archive.ics.uci.edu/dataset/1/abalone

查看数据

y = train_data['Rings'] 
id_test = test_data['id']train_data = train_data.drop(['id'], axis = 1)
test_data = test_data.drop(['id'], axis = 1)train_data.columns = original_data.columns
test_data.columns = original_data.drop(['Rings'], axis=1).columns
train_data.head()
SexLengthDiameterHeightWhole weightShucked weightViscera weightShell weightRings
0F0.5500.4300.1500.77150.32850.14650.240011
1F0.6300.4900.1451.13000.45800.27650.320011
2I0.1600.1100.0250.02100.00550.00300.00506
3M0.5950.4750.1500.91450.37550.20550.250010
4I0.5550.4250.1300.78200.36950.16000.19759

训练集情况

# 查看数据结构num_train_rows, num_train_columns = train_data.shapenum_test_rows, num_test_columns = test_data.shapenum_original_rows, num_original_columns = original_data.shapeprint("Training Data:")
print(f"Number of Rows: {num_train_rows}")
print(f"Number of Columns: {num_train_columns}\n")print("Test Data:")
print(f"Number of Rows: {num_test_rows}")
print(f"Number of Columns: {num_test_columns}\n")print("Original Data:")
print(f"Number of Rows: {num_original_rows}")
print(f"Number of Columns: {num_original_columns}")

Training Data:
Number of Rows: 90615
Number of Columns: 9

Test Data:
Number of Rows: 60411
Number of Columns: 8

Original Data:
Number of Rows: 4177
Number of Columns: 9

# 查看重复缺失等情况missing_values_train = pd.DataFrame({'Feature': train_data.columns,'[TRAIN] No. of Missing Values': train_data.isnull().sum().values,'[TRAIN] % of Missing Values': ((train_data.isnull().sum().values)/len(train_data)*100)})missing_values_test = pd.DataFrame({'Feature': test_data.columns,'[TEST] No.of Missing Values': test_data.isnull().sum().values,'[TEST] % of Missing Values': ((test_data.isnull().sum().values)/len(test_data)*100)})missing_values_original = pd.DataFrame({'Feature': original_data.columns,'[ORIGINAL] No.of Missing Values': original_data.isnull().sum().values,'[ORIGINAL] % of Missing Values': ((original_data.isnull().sum().values)/len(original_data)*100)})unique_values = pd.DataFrame({'Feature': train_data.columns,'No. of Unique Values[FROM TRAIN]': train_data.nunique().values})feature_types = pd.DataFrame({'Feature': train_data.columns,'DataType': train_data.dtypes})merged_df = pd.merge(missing_values_train, missing_values_test, on='Feature', how='left')
merged_df = pd.merge(merged_df, missing_values_original, on='Feature', how='left')
merged_df = pd.merge(merged_df, unique_values, on='Feature', how='left')
merged_df = pd.merge(merged_df, feature_types, on='Feature', how='left')merged_df
Feature[TRAIN] No. of Missing Values[TRAIN] % of Missing Values[TEST] No.of Missing Values[TEST] % of Missing Values[ORIGINAL] No.of Missing Values[ORIGINAL] % of Missing ValuesNo. of Unique Values[FROM TRAIN]DataType
0Sex00.00.00.000.03object
1Length00.00.00.000.0157float64
2Diameter00.00.00.000.0126float64
3Height00.00.00.000.090float64
4Whole weight00.00.00.000.03175float64
5Shucked weight00.00.00.000.01799float64
6Viscera weight00.00.00.000.0979float64
7Shell weight00.00.00.000.01129float64
8Rings00.0NaNNaN00.028int64

数据无重复、无缺失

train_data.describe().T
countmeanstdmin25%50%75%max
Length90615.00.5170980.1182170.07500.44500.54500.60000.8150
Diameter90615.00.4016790.0980260.05500.34500.42500.47000.6500
Height90615.00.1354640.0380080.00000.11000.14000.16001.1300
Whole weight90615.00.7890350.4576710.00200.41900.79951.06752.8255
Shucked weight90615.00.3407780.2044280.00100.17750.33000.46301.4880
Viscera weight90615.00.1694220.1009090.00050.08650.16600.23250.7600
Shell weight90615.00.2258980.1302030.00150.12000.22500.30501.0050
Rings90615.09.6967943.1762211.00008.00009.000011.000029.0000
数据集特征说明
列名完整含义详细说明
‘id’id鲍鱼的唯一号
‘Sex’性别指示鲍鱼性别的分类变量。可能的值为M(男性)、F(女性)和I(婴儿)
‘Length’长度表示最长外壳测量值的连续变量,单位为毫米。
‘Diameter’直径表示外壳直径的连续变量,垂直于长度测量,单位为毫米。
‘Height’高度表示鲍鱼高度的连续变量,鲍鱼壳中有肉,单位为毫米。
‘Whole_weight’整体重量表示鲍鱼整体重量的连续变量,单位为克。
‘Shucked_weight’去皮重量表示肉(去皮后)重量的连续变量,单位为克。
‘Viscera_weight’内脏重量表示肠道重量(出血后)的连续变量,单位为克。
‘Shell_weight’贝壳重量表示贝壳重量(干燥后)的连续变量,单位为克。
‘Rings’以年为单位表示鲍鱼年龄的整数变量。+1.5的值表示实际年龄(以年为单位)。

该数据集为大量鲍鱼标本提供了一套全面的物理测量数据。包括分类变量和连续变量在内的各种特征使该数据集非常适合各种预测建模任务,特别是基于这些容易获得的物理特征预测鲍鱼年龄。目标变量Rings表示鲍鱼壳中的环数,这是动物年龄的代表。预测鲍鱼的年龄是一项具有挑战性的任务,因为传统的环数方法既耗时又乏味。因此,该数据集提供了一个机会,可以探索使用可用的物理测量来估计鲍鱼年龄的替代、更有效的方法。

数据探索 (EDA)

numerical_variables = ['Length', 'Diameter', 'Height', 'Whole weight', 'Shucked weight', 'Viscera weight', 'Shell weight']
target_variable = 'Rings'
categorical_variables = ['Sex']

特征分为数值型和分类型,本题 数据结构相对比较简单

数值型特征分布图

# 分析数值型特征# Define a custom color palette
custom_palette = ['#28ae80', '#d3eb0c', '#ff9a0b'
]# Add 'Dataset' column to distinguish between train and test data
train_data['Dataset'] = 'Train'
test_data['Dataset'] = 'Test'
original_data['Dataset'] = 'Original'variables = [col for col in train_data.columns if col in numerical_variables]# Function to create and display a row of plots for a single variable
def create_variable_plots(variable):sns.set_style('whitegrid')fig, axes = plt.subplots(1, 2, figsize=(12, 4))# Box plotplt.subplot(1, 2, 1)if variable == 'Whole weight.1' or variable == 'Whole weight.2':sns.boxplot(data=pd.concat([train_data, test_data]), x=variable, y="Dataset", palette=custom_palette)else:sns.boxplot(data=pd.concat([train_data, test_data, original_data.dropna()]), x=variable, y="Dataset", palette=custom_palette)plt.xlabel(variable)plt.title(f"Box Plot for {variable}", fontweight='bold', fontfamily='serif')# Separate Histogramsplt.subplot(1, 2, 2)if variable =='Whole weight.1' or variable =='Whole weight.2':sns.histplot(data=train_data, x=variable, color=custom_palette[0], kde=True, bins=30, label="Train")sns.histplot(data=test_data, x=variable, color=custom_palette[1], kde=True, bins=30, label="Test")else:sns.histplot(data=train_data, x=variable, color=custom_palette[0], kde=True, bins=30, label="Train")sns.histplot(data=test_data, x=variable, color=custom_palette[1], kde=True, bins=30, label="Test")sns.histplot(data=original_data.dropna(), x=variable, color=custom_palette[2], kde=True, bins=30, label="Original")plt.xlabel(variable)plt.ylabel("Frequency")plt.title(f"Histogram for {variable} [TRAIN, TEST & ORIGINAL]", fontweight='bold', fontfamily='serif')plt.legend()# Adjust spacing between subplotsplt.tight_layout()# Show the plotsplt.show()# Perform univariate analysis for each variable
for variable in variables:create_variable_plots(variable)# Drop the 'Dataset' column after analysis
train_data.drop('Dataset', axis=1, inplace=True)
test_data.drop('Dataset', axis=1, inplace=True)
original_data.drop('Dataset', axis=1, inplace=True)

1
2
3
45
6
7

分类型特征分布图
# 分析分类型特征# Define a custom color palette for categorical features
categorical_palette = ['#33638d', '#28ae80', '#d3eb0c', '#ff9a0b']# List of categorical variables
categorical_variables = [col for col in categorical_variables]# Function to create and display a row of plots for a single categorical variable
def create_categorical_plots(variable):sns.set_style('whitegrid')fig, axes = plt.subplots(1, 2, figsize=(12, 4))# Pie Chartplt.subplot(1, 2, 1)train_data[variable].value_counts().plot.pie(autopct='%1.1f%%', colors=categorical_palette, wedgeprops=dict(width=0.3), startangle=140)plt.title(f"Pie Chart for {variable}", fontweight='bold', fontfamily='serif')# Bar Graphplt.subplot(1, 2, 2)sns.countplot(data=pd.concat([train_data, test_data, original_data.dropna()]), x=variable, palette=categorical_palette)plt.xlabel(variable)plt.ylabel("Count")plt.title(f"Bar Graph for {variable} [TRAIN, TEST & ORIGINAL]", fontweight='bold', fontfamily='serif')# Adjust spacing between subplotsplt.tight_layout()# Show the plotsplt.show()# Perform univariate analysis for each categorical variable
for variable in categorical_variables:create_categorical_plots(variable)

在这里插入图片描述

目标特征分布图
# 分析目标特征target_palette = ['#3b528b','#1fa088','#9ee742','#d6f015','#e0d20a','#ffaa08','#ff522f','#d7043d']fig, axes = plt.subplots(1, 2, figsize=(12, 4))# Box plot
plt.subplot(1, 2, 1)
sns.boxplot(data=train_data, x=target_variable, palette=target_palette)
plt.xlabel(variable)
plt.title(f"Box Plot for {target_variable} [TRAIN]", fontweight='bold', fontfamily='serif')# Separate Histograms
plt.subplot(1, 2, 2)
sns.histplot(data=train_data, x=target_variable, color=target_palette[1], kde=True, bins=30, label="Train")
plt.xlabel(variable)
plt.ylabel("Frequency")
plt.title(f"Histogram for {target_variable} [TRAIN]", fontweight='bold', fontfamily='serif')
plt.legend()# Adjust spacing between subplots
plt.tight_layout()# Show the plots
plt.show()

在这里插入图片描述
数据集“环”表示鲍鱼壳中的环的数量,这是动物年龄的代表。该变量的值范围从1到29,根据具体问题和建模方法,可以将其视为连续变量和分类变量。

  1. 连续变量法:
  • 由于“环”变量代表鲍鱼的年龄,因此可以将其视为连续变量。
  • 这意味着这项任务可以作为一个回归问题来处理,其中的目标是根据可用的物理测量来预测每只鲍鱼的确切环数(年龄)。
  • 可以使用线性回归和决策树等建模技术来学习特征与连续“环”目标之间的关系。
  1. 分类变量法:
  • 或者,“环”变量可以被视为一个分类变量,其中不同的值(1到29)代表不同的年龄组或类别。
  • 在这种情况下,该任务可以被定义为一个分类问题,其中的目标是根据物理测量来预测每只鲍鱼的年龄组(类别)。
  • 可以使用逻辑回归、决策树或随机森林等建模技术来学习特征和分类“环”目标之间的映射。

连续变量法或分类变量法之间的选择取决于问题的具体要求和模型的预期用途。如果目标是预测鲍鱼的确切年龄,那么连续变量法可能更适合。然而,如果重点是将鲍鱼分为不同的年龄组,那么分类变量方法可能更合适。

我将探索这两种方法,并比较它们的性能,以确定为给定问题建模“环”变量的最佳方式。

偏度条形图
# 测量和比较所有特征之间的偏度,并使用条形图进行比较skew_merged = pd.DataFrame(data = train_data[numerical_variables].skew(), columns = ['Skewness'])
skew_sorted = skew_merged.sort_values(ascending = False, by = 'Skewness')sns.barplot(x=skew_sorted.Skewness, y=skew_sorted.index, palette='viridis')
plt.title('Skewness in Explanatory Variables', fontweight='bold', fontfamily='serif')
plt.xlabel('Value')
plt.ylabel('Skewness')
plt.show()

在这里插入图片描述

相关性热力图
# 计算相关性的热力图
corr_train = train_data[numerical_variables].corr()
corr_test = test_data[numerical_variables].corr()# Create masks for the upper triangle
mask_train = np.triu(np.ones_like(corr_train, dtype=bool))
mask_test = np.triu(np.ones_like(corr_test, dtype=bool))# Set the text size and rotation
annot_kws = {"size": 8, "rotation": 45}# Generate heatmaps for train_data
plt.figure(figsize=(18, 7))
plt.subplot(1, 2, 1)
ax_train = sns.heatmap(corr_train, mask=mask_train, cmap='viridis', annot=True,square=True, linewidths=.5, xticklabels=1, yticklabels=1, annot_kws=annot_kws)
plt.title('Correlation Heatmap - Train Data', fontweight='bold', fontfamily='serif')# Generate heatmaps for test_data
plt.subplot(1, 2, 2)
ax_test = sns.heatmap(corr_test, mask=mask_test, cmap='viridis', annot=True,square=True, linewidths=.5, xticklabels=1, yticklabels=1, annot_kws=annot_kws)
plt.title('Correlation Heatmap - Test Data', fontweight='bold', fontfamily='serif')# Adjust layout
plt.tight_layout()# Show the plots
plt.show()

在这里插入图片描述

特征分布散点图
fig, axes = plt.subplots(2, 4, figsize=(16, 8))
axes = axes.flatten()for i, feature in enumerate(numerical_variables):axes[i].scatter(train_data[feature], train_data['Rings'], s=5)axes[i].set_xlabel(feature)axes[i].set_ylabel('Rings')axes[i].set_title(f'Rings vs {feature}')plt.tight_layout()
plt.show()

在这里插入图片描述
散点图显示,物理测量值(长度、直径、高度、重量)与代表鲍鱼年龄的环数之间存在正相关关系。这表明,更大、更重的鲍鱼往往更老。

为了量化关系的强度,让我们计算“环”和连续特征之间的Pearson相关系数:

相关系数
correlations = train_data[numerical_variables + ['Rings']].corr()
print(correlations['Rings'])

Length 0.623786
Diameter 0.636832
Height 0.665772
Whole weight 0.617274
Shucked weight 0.515067
Viscera weight 0.588954
Shell weight 0.694766
Rings 1.000000
Name: Rings, dtype: float64

相关系数表明,所有物理测量值与环的数量都具有中等强度的正相关性,其中壳体重量具有最高的相关性(0.694766)。

性别(雄性、雌性和幼年)对鲍鱼的年龄分布是否存在差异?

性别对年龄的影响
# Bar plot to show the distribution of Rings for each Sex category
plt.figure(figsize=(8, 6))
train_data.groupby('Sex')['Rings'].mean().plot(kind='bar')
plt.xlabel('Sex')
plt.ylabel('Mean Rings')
plt.title('Mean Rings by Sex')
plt.show()

在这里插入图片描述
条形图:按性别划分的平均环

条形图显示了每个性别类别的戒指平均数量。
我们可以看到,雌性鲍鱼的平均环数高于雄性和幼年鲍鱼。

# Bar plot to show the distribution of Rings for each Sex category
plt.figure(figsize=(8, 6))
train_data.groupby('Sex')['Rings'].mean().plot(kind='bar')
plt.xlabel('Sex')
plt.ylabel('Mean Rings')
plt.title('Mean Rings by Sex')
plt.show()

在这里插入图片描述
盒图:按性别划分的环分布

盒图提供了《指环王》在性别类别中分布的更详细比较。
该图显示,雌性鲍鱼的环的中位数和四分位间距(IQR)略高于雄性和幼年鲍鱼。
对于所有类别,似乎也存在一些具有非常高环值的异常值。

建模
准备数据
dd={"M":0,"F":1,"I":2}
train_data['Sex'] = train_data['Sex'].map(dd)
text_data['Sex'] = test_data['Sex'].map(dd)
X=train.drop(["Rings"],axis=1)
加载各类算法
from sklearn.linear_model import LogisticRegression,LinearRegression
from sklearn.svm import SVC
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB, BernoulliNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.gaussian_process import GaussianProcessClassifier
from sklearn.ensemble import RandomForestRegressor, ExtraTreesClassifier, GradientBoostingClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from catboost import CatBoostClassifier
from sklearn.ensemble import HistGradientBoostingClassifier
from xgboost import XGBRegressor
from lightgbm import LGBMRegressor
from catboost import CatBoostRegressor
from sklearn.ensemble import RandomForestClassifier, ExtraTreesClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier# Set a seed for reproducibility
seed = 42# Initialize all the classification models in the requested format
log_reg = LogisticRegression(random_state=seed, max_iter=1000000)
svc = SVC(random_state=seed, probability=True)
lda = LinearDiscriminantAnalysis()
gnb = GaussianNB()
bnb = BernoulliNB()
knn = KNeighborsClassifier()
gauss = GaussianProcessClassifier(random_state=seed)
rf = RandomForestRegressor(random_state=seed)
et = ExtraTreesClassifier(random_state=seed)
xgb = XGBRegressor(random_state=seed)
lgb = LGBMRegressor(random_state=seed, verbosity=0)
dart = LGBMClassifier(random_state=seed, boosting_type='dart')
cb = CatBoostRegressor(random_state=seed, verbose=0)
gb = GradientBoostingClassifier(random_state=seed)
hgb = HistGradientBoostingClassifier(random_state=seed)
lr = LinearRegression()
rf_classifier = RandomForestClassifier(random_state=seed)
et_classifier = ExtraTreesClassifier(random_state=seed)
xgb_classifier = XGBClassifier(random_state=seed)
lgb_classifier = LGBMClassifier(random_state=seed, verbosity=0)
cb_classifier = CatBoostClassifier(random_state=seed, verbose=0)
选出合适算法
import warnings
# Ignore all warnings
warnings.filterwarnings("ignore")from sklearn.metrics import mean_squared_log_error
import numpy as npdef rmsle(y_true, y_pred):return np.sqrt(mean_squared_log_error(y_true, y_pred))# Fit the models and calculate RMSLE
models = [xgb, lgb, cb, rf]
rmsle_scores = []for model in models:X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=42)model.fit(X_train, y_train)y_pred = model.predict(X_test)score = rmsle(y_test, y_pred)rmsle_scores.append(score)# Create a DataFrame with the RMSLE scores
rmsle_df = pd.DataFrame(data=rmsle_scores, columns=['RMSLE'])
rmsle_df.index = ['xgb', 'lgb', 'cb', 'rf']
rmsle_df = rmsle_df.sort_values(by='RMSLE', ascending=False)# Create a bar graph using Seaborn
plt.figure(figsize=(12, 6))
barplot = sns.barplot(x='RMSLE', y=rmsle_df.index, data=rmsle_df, palette='viridis')# Add values on the bars with larger and bolder font
for index, value in enumerate(rmsle_df['RMSLE']):barplot.text(value + 0.001, index, str(round(value, 5)), ha='left', va='center', fontsize=12, fontweight='bold')plt.title("Models' RMSLE Scores", fontweight='bold', fontfamily='serif')
plt.xlabel('RMSLE')
plt.ylabel('Models')
plt.show()

在这里插入图片描述

小结

通上述EDA和Modeling 后,对数值结果有了一个初步的了解。不同的模型的结果情况有了一个最基础的 Baseline ,如何提高比赛成绩,将在下一篇做详细的说明。

相关文章:

【Kaggle】练习赛《鲍鱼年龄预测》(上)

前言 上一篇文章,讲解了《肥胖风险的多类别预测》机器学习方面的文章,主要是多分类算法的运用,本文是一个回归的算法,本期是2024年4月份的题目《Regression with an Abalone Dataset》即《鲍鱼年龄预测》,在此分享高手…...

Ruby 之交租阶段信息生成

题目 我看了一下,这个题目应该不是什么机密,所以先放上来了。大概意思是根据合同信息生成交租阶段信息。 解答 要求是要使用 Ruby 生成交租阶段信息,由于时间比较仓促,变量名那些就用得随意了些。要点主要有下面这些&#xff1a…...

RUST语言值所有权之内存复制与移动

1.RUST中每个值都有一个所有者,每次只能有一个所有者 String::from函数会为字符串hello分配一块内存 内存示例如下: 在内存分配前调用s1正常输出 在分配s1给s2后调用报错 因为s1分配给s2后,s1的指向自动失效 s1被move到s2 s1自动释放 字符串克隆使用...

【Django学习笔记(三)】BootStrap介绍

BootStrap介绍 前言正文1、BootStrap 快速了解2、初识BootStrap2.1 下载地址2.2 创建目录2.3 引入BootStrap2.4 使用BootStrap 3、BootStrap 组件&样式3.1 导航条3.2 栅格系统3.3 container3.3.1 container3.3.2 container-fluid 3.4 面板3.5 媒体对象3.6 分页3.7 图标3.7.…...

ClickHouse开发相关(UDAF)

ClickHouse开发相关(UDAF) ClickHouse介绍 ClickHouse是一个开源、高性能的列式 OLAP 数据库管理系统,用于使用 SQL 进行实时分析。 为什么需要ClickHouse UDAF? ClickHouse中已存在了许多聚合函数,绝大多数情况下已经覆盖我们的需求,但是有时候我们仍然需要自定义函数…...

MySql并发事务问题

事务 事务概念: 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 事务的特性:ACID: 小…...

Windows下Docker创建Mysql5.7

安装 下载镜像,注意,要带版本号 docker pull mysql:5.7 等下载完成执行命令: 错误命令1,直接Windows下路径: docker run --name mysql57 --restartalways -p 3306:3306 -v F:/mysqldata/data57/log:/var/log/mysql…...

Redis(性能管理、主从复制、哨兵模式)概述及部署

目录 一、性能管理 1、查看Redis内存使用 2、内存碎片率 3、跟踪内存碎片率 4、内存使用率 5、内回收key 二、Redis集群有三种模式 三、Redis主从复制 1、主从复制的概念 2、主从复制的作用 3、主从复制的流程 4、搭建Redis主从复制 1.环境准备 2.安装Redis&#…...

LabVIEW挖坑指南

一、挖坑指南 1.1、输出变量放在条件框内 错误写法: 现象:如果没进入对应的分支,输出为默认值 正常写法: 让每个分支输出的值都在预料之内。 1.2、统计耗时不准 错误写法 现象:统计出来的耗时是2000ms 正常写法&a…...

docker容器环境安装记录(MAC M1)(完善中)

0、背景 在MAC M1中搭建商城项目环境时,采用docker统一管理开发工具,期间碰到了许多环境安装问题,做个总结。 1、安装redis 在宿主机新建redis.conf文件运行创建容器命令,进行容器创建、端口映射、文件挂载、以指定配置文件启动…...

Linux 常用命令(持续更新中...)

1. ls 查看文件列表命令 语法: ls [-a -l -h] [Linux路径] -a -l -h 是可选的选项 (-h需配合-l命令一起使用)Linux路径是此命令可选的参数 ls #查看当前目录所有非隐藏文件(平铺方式显示) ls -a #查看当前目录下所有文件 …...

xss.pwnfunction-Jefff

在eval中可以直接执行命令所以直接把"直接闭合在结尾再加上一个"因为后面的"没闭和会报错 ?jeffa";alert(1);" 或 ?jeffa"-alert(1)-" -是分隔符...

java——文件上传

一、文件上传——简介 文件上传的简介:文件上传是指将本地计算机中的文件传输到网络上的服务器或另一台计算机上的过程。在 Web 开发中,文件上传通常指的是将用户通过 Web 页面提交的文件(如图像、文档、音频、视频等)传输到服务器…...

RCE(远程命令执行)漏洞详解

漏洞描述 RCE(remote command/code execute,远程命令执行)漏洞 远程代码执行 (RCE) 攻击是指攻击者可以在一个组织的计算机或网络上运行恶意代码。执行攻击者控制的代码的能力可用于各种目的,包括部署额外的恶意软件或窃取敏感数据。 漏洞原理 远程代…...

K8S - Deployment 的版本回滚

当前状态 先看deployment rootk8s-master:~# kubectl get deploy -o wide --show-labels NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES …...

53 v-bind 和 v-model 的实现和区别

前言 这个主要的来源是 偶尔的情况下 出现的问题 就比如是 el-select 中选择组件之后, 视图不回显, 然后 model 不更新等等 这个 其实就是 vue 中 视图 -> 模型 的数据同步, 我们通常意义上的处理一般是通过 模型 -> 数据 的数据同步, 比如 我们代码里面更新了 model.…...

VMware-16.0配置虚拟机网络模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、为什么要配置网络?二、配置步骤1.检查VMware服务2.进入配置页面3.添加网络模式1.Bridge2.NAT3.Host-only 4.DHCP租约5.静态IP 三、使用总结 前言…...

element-ui badge 组件源码分享

今日简单分享 badge 组件的源码实现,主要从以下两个方面: 1、badge 组件页面结构 2、badge 组件属性 一、badge 组件页面结构 二、badge 组件属性 补充几个标签的用途: sub:下标、sup:上标、var 变量 代码如下&am…...

MySQL中日期有关函数

本次记录了获取日期时间的多种方式,还有日期和字符串之间的转换,以及加减日期的操作。 获取时间 # 1.获取当前时间(年月日时分秒格式) select now();# 2.获取当前时间(年月日格式) select curdate();# 3.获取当前时间(时分秒格式) select curtime();# 4.…...

jdbc工具类

jdbc 工具类,具体见下面代码,直接可以用。 /*** version 1.0* descpription: jdbc工具类* date 2024/4/6*/ public class JDBCUtils {private static final String URL "jdbc:mysql://127.0.0.1:3306/mybatis";private static final String …...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言:多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

无法与IP建立连接,未能下载VSCode服务器

如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...