第十五周(sklearn)

本文通过使用sklearn库创建了一个人工数据集,并利用交叉验证的方法对比了三种不同的机器学习分类器:高斯朴素贝叶斯(GuassianNB)、支持向量机(SVC)及随机森林(RandomForestClassifier)的性能。实验结果显示随机森林分类器的准确度较高。

首先是创建数据集和split 数据集

import sklearn
from sklearn import datasets
from sklearn import cross_validation
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
dataset = datasets.make_classification(n_samples=1000,n_features=10)
data = dataset[0]
target = dataset[1]
kf = cross_validation.KFold(len(data),n_folds=10,shuffle=True)

然后是Guassian NB 算法训练

# Guassian NB
i = 1
for train_i,test_i in kf:
    x_train,y_train = data[train_i],target[train_i]
    x_test,y_test = data[test_i],target[test_i]
    clf = GaussianNB()
    clf.fit(x_train,y_train)
    pred = clf.predict(x_test)
    print("Group:",i)
    i += 1
    print("Accuracy:", metrics.accuracy_score(y_test, pred))
    print("F1-score:", metrics.f1_score(y_test, pred))
    print("AUC ROC:",metrics.roc_auc_score(y_test, pred))


SVC

#SVC
for c in [1e-02, 1e-01, 1e00, 1e01, 1e02]:
    i = 1
    for train_index,test_index in kf:
        x_train,y_train = data[train_index],target[train_index]
        x_test,y_test = data[test_index],target[test_index]
        clf = SVC(C=c,kernel='rbf',gamma=0.1)
        clf.fit(x_train,y_train)
        pred = clf.predict(x_test)
        print("Group:",i)
        i += 1
        print("C = ",c)
        print("Accuracy:", metrics.accuracy_score(y_test, pred))
        print("F1-score:", metrics.f1_score(y_test, pred))
        print("AUC ROC:",metrics.roc_auc_score(y_test, pred))

输出较长,这里不全部给出截图

RandomForestClassifier 

for n in [10, 100, 1000]:
    i = 1
    for train_index,test_index in kf:
        x_train,y_train = data[train_index],target[train_index]
        x_test,y_test = data[test_index],target[test_index]
        clf = RandomForestClassifier(n_estimators=n)
        clf.fit(x_train,y_train)
        pred = clf.predict(x_test)
        print("Group:",i)
        i += 1
        print("n_estimators = ",n)
        print("Accuracy:", metrics.accuracy_score(y_test, pred))
        print("F1-score:", metrics.f1_score(y_test, pred))
        print("AUC ROC:",metrics.roc_auc_score(y_test, pred))

输出较长,这里不全部给出截图

结果:RandomForestClassifier 的准确度比较好,而Guassian NB的准确度差一点,SVC的准确度波动较大


需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕“需求响应动态冰蓄冷系统与需求响应策略的优化研究”展开,基于Matlab代码实现,重点探讨了冰蓄冷系统在电力需求响应背景下的动态建模与优化调度策略。研究结合实际电力负荷与电价信号,构建系统能耗模型,利用优化算法对冰蓄冷系统的运行策略进行求解,旨在降低用电成本、平衡电网负荷,并提升能源利用效率。文中还提及该研究为博士论文复现,涉及系统建模、优化算法应用与仿真验证等关键技术环节,配套提供了完整的Matlab代码资源。; 适合人群:具备一定电力系统、能源管理或优化算法基础,从事科研或工程应用的研究生、高校教师及企业研发人员,尤其适合开展需求响应、综合能源系统优化等相关课题研究的人员。; 使用场景及目标:①复现博士论文中的冰蓄冷系统需求响应优化模型;②学习Matlab在能源系统建模与优化中的具体实现方法;③掌握需求响应策略的设计思路与仿真验证流程,服务于科研项目、论文写作或实际工程方案设计。; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注系统建模逻辑与优化算法的实现细节,按文档目录顺序系统学习,并尝试调整参数进行仿真对比,以深入理解不同需求响应策略的效果差异。
综合能源系统零碳优化调度研究(Matlab代码实现)内容概要:本文围绕“综合能源系统零碳优化调度研究”,提供了基于Matlab代码实现的完整解决方案,重点探讨了在高比例可再生能源接入背景下,如何通过优化调度实现零碳排放目标。文中涉及多种先进优化算法(如改进遗传算法、粒子群优化、ADMM等)在综合能源系统中的应用,涵盖风光场景生成、储能配置、需求响应、微电网协同调度等多个关键技术环节,并结合具体案例(如压缩空气储能、光热电站、P2G技术等)进行建模与仿真分析,展示了从问题建模、算法设计到结果验证的全流程实现过程。; 适合人群:具备一定电力系统、能源系统或优化理论基础,熟悉Matlab/Simulink编程,从事新能源、智能电网、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展综合能源系统低碳/零碳调度的科研建模与算法开发;②复现高水平期刊(如SCI/EI)论文中的优化模型与仿真结果;③学习如何将智能优化算法(如遗传算法、灰狼优化、ADMM等)应用于实际能源系统调度问题;④掌握Matlab在能源系统仿真与优化中的典型应用方法。; 阅读建议:建议结合文中提供的Matlab代码与网盘资源,边学习理论模型边动手调试程序,重点关注不同优化算法在调度模型中的实现细节与参数设置,同时可扩展应用于自身研究课题中,提升科研效率与模型精度。
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from scipy import stats import seaborn as sns from sklearn.linear_model import Lasso, LassoCV from sklearn.preprocessing import PolynomialFeatures from sklearn.model_selection import train_test_split, cross_val_score from sklearn.metrics import r2_score, mean_squared_error from sklearn.linear_model import LinearRegression from sklearn.pipeline import Pipeline # 设置中文字体支持 plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置支持中文的字体,优先使用SimHei plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题 male = pd.read_csv(r"C:\Users\86137\Desktop\国赛\男胎儿.csv") print(male.info()) # 修复孕转换函数 def convert_gestational_week(x):# 定义一个函数,用于将孕表示转换为小数形式的数 # 统一转换为小写处理,避免因大小写不一致导致的解析问题 # 统一转换为小写处理 x_lower = x.lower() # 检查字符串中是否包含'+',通常用于表示"+天"的格式 if '+' in x_lower: # 分割和天 parts = x_lower.split('w') if len(parts) > 1:# 提取数部分并转换为浮点数 weeks = float(parts[0])# 从分割后的第二部分中提取天数,以'+'作为分割符('+'后通常为天数) days_part = parts[1].split('+') if len(days_part) > 1: days = float(days_part[1]) return weeks + days/7 # 如果没有'+'或者格式不正确,尝试直接提取数 try:# 以'w'分割字符串,取第一部分转换为浮点数作为数 return float(x_lower.split('w')[0]) except: # 如果所有尝试都失败,返回NaN return float('nan') ##然后处理男胎儿 male.drop(["序号","孕妇代码","末次月经","检测日期","染色体的非整倍体","胎儿是否健康"],axis=1,inplace=True) male['孕数值'] = male['检测孕'].apply(convert_gestational_week) male.drop("检测孕",axis=1,inplace=True) male_one = pd.get_dummies(male,dtype='int8') print(male_one.head()) # 计算子图的行列数 n_features = len(male_one.columns) n_cols = 5 # 每行显示3个子图 n_rows = (n_features + n_cols - 1) // n_cols # 计算需要的行数 # 创建子图 fig, axes = plt.subplots(n_rows, n_cols, figsize=(15, 5*n_rows)) axes = axes.flatten() # 将axes数组展平,便于迭代 # 为每个特征绘制QQ图 for i, column in enumerate(male_one.columns): # 使用statsmodels绘制QQ图 sm.qqplot(male_one[column].dropna
09-08
<think> 我们正在分析用户的问题:用户在使用`statsmodels`绘制QQ图时遇到代码不完整的问题,需要解决办法。 根据引用[1]中的代码示例,使用`smg.qqplot()`函数绘制QQ图,其中关键参数包括: - `data['Weight']`: 这是DataFrame的列数据 - `fit=True`: 表示拟合理论正态分布 - `line='45'`: 表示绘制45度参考线 - `ax=ax`: 指定绘图的坐标轴 用户提到“代码不完整”,可能是指用户在使用时遗漏了必要的步骤或参数。 常见的绘制QQ图的问题及解决办法: 1. 数据未正确传递:确保传入的是DataFrame的一列(即Series),而不是整个DataFrame(除非整个 DataFrame 只有一列)。 2. 未正确导入模块:需要导入`statsmodels.api`和`statsmodels.graphics.api`,以及`matplotlib`。 3. 缺少图形显示语句:在Jupyter中可能不需要,但在脚本中通常需要`plt.show()`来显示图形。 4. 数据包含缺失值:QQ图绘制前需要处理缺失值,否则会报错。 5. 坐标轴未正确设置:如果在一个图中绘制多个子图,需要正确传递`ax`参数。 因此,我们给出完整的代码步骤: 步骤1:导入必要的库 步骤2:准备数据(确保数据是数值型,且已处理缺失值) 步骤3:创建图形和坐标轴 步骤4:调用qqplot函数 步骤5:显示图形 根据引用[1]的示例,我们编写一个完整的示例代码: ```python import matplotlib.pyplot as plt import statsmodels.api as sm import statsmodels.graphics.api as smg # 假设我们有一个DataFrame叫做df,其中有一列'Weight' # 如果数据有缺失值,需要先处理,例如: # df = df.dropna(subset=['Weight']) # 创建图形和坐标轴 fig, ax = plt.subplots(figsize=(6, 4)) # 可以设置图形大小 # 绘制QQ图,使用'Weight'列的数据 smg.qqplot(df['Weight'], fit=True, line='45', ax=ax) # 设置标题(可选) ax.set_title('QQ Plot for Weight') # 显示图形 plt.show() ``` 注意: - 这里假设df是已经存在的DataFrame,并且有一列名为'Weight'。 - 如果遇到数据不是数值型,需要先转换。 - 如果数据量很大,可能需要较长时间。 如果用户在运行代码时遇到错误,请根据错误信息进一步排查。常见的错误信息及解决办法: - `TypeError: unsupported operand type(s) for /: 'str' and 'int'`:说明数据列包含非数值,需要转换。 - `ValueError: array must not contain infs or NaNs`:说明数据包含缺失值或无穷大,需要清洗。 此外,引用[2]和[3]虽然与时间序列有关,但这里我们重点关注QQ图的问题。 因此,我们给出的解决办法是:按照上述完整步骤编写代码,并确保数据是干净的数值型数据。 下面生成相关问题: §§相关问题§§ 1. 如何处理数据中的缺失值以便绘制QQ图? 2. 如何解释QQ图的含义? 3. 除了`statsmodels`,还有哪些Python库可以绘制QQ图? </think> ### 解决 `statsmodels` 绘制QQ图代码不完整的问题 在使用 `statsmodels.graphics.api.qqplot()` 为DataFrame列绘制QQ图时,代码不完整通常由以下原因导致: #### 📌 常见问题及解决方法 1. **缺少数据预处理步骤** ```python # 正确步骤:确保数据已清洗且为数值型 import pandas as pd data = pd.read_csv("your_data.csv") numeric_data = data['Weight'].dropna() # 处理缺失值 ``` 2. **关键参数缺失** - **`line` 参数未指定**:必须包含 `line='45'` 或 `line='s'` 添加参考线 - **`fit` 参数错误**:需设置 `fit=True` 自动拟合正态分布 ```python # 修复示例 smg.qqplot(numeric_data, fit=True, line='45', ax=ax) # 关键参数补齐 ``` 3. **坐标轴未正确初始化** ```python # 缺少图形初始化(引用[1]示例中此步骤完整) fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8,6)) # 必须创建画布 ``` 4. **未显示图形** ```python plt.tight_layout() # 优化布局(可选) plt.show() # 必须调用显示方法(引用[1][2]均包含) ``` #### ✅ 完整可运行代码模板 ```python import pandas as pd import matplotlib.pyplot as plt import statsmodels.api as sm import statsmodels.graphics.api as smg # 1. 数据加载与清洗 data = pd.read_csv("your_data.csv") cleaned_data = data['Your_Column'].dropna() # 替换为实际列名 # 2. 初始化图形 fig, ax = plt.subplots(figsize=(10, 6)) # 3. 绘制QQ图(关键参数补齐) smg.qqplot(cleaned_data, fit=True, # 自动拟合正态分布 line='45', # 添加45度参考线 ax=ax) # 指定坐标轴 # 4. 添加标签和显示 ax.set_title("QQ Plot of Column Data", fontsize=14) ax.set_xlabel("Theoretical Quantiles", fontsize=12) ax.set_ylabel("Sample Quantiles", fontsize=12) plt.grid(True, alpha=0.3) plt.show() ``` #### ⚠️ 注意事项 1. **数据验证**:通过 `print(cleaned_data.describe())` 确认数据分布 2. **异常值处理**:若QQ图异常扭曲,需检查离群点 ```python cleaned_data = cleaned_data[(cleaned_data > lower_bound) & (cleaned_data < upper_bound)] ``` 3. **环境依赖**:确保库版本兼容 ```bash pip install statsmodels==0.14.0 matplotlib==3.7.1 ``` > 引用[1]的示例代码展示了正确的核心调用方式 `smg.qqplot(data['Weight'], fit=True, line='45', ax=ax)`,但实际应用中需结合完整上下文[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值