每天一kernel:偏度和峰度

本文分享了一次参加波士顿房价预测竞赛的经历,通过分析Kaggle入门项目,指出模型仅使用相关系数前十的特征及未进行one-hot编码的问题。强调了持续学习的重要性,并表达了对提升Python编程与机器学习理解的期望。

在这里插入图片描述
在这里插入图片描述

竞赛:波士顿房价预测
学习kernel:房价预测kaggle入门项目
https://www.kaggle.com/dgi1995/kaggle?scriptVersionId=29957072
提交结果:0.30,这个成绩一般般,主要是这个kernel没有对一些不是数值的类型进行one-hot编码,而且选择特征只用了corr相关系数前十,没有细致的探究。

今天的感想:要学习一个东西,就要花时间去慢慢学习,不要指望一步登天。今天看到一个博客讲一位大佬拿了kaggle一金2银,结果一看注册时间3年,想想自己也注册了kaggle两年了,啥都没得到,虽然有一颗比赛的心,但是由于编程能力和对机器学习原理的理解不深,导致一直没有动手,虽然自己现在对Python和深度学习有更熟练一些的掌握,希望自己可以不断的投入自己喜欢的事情上去,就像刷题一样,慢慢练上去,语言总会更加熟悉的,各种流程也会更熟练的,功不唐捐,成功不必在我!!

结合下述去除噪声 对于文件:附件1.xlsx 附件1.xlsx无空值 附件1.xlsx反射率小于0的个数:0 附件1.xlsx反射率大于1的个数:0 附件1.xlsx噪声统计分析: 均值: 22.2668 标准差: 17.5880 : 3.2371 峰度: 10.0849 附件1.xlsx可能含有脉冲噪声或重尾噪声(如椒盐噪声) 对于文件:附件2.xlsx 附件2.xlsx无空值 附件2.xlsx反射率小于0的个数:0 附件2.xlsx反射率大于1的个数:262 附件2.xlsx噪声统计分析: 均值: 23.5915 标准差: 18.9837 : 3.2302 峰度: 10.0765 附件2.xlsx可能含有脉冲噪声或重尾噪声(如椒盐噪声) import numpy as np import matplotlib.pyplot as plt from scipy.stats import skew, kurtosis import pandas as pd import os plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False path = os.path.dirname(os.path.abspath(__file__)) file_path = os.path.join(path, "附件1.xlsx") # 1. 数据解析函数 def get_data(file_path): file_name = os.path.basename(file_path) data = pd.read_excel(file_path, header=0) if data.isna().any().any(): print(f"{file_name}存在空值:") print(data.isna().sum()) else: print(f"{file_name}无空值") wavenumber = data.iloc[:, 0].values reflectivity = data.iloc[:, 1].values negative_num = np.sum(reflectivity < 0) over_one_num = np.sum(reflectivity > 100) # 表格中数据单位% print(f"{file_name}反射率小于0的个数:{negative_num}") print(f"{file_name}反射率大于1的个数:{over_one_num}") return wavenumber, reflectivity # 2. 噪声分析函数 def analyze_noise(reflectivity, file_name): # 计算统计量 mean = np.mean(reflectivity) std = np.std(reflectivity) skewness = skew(reflectivity) kurt = kurtosis(reflectivity) print(f"\n{file_name}噪声统计分析:") print(f"均值: {mean:.4f}") print(f"标准差: {std:.4f}") print(f": {skewness:.4f}") print(f"峰度: {kurt:.4f}") # 绘制直方图 plt.figure(figsize=(10, 4)) plt.hist(reflectivity, bins=50, density=True, alpha=0.6, color='blue', edgecolor='black') plt.title(f'{file_name}反射率直方图(用于判断噪声类型)') plt.xlabel('反射率') plt.ylabel('概率密') plt.grid(True) plt.tight_layout() plt.show() # 概率密函数拟合(以高斯分布为例) from scipy.stats import norm x = np.linspace(min(reflectivity), max(reflectivity), 100) mu, std = norm.fit(reflectivity) pdf = norm.pdf(x, mu, std) plt.figure(figsize=(10, 4)) plt.hist(reflectivity, bins=50, density=True, alpha=0.6, color='blue', edgecolor='black') plt.plot(x, pdf, 'r-', lw=2, label='拟合高斯分布') plt.title(f'{file_name}反射率概率密函数拟合') plt.xlabel('反射率') plt.ylabel('概率密') plt.legend() plt.grid(True) plt.tight_layout() plt.show() # 判断噪声类型 if -0.5 < skewness < 0.5 and 2.5 < kurt < 3.5: print(f"{file_name}可能含有高斯噪声") elif np.abs(skewness) > 1 or kurt > 5: print(f"{file_name}可能含有脉冲噪声或重尾噪声(如椒盐噪声)") elif np.any(reflectivity == 0) or np.any(reflectivity == 100): print(f"{file_name}可能含有椒盐噪声") else: print(f"{file_name}噪声类型不明显,建议进步分析") # 3. 可视化原始数据 def wavenumber_reflectivity(wavenumber, reflectivity, file_name): plt.figure(figsize=(12, 6)) plt.plot(wavenumber, reflectivity, label='反射率', color='blue', linewidth=1.5) plt.xlabel('波数') plt.ylabel('反射率') plt.title(f'{file_name.split(".")[0]}波数与反射率关系曲线') plt.legend() plt.gca().invert_xaxis() plt.grid(True) plt.tight_layout() plt.show() # 4. 归化函数 def get_normalization(reflectivity): return reflectivity / 100.0 # 5. 归化后可视化 def wavenumber_reflectivity_normalization(wavenumber, reflectivity_normalization, file_name): plt.figure(figsize=(12, 6)) plt.plot(wavenumber, reflectivity_normalization, label='归化反射率', color='green', linewidth=1.5) plt.xlabel('波数') plt.ylabel('归化反射率') plt.title(f'{file_name.split(".")[0]}归化波数与反射率关系曲线') plt.legend() plt.gca().invert_xaxis() plt.grid(True) plt.tight_layout() plt.show() if __name__ == "__main__": file_paths = [ os.path.join(path, "附件1.xlsx"), os.path.join(path, "附件2.xlsx") ] for file in file_paths: print(f"\n对于文件:{os.path.basename(file)}") wavenumber, reflectivity = get_data(file) if wavenumber is not None and reflectivity is not None: wavenumber_reflectivity(wavenumber, reflectivity, os.path.basename(file)) analyze_noise(reflectivity, os.path.basename(file)) # 新增噪声分析 reflectivity_normalization = get_normalization(reflectivity) wavenumber_reflectivity_normalization(wavenumber, reflectivity_normalization, os.path.basename(file))
09-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值