网站做强制访问控制,网站网站是怎么建设的,怎么做网络平台,什么叫域名#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能#xff01; #x1f31f;博客的简介#xff08;文章目录#xff09; 目录 背景数据说明数据来源思考 附录数据预处理导入包以及数据读取数据预览数据处理 相关性分析聚类分析数据处理确定聚类数建立k均值聚类模型 … 欢迎来到 我的博客 —— 探索技术的无限可能 博客的简介文章目录 目录 背景数据说明数据来源思考 附录数据预处理导入包以及数据读取数据预览数据处理 相关性分析聚类分析数据处理确定聚类数建立k均值聚类模型 多元线性回归模型检测多重共线性主成分分析建立多元线性回归模型残差项检验模型预测 随机森林建立模型参数优化模型预测 背景
蓝莓在全球范围内备受欢迎其独特的风味和丰富的营养价值令消费者为之倾倒。蓝莓生长对适宜气候和土壤的依赖因此主要分布于北美、欧洲、澳洲等地区。
野生蓝莓养殖目前正处于蓬勃发展的阶段吸引了越来越多的投资者和农户投身其中。全球对健康食品的需求不断增加野生蓝莓以其天然的营养价值和丰富的抗氧化物质而备受瞩目。然而养殖野生蓝莓也面临一系列挑战包括气候不稳定、疾病威胁和市场价格波动。因此成功的野生蓝莓养殖需要不断的创新和可持续的农业实践以满足日益增长的全球市场需求。
蓝莓是多年生开花植物浆果呈蓝色或紫色。它们被归类于越橘属中的蓝越橘科。越橘还包括小红莓、山桑子、胡越橘和马德拉蓝莓。商业蓝莓–野生低丛和栽培高丛–均原产于北美洲。高丛品种在 20 世纪 30 年代引入欧洲。
蓝莓通常是匍匐灌木高度从 10 厘米4 英寸到 4 米13 英尺不等。在蓝莓的商业生产中生长在低矮灌木丛中、浆果较小、豌豆大小的品种被称为 “低丛蓝莓”与 野生 同义而生长在较高、栽培灌木丛中、浆果较大的品种被称为 “高丛蓝莓”。加拿大是低丛蓝莓的主要生产国而美国生产的高丛蓝莓约占全球供应量的 40%。 数据说明
字段说明Clonesize*蓝莓克隆平均大小,单位 m 2 m^2 m2Honeybee蜜蜂密度单位 蜜蜂 / m 2 / 分钟 蜜蜂/m^2/分钟 蜜蜂/m2/分钟 Bumbles大型蜜蜂密度单位 大型蜜蜂 / m 2 / 分钟 大型蜜蜂/m^2/分钟 大型蜜蜂/m2/分钟 Andrena安德烈纳蜂密度单位 安德烈纳蜂 / m 2 / 分钟 安德烈纳蜂/m^2/分钟 安德烈纳蜂/m2/分钟 Osmia钥匙蜂密度单位 钥匙蜂 / m 2 / 分钟 钥匙蜂/m^2/分钟 钥匙蜂/m2/分钟 MaxOfUpperTRange花期内最高温带日平均气温的最高记录,单位 ∘ C {^{\circ}C} ∘CMinOfUpperTRange花期内最高温带日平均气温的最低记录,单位 ∘ C {^{\circ}C} ∘CAverageOfUpperTRange花期内最高温带日平均气温,单位 ∘ C {^{\circ}C} ∘CMaxOfLowerTRange花期内最低温带日平均气温的最高记录,单位 ∘ C {^{\circ}C} ∘CMinOfLowerTRange花期内最低温带日平均气温的最低记录,单位 ∘ C {^{\circ}C} ∘CAverageOfLowerTRange花期内最低温带日平均气温,单位 ∘ C {^{\circ}C} ∘CRainingDays花期内降雨量大于 0 的日数总和,单位天AverageRainingDays花期内降雨日数的平均值,单位天fruitset果实集fruitmass果实质量seeds种子数
注 Clonesize 表示每个蓝莓克隆株的平均占地面积大小。 蓝莓克隆(Blueberry clone)指的是蓝莓的克隆体。蓝莓繁殖和种植主要有两种方式:
种子育种。从蓝莓果实中提取种子,播种育苗。这种方式育出来的蓝莓植株遗传特征会有很大变异。克隆繁殖。选取优良品种蓝莓母株,通过组织培养等焉条繁殖出基因特征高度一致的克隆蓝莓株。这种子植出来的蓝莓园,每个蓝莓株的性状和产量会趋于一致。 所以蓝莓克隆就指的是通过无性繁殖方式培育出来的蓝莓株。整个蓝莓园被同一个蓝莓品种的克隆株占满。
数据来源
https://www.kaggle.com/competitions/playground-series-s3e14/data
思考
蓝莓克隆大小与基因表达、气候条件、土壤特性等因素有关。气温对蓝莓生长有显著影响尤其在花芽形成和果实发育阶段。降雨对蓝莓生长的影响主要体现在水分管理上。机器学习预测模型在农业领域能够有效预测作物产量、病虫害发生以及土壤属性等。
蓝莓克隆大小相关分析可以通过统计分析和数据可视化探讨蓝莓克隆平均大小Clonesize与其他因素之间的关系 基因表达研究表明蓝莓VcLon1基因的表达与植株抗旱性有关。该基因在不同组织中的表达量不同且干旱条件下其转录水平显著提高可能与植物适应环境压力的能力有关。 气候条件温度和光照是影响蓝莓生长的关键气象因素。适宜的温度促进根系发展而充足的日照则有利于光合作用和花芽的形成。 土壤特性土壤pH值对蓝莓的生长至关重要。土壤pH值过高或过低都会限制蓝莓的生长因此需通过改良土壤来优化蓝莓的生长条件。 水分管理适量的降雨有助于蓝莓生长但过多则可能导致营养过剩和根系疾病。合理的灌溉策略对于维持蓝莓正常生长周期非常重要。 授粉活动蓝莓的花期授粉活动也会影响果实的产量和质量。蜜蜂等传粉昆虫的活跃度直接影响授粉效率和果实的成熟。
气温与蓝莓生长的关系可以使用最高温带日平均气温MaxOfUpperTRange、MinOfUpperTRange、AverageOfUpperTRange和最低温带日平均气温MaxOfLowerTRange、MinOfLowerTRange、AverageOfLowerTRange等气象数据分析它们与蓝莓果实集fruitset、果实质量fruitmass以及种子数seeds之间的关联 生长发育在一定范围内气温升高可以促进蓝莓的生长发育。但是超过最适温度范围会导致生长受阻。 花芽形成适宜的温度有利于花芽的形成而不恰当的低温可能会造成来年减产。 果实发育较高的温度可以加速果实的发育使果实更大成熟期提前。 种子发育变温处理可以提高种子的萌芽率说明温度波动对蓝莓种子的萌发有积极影响。 光合作用温度对蓝莓叶片的光合作用有显著影响适宜的温度可以增加CO2吸收率提高光合效率。
降雨对蓝莓生长的影响使用降雨数据RainingDays、AverageRainingDays可以研究降雨对蓝莓的生长和生产是否有影响 水分需求蓝莓对水分的需求较为严格过多的降雨会导致营养过剩和果实品质下降。 涝害问题蓝莓不耐涝持续降雨可能引起根部病害影响植株健康。 灌溉管理科学的灌溉管理是保证蓝莓良好生长的关键应根据降雨量和土壤湿度适时调整灌溉计划。 果实品质适度降雨有利于提升蓝莓果实的水溶性总糖含量改善口感而过量降雨则会稀释果实中的糖分降低甜度。 枝叶生长雨水过多时蓝莓表现出枝叶徒长这可能会影响光合作用的效率和能量分配。
机器学习预测模型在农业领域的应用预测蓝莓克隆大小、果实集、果实质量或种子数等目标变量 土壤分析优化利用机器学习模型分析土壤数据预测土壤质量并提供改进建议以实现精准施肥和灌溉。 病虫害监测防控结合图像识别技术和预测模型监测并预测农田中可能发生的病虫害制定防控方案。 收割智能化应用物体识别技术识别成熟粮食引入自动化收割装置完成收割提高效率和减少损失。 产量预测模型通过分析历史数据建立预测模型预估当前农田的产量为仓储管理和销售策略提供依据。 数据整合决策支持将不同来源的数据整合构建全面的信息网络为农民提供实时的决策支持。
附录 数据预处理 相关性分析 聚类分析 回归模型 随机森林
数据预处理
导入包以及数据读取
# 导入需要的库
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import scipy.stats as stats
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import RandomizedSearchCV
# 读取数据
train_data pd.read_csv(train.csv)
test_data pd.read_csv(test.csv)数据预览
查看数据维度
print(训练集纬度)
print(train_data.shape)
print(-*50)
print(测试集纬度:)
print(test_data.shape)查看数据信息
print(训练集信息)
print(train_data.info())
print(-*50)
print(测试集信息:)
print(test_data.info())查看各列缺失值
print(训练集信息缺失情况)
print(train_data.isna().sum())
print(-*50)
print(测试集信息缺失情况:)
print(test_data.isna().sum())查看重复值
print(训练集信息重复情况)
print(train_data.duplicated().sum())
print(-*50)
print(测试集信息重复情况:)
print(test_data.duplicated().sum())数据处理
# 删除ID列
train_data.drop([id],axis1,inplaceTrue)
test_data.drop([id],axis1,inplaceTrue)相关性分析
# 计算相关系数矩阵
correlation_matrix train_data.corr()
# 绘制热图来可视化相关性
plt.figure(figsize(20,15))
sns.heatmap(correlation_matrix, annotTrue, cmapBlues, fmt.2f)
plt.title(Correlation Matrix of Variables)
plt.show()聚类分析
数据处理
# 选择所有变量进行聚类
x_cluster train_data.copy()
# 对数据进行标准化
scaler StandardScaler()
x_scaled scaler.fit_transform(x_cluster)确定聚类数
# 使用肘部法则来确定最佳聚类数
inertia []
silhouette_scores []
k_range range(2, 11)
for k in k_range:kmeans KMeans(n_clustersk, random_state10).fit(x_scaled)inertia.append(kmeans.inertia_)silhouette_scores.append(silhouette_score(x_scaled, kmeans.labels_))plt.figure(figsize(15,5))plt.subplot(1, 2, 1)
plt.plot(k_range, inertia, markero)
plt.xlabel(Number of clusters)
plt.ylabel(Inertia)
plt.title(Elbow Method For Optimal k)plt.subplot(1, 2, 2)
plt.plot(k_range, silhouette_scores, markero)
plt.xlabel(Number of clusters)
plt.ylabel(Silhouette Score)
plt.title(Silhouette Score For Each k)plt.tight_layout()
plt.show()建立k均值聚类模型
# 执行K-均值聚类选择4个聚类
kmeans_final KMeans(n_clusters4, random_state15)
kmeans_final.fit(x_scaled)
# 获取聚类标签
cluster_labels kmeans_final.labels_
# 将聚类标签添加到原始数据中以进行分析
train_data_clustered train_data.copy()
train_data_clustered[Cluster] cluster_labels
# 查看每个聚类的统计数据
cluster_summary train_data_clustered.groupby(Cluster).mean()
cluster_summary多元线性回归模型
检测多重共线性
x train_data.drop([yield], axis1) # 使用除了产量以外的所有列作为特征
x sm.add_constant(x)
# 计算每个特征的VIF值
vif_data pd.DataFrame()
vif_data[feature] x.columns
vif_data[VIF] [variance_inflation_factor(x.values, i) for i in range(x.shape[1])]
vif_data主成分分析
# 数据标准化
scaler StandardScaler()
x_scaled scaler.fit_transform(x.drop(const, axis1)) # 去除常数项
# 执行PCA
pca PCA()
x_pca pca.fit_transform(x_scaled)
# 计算主成分的方差贡献率
explained_variance pca.explained_variance_ratio_
print(方差贡献率:)
print(explained_variance)# 计算累积方差贡献率
cumulative_variance np.cumsum(explained_variance)
# 确定累积方差贡献率达到95%的主成分数量
n_components np.where(cumulative_variance 0.95)[0][0] 1
print(f前{n_components}个特征已经达到了95%的累计方差贡献率。)建立多元线性回归模型
# 使用前7个主成分作为特征集
x_pca_reduced x_pca[:, :n_components]
# 由于PCA是无监督的我们需要重新获取目标变量y
y train_data[yield]
# 分割数据集
x_train_pca, x_test_pca, y_train, y_test train_test_split(x_pca_reduced, y, test_size0.3, random_state15) # 37分# 创建多元线性回归模型
regression_model LinearRegression()
# 拟合训练数据
regression_model.fit(x_train_pca, y_train)# 预测测试数据
y_pred regression_model.predict(x_test_pca)
# 计算模型性能指标
mse mean_squared_error(y_test, y_pred)
r2 r2_score(y_test, y_pred)
print(fMean Squared Error (MSE): {mse})
print(fR-squared (R2): {r2})残差项检验
# 计算残差
residuals y_test - y_pred# 绘制残差序列图
plt.figure(figsize(10, 6))
plt.plot(residuals, markero, linestyle)
plt.title(Residuals Time Series Plot)
plt.xlabel(Observation)
plt.ylabel(Residuals)
plt.axhline(y0, colorr, linestyle-)
plt.show()# 绘制残差的直方图
plt.figure(figsize(12, 6))
plt.subplot(1, 2, 1)
plt.hist(residuals, bins30, edgecolorblack)
plt.title(Histogram of Residuals)
plt.xlabel(Residuals)
plt.ylabel(Frequency)# 绘制残差的Q-Q图
plt.subplot(1, 2, 2)
stats.probplot(residuals, distnorm, plotplt)
plt.title(Normal Q-Q Plot of Residuals)plt.tight_layout()
plt.show()# 绘制残差与预测值的散点图以检查同方差性
plt.figure(figsize(10, 6))
plt.scatter(y_pred, residuals, alpha0.5)
plt.title(Residuals vs Predicted Values)
plt.xlabel(Predicted Values)
plt.ylabel(Residuals)
plt.axhline(y0, colorr, linestyle-)
plt.show()模型预测
# 使用与训练模型时相同数量的主成分进行预测
x_test_scaled scaler.transform(test_data)
x_test_pca pca.transform(x_test_scaled)
x_test_pca_reduced x_test_pca[:, :n_components]
# 使用模型进行预测
test_predictions regression_model.predict(x_test_pca_reduced)
test_data_with_predictions test_data.copy()
test_data_with_predictions[predicted_yield] test_predictions
test_data_with_predictions.head()随机森林
建立模型
# 划分数据
x train_data.drop(yield, axis1)
y train_data[yield]
x_train, x_test, y_train, y_test train_test_split(x, y, test_size0.3, random_state10, stratifyy) #37分# 模型建立
rf_clf RandomForestRegressor(random_state15)
rf_clf.fit(x_train, y_train)y_pred rf_clf.predict(x_test)
mse mean_squared_error(y_test, y_pred)
r2 r2_score(y_test, y_pred)
print(fMean Squared Error (MSE): {mse})
print(fR-squared (R2): {r2})参数优化
# 定义随机搜索的参数范围
param_dist {n_estimators: [100, 200, 300, 400, 500],max_depth: [10, 20, 30, 40, 50, None],min_samples_split: [2, 5, 10],min_samples_leaf: [1, 2, 4],max_features: [auto, sqrt]
}# 创建随机森林模型
rf RandomForestRegressor(random_state15)# 设置随机搜索
random_search RandomizedSearchCV(estimatorrf, param_distributionsparam_dist, n_iter10, cv5, verbose2, random_state17, n_jobs-1)# 执行随机搜索
random_search.fit(x_train, y_train)随机搜索比网格搜索快所以这里使用随机搜索。
# 最佳参数和评分
best_params random_search.best_params_
print(最佳参数:, best_params)# 使用最佳参数创建随机森林模型
best_rf_model RandomForestRegressor(**best_params,random_state15)
best_rf_model.fit(x_train, y_train)
y_pred best_rf_model.predict(x_test)
mse mean_squared_error(y_test, y_pred)
r2 r2_score(y_test, y_pred)
print(fMean Squared Error (MSE): {mse})
print(fR-squared (R2): {r2})# 获取特征重要性
feature_importances best_rf_model.feature_importances_
# 创建特征重要性的DataFrame
features x_train.columns
importances_df pd.DataFrame({Feature: features, Importance: feature_importances})
# 按重要性排序
importances_df.sort_values(byImportance, ascendingFalse, inplaceTrue)
importances_df模型预测
# 使用训练好的模型对测试数据进行预测
test_predictions_rf best_rf_model.predict(test_data)
rf_test_data_with_predictions test_data.copy()
rf_test_data_with_predictions[predicted_yield] test_predictions_rf
rf_test_data_with_predictions.head()