第十五周(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的准确度波动较大


【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型与说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行与控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念与分析方法;②掌握利用Simulink进行电力系统建模与仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议结合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能与参数设置,再运行仿真并仔细分析输出结果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
本研究聚焦于运用MATLAB平台,将支持向量机(SVM)应用于数据预测任务,并引入粒子群优化(PSO)算法对模型的关键参数进行自动调优。该研究属于机器学习领域的典型实践,其核心在于利用SVM构建分类模型,同时借助PSO的全局搜索能力,高效确定SVM的最优超参数配置,从而显著增强模型的整体预测效能。 支持向量机作为一种经典的监督学习方法,其基本原理是通过在高维特征空间中构造一个具有最大间隔的决策边界,以实现对样本数据的分类或回归分析。该算法擅长处理小规模样本集、非线性关系以及高维度特征识别问题,其有效性源于通过核函数将原始数据映射至更高维的空间,使得原本复杂的分类问题变得线性可分。 粒子群优化算法是一种模拟鸟群社会行为的群体智能优化技术。在该算法框架下,每个潜在解被视作一个“粒子”,粒子群在解空间中协同搜索,通过不断迭代更新自身速度与位置,并参考个体历史最优解和群体全局最优解的信息,逐步逼近问题的最优解。在本应用中,PSO被专门用于搜寻SVM中影响模型性能的两个关键参数——正则化参数C与核函数参数γ的最优组合。 项目所提供的实现代码涵盖了从数据加载、预处理(如标准化处理)、基础SVM模型构建到PSO优化流程的完整步骤。优化过程会针对不同的核函数(例如线性核、多项式核及径向基函数核等)进行参数寻优,并系统评估优化前后模型性能的差异。性能对比通常基于准确率、精确率、召回率及F1分数等多项分类指标展开,从而定量验证PSO算法在提升SVM模型分类能力方面的实际效果。 本研究通过一个具体的MATLAB实现案例,旨在演示如何将全局优化算法与机器学习模型相结合,以解决模型参数选择这一关键问题。通过此实践,研究者不仅能够深入理解SVM的工作原理,还能掌握利用智能优化技术提升模型泛化性能的有效方法,这对于机器学习在实际问题中的应用具有重要的参考价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
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]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值