python打卡DAY21

##注入所需库

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

import random

import numpy as np

import time

import shap

from sklearn.svm import SVC #支持向量机分类器

# from sklearn.neighbors import KNeighborsClassifier #K近邻分类器

# from sklearn.linear_model import LogisticRegression #逻辑回归分类器

import xgboost as xgb #XGBoost分类器

import lightgbm as lgb #LightGBM分类器

from sklearn.ensemble import RandomForestClassifier #随机森林分类器

# from catboost import CatBoostClassifier #CatBoost分类器

# from sklearn.tree import DecisionTreeClassifier #决策树分类器

# from sklearn.naive_bayes import GaussianNB #高斯朴素贝叶斯分类器

from skopt import BayesSearchCV

from skopt.space import Integer

from deap import base, creator, tools, algorithms

from sklearn.model_selection import StratifiedKFold, cross_validate # 引入分层 K 折和交叉验证工具

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 用于评估分类器性能的指标

from sklearn.metrics import classification_report, confusion_matrix #用于生成分类报告和混淆矩阵

from sklearn.metrics import make_scorer#定义函数

import warnings #用于忽略警告信息

warnings.filterwarnings("ignore") # 忽略所有警告信息

#聚类

from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering

from sklearn.preprocessing import StandardScaler

from sklearn.decomposition import PCA

from sklearn.metrics import silhouette_score, calinski_harabasz_score, davies_bouldin_score

#3D可视化

from mpl_toolkits.mplot3d import Axes3D

#设置中文字体&负号正确显示

plt.rcParams['font.sans-serif']=['STHeiti']

plt.rcParams['axes.unicode_minus']=True

plt.rcParams['figure.dpi']=100

#读取数据&查看数据基本信息

data=pd.read_csv(r'data.csv')

print(f'{data.info()}\n{data.isnull().sum()}')

#绘制图像

# plt.figure(figsize=(6,4))

# sns.boxenplot(x=data['Annual Income'])

# plt.title('年收入箱线图')

# plt.tight_layout()

# plt.show()

# plt.figure(figsize=(6,4))

# sns.boxenplot(

# x='Credit Default',

# y='Monthly Debt',

# data=data.dropna()

# )

# plt.title('月欠款分类箱线图')

# plt.xticks([0,1],['n','y'])

# plt.tight_layout()

# plt.show()

# plt.figure(figsize=(6,4))

# sns.histplot(

# x='Monthly Debt',

# hue='Credit Default',

# hue_order=[0,1],

# data=data.dropna(),

# kde=True,

# element='bars'

# )

# plt.title('月欠款分类直方图')

# plt.xlabel('Credit Default')

# plt.ylabel('count')

# plt.legend(labels=['n','y'])

# plt.tight_layout()

# plt.show()

features=['Annual Income','Months since last delinquent','Number of Credit Problems','Monthly Debt']

# #绘制箱线图子图

# fig,axes=plt.subplots(2,2,figsize=(6,4))

# for i,feature in enumerate(features):

# row,col=i//2,i%2

# sns.boxenplot(x=data[feature].dropna(),ax=axes[row,col])

# axes[row,col].set_title(f'boxplot of {feature}')

# axes[row,col].set_xlabel(feature)

# plt.tight_layout()

# plt.show()

# #绘制分类箱线图子图

# fig,axes=plt.subplots(2,2,figsize=(6,4))

# for i,feature in enumerate(features):

# row,col=i//2,i%2

# sns.boxenplot(

# x='Credit Default',

# y=feature,

# data=data.dropna(),

# ax=axes[row,col]

# )

# axes[row,col].set_title(f'boxplot of {feature}')

# axes[row,col].set_label(feature)

# axes[row,col].set_xticks([0,1],['n','y'])

# plt.tight_layout()

# plt.show()

# #绘制分类箱线直方图

# fig,axes=plt.subplots(2,2,figsize=(6,4))

# for i,feature in enumerate(features):

# row,col=i//2,i%2

# sns.histplot(

# x=feature,

# hue='Credit Default',

# hue_order=(0,1),

# data=data.dropna(),

# kde=True,

# element='bars',

# ax=axes[row,col]

# )

# axes[row,col].set_title(f'histplot of {feature}')

# axes[row,col].set_xlabel(feature)

# axes[row,col].set_ylabel('count')

# axes[row,col].legend(labels=['n','y'])

# plt.tight_layout()

# plt.show()

#数据填补

for i in data.columns:

if data[i].dtype!='object':

if data[i].isnull().sum()>0:

data[i].fillna(data[i].mean(),inplace=True)

else:

if data[i].isnull().sum()>0:

data[i].fillna(data[i].mode()[0],inplace=True)

mapping={'10+ years':0,

'9 years':1,

'8 years':2,

'7 years':3,

'6 years':4,

'5 years':5,

'4 years':6,

'3 years':7,

'2 years':8,

'1 year':9,

'< 1 year':10}

data['Years in current job']=data['Years in current job'].map(mapping)

dummies_list=[]

data2=pd.read_csv(r'data.csv')

data=pd.get_dummies(data=data,drop_first=True)

for i in data.columns:

if i not in data2.columns:

dummies_list.append(i)

for i in dummies_list:

data[i]=data[i].astype(int)

print(f'{data.info()}\n{data.columns}')

# #绘制相关热力图

# continuous_features=['Annual Income', 'Years in current job', 'Tax Liens',

# 'Number of Open Accounts', 'Years of Credit History',

# 'Maximum Open Credit', 'Number of Credit Problems',

# 'Months since last delinquent', 'Bankruptcies', 'Current Loan Amount',

# 'Current Credit Balance', 'Monthly Debt', 'Credit Score']

# confusion_martix=data[continuous_features].corr()

# plt.figure(figsize=(12,10))

# sns.heatmap(confusion_martix,annot=True,cmap='coolwarm',vmin=-1,vmax=1)

# plt.title('相关热力图')

# plt.xticks(rotation=30,ha='right')

# plt.tight_layout()

# plt.show()

#划分数据集

from sklearn.model_selection import train_test_split

x=data.drop('Credit Default',axis=1)

y=data['Credit Default']

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=42)

print(f'train:{x_train.shape}\ntest:{x_test.shape}')

# #模型训练

# #Randomforrest

# start_time=time.time()

# rf_model=RandomForestClassifier(random_state=42,class_weight='balanced')

# rf_model.fit(x_train,y_train)

# rf_pred=rf_model.predict(x_test)

# end_time=time.time()

# print(f'训练与预测耗时:{end_time-start_time:.4f}')

# print('\n随机森林分类报告')

# print(classification_report(y_test,rf_pred))

# print('\n随机森林混淆矩阵')

# print(confusion_matrix(y_test,rf_pred))

#定义约登系数

def youden_score(y_true,y_pred):

tn,fp,fn,tp=confusion_matrix(y_true,y_pred).ravel()

sensitivity=tp/(tp+fn)

specificity=tn/(tn+fp)

return sensitivity+specificity-1

youden_scorer=make_scorer(youden_score)


 

# #SMOTE过采样后带权重网格搜索优化的随机森林

# #SMOTE

# from imblearn.over_sampling import SMOTE

# smote=SMOTE(random_state=42)

# x_train_smote,y_train_smote=smote.fit_resample(x_train,y_train)

# #网格搜索&交叉验证

# from sklearn.model_selection import GridSearchCV

# cv_strategy=StratifiedKFold(n_splits=5,shuffle=True,random_state=42)

# param_grid={

# 'n_estimators':[5,10,15],

# 'max_depth':[None,5,10],

# 'min_samples_split':[2,3,4],

# 'min_samples_leaf':[2,3,4]

# }

# grid_search=GridSearchCV(

# estimator=RandomForestClassifier(random_state=42,class_weight='balanced'),

# param_grid=param_grid,

# cv=cv_strategy,

# n_jobs=-1,

# scoring=youden_scorer

# )

# start_time=time.time()

# grid_search.fit(x_train_smote,y_train_smote)

# end_time=time.time()

# best_model=grid_search.best_estimator_

# best_pred=best_model.predict(x_test)

# print(f'网格搜索耗时:{end_time-start_time:.4f}秒')

# print('最佳参数:',grid_search.best_params_)

# print('\n带权重网格搜索优化后的随机森林在测试集上的分类报告')

# print(classification_report(y_test,best_pred))

# print('网格搜索优化后的随机森林在测试集上的混淆矩阵')

# print(confusion_matrix(y_test,best_pred))

# #SMOTE过采样后带权重的贝叶斯优化的随机森林

# #SMOTE过采样

# from imblearn.over_sampling import SMOTE

# smote=SMOTE(random_state=42)

# x_train_smote,y_train_smote=smote.fit_resample(x_train,y_train)

# #贝叶斯优化&交叉验证

# from sklearn.model_selection import GridSearchCV

# cv_strategy=StratifiedKFold(n_splits=5,shuffle=True,random_state=42)

# search_space={

# 'n_estimators':Integer(1,5),

# 'max_depth':Integer(1,5),

# 'min_samples_split':Integer(2,6),

# 'min_samples_leaf':Integer(1,5)

# }

# bayes_search=BayesSearchCV(

# estimator=RandomForestClassifier(random_state=42,class_weight='balanced'),

# search_spaces=search_space,

# cv=cv_strategy,

# n_jobs=-1,

# scoring=youden_scorer

# )

# start_time=time.time()

# bayes_search.fit(x_train_smote,y_train_smote)

# end_time=time.time()

# best_model=bayes_search.best_estimator_

# best_pred=best_model.predict(x_test)

# print(f'贝叶斯优化耗时:{end_time-start_time:.4f}秒')

# print('最佳参数',bayes_search.best_params_)

# print('\n贝叶斯优化后的随机森林在测试集上的分类报告')

# print(classification_report(y_test,best_pred))

# print('\n贝叶斯优化后的随机森林在测试集上侧混淆矩阵')

# print(confusion_matrix(y_test,best_pred))

# #shap分析

# start_time=time.time()

# explainer=shap.TreeExplainer(best_model)

# shap_values=explainer.shap_values(x_test)

# end_time=time.time()

# print(f"shap分析耗时: {end_time - start_time:.4f} 秒")

# print('shap_values shape:',shap_values.shape)

# print('shap_values[0,:,:]shape',shap_values[0,:,:].shape)##这里也可以省略后面的写作shap_values[0】,代表第一个样本所有特征对所有类别的贡献,后面部位可以省略但是前面不能。

# print('shap_values[:,:,0]shape',shap_values[:,:,0].shape)

# print('x_test shape',x_test.shape)

# ##SHAP特征重要性条形图 (Summary Plot - bar)

# print("--- 2. SHAP 特征重要性条形图 ---")

# shap.summary_plot(

# shap_values[:,:,0],

# x_test,

# plot_type='bar',

# show=False

# )

# plt.title('shap特征重要性条形图')

# plt.tight_layout()

# plt.show()

# ##SHAP特征重要性蜂巢图

# print("--- 2. SHAP 特征重要性蜂巢图 ---")

# shap.summary_plot(

# shap_values[:,:,0],

# x_test,

# plot_type='violin',

# show=False

# )

# plt.title(' SHAP特征重要性小提琴图')

# plt.tight_layout()

# plt.show()

#标准化数据,将自变量标准化,聚类就是从自变量中聚合新的自变量,与因变量无关

scaler=StandardScaler()

x_scaled=scaler.fit_transform(x)

#Kmeans++聚类

k_range=range(2,5)

inertia_value=[]

silhouette_scores=[]

ch_scores=[]

db_scores=[]

start_time=time.time()

for k in k_range:

kmeans=KMeans(n_clusters=k,random_state=42)

kmeans_label=kmeans.fit_predict(x_scaled)#提供了每个数据点所属的簇的信息,用于区分不同簇的数据点

inertia_value.append(kmeans.inertia_)

silhouette=silhouette_score(x_scaled,kmeans_label)

silhouette_scores.append(silhouette)

ch=calinski_harabasz_score(x_scaled,kmeans_label)

ch_scores.append(ch)

db=davies_bouldin_score(x_scaled,kmeans_label)

db_scores.append(db)

# print(f'k={k}\n 惯性:{kmeans.inertia_:.2f}\n轮廓系数:{silhouette:.3f}\n CH系数:{ch:.2f}\n DB{db:.3f}')

end_time=time.time()

print(f'聚类分析耗时:{end_time-start_time:.4f}')

# #绘制评估指标图

# plt.figure(figsize=(12,6))

# #肘部法则图

# plt.subplot(2,2,1)

# plt.plot(k_range,inertia_value,marker='o')

# plt.title('肘部法则确定最优聚类数 k(惯性,越小越好)')

# plt.xlabel('聚类数 (k)')

# plt.ylabel('惯性')

# plt.grid(True)

# #轮廓系数图

# plt.subplot(2,2,2)

# plt.plot(k_range,silhouette_scores,marker='o',color='orange')

# plt.title('轮廓系数确定最优聚类数 k(越大越好)')

# plt.xlabel('聚类数 (k)')

# plt.ylabel('轮廓系数')

# plt.grid(True)

# #CH指数图

# plt.subplot(2,2,3)

# plt.plot(k_range,ch_scores,marker='o',color='red')

# plt.title('Calinski-Harabasz 指数确定最优聚类数 k(越大越好)')

# plt.xlabel('聚类数 (k)')

# plt.ylabel('CH 指数')

# plt.grid(True)

# #DB指数图

# plt.subplot(2,2,4)

# plt.plot(k_range,db_scores,marker='o',color='yellow')

# plt.xlabel('聚类数 (k)')

# plt.ylabel('DB 指数')

# plt.grid(True)

# plt.tight_layout()

# plt.show()

# #选择K值进行聚类

# selected_k=20

# kmeans=KMeans(n_clusters=selected_k,random_state=42)

# kmeans_label=kmeans.fit_predict(x_scaled)

x['KMeans_Cluster']=kmeans_label

# #PCA降维

# pca=PCA(n_components=2)

# x_pca=pca.fit_transform(x_scaled)

# #聚类可视化

# plt.figure(figsize=(6,5))

# sns.scatterplot(

# x=x_pca[:,0],

# y=x_pca[:,1],

# hue=kmeans_label,

# palette='viridis'

# )

# plt.title(f'KMean Clustering with k={selected_k} (PCA Visualization)')

# plt.xlabel('PCA Component 1')

# plt.ylabel('PCA Component 2')

# plt.show()

# ##打印KMeans聚类标签前几行

# print(f'KMeans Clueter labels(k={selected_k}added to X):')

# print(x[['KMeans_Cluster']].value_counts())

start_time=time.time()

x1=x.drop('KMeans_Cluster',axis=1)

y1=x['KMeans_Cluster']

rf1_model=RandomForestClassifier(random_state=42,class_weight='balanced')

rf1_model.fit(x1,y1)

explainer=shap.TreeExplainer(rf1_model)

shap_values=explainer.shap_values(x1)

print(shap_values.shape)

# --- 1. SHAP 特征重要性条形图 (Summary Plot - Bar) ---

print("--- 1. SHAP 特征重要性条形图 ---")

shap.summary_plot(shap_values[:,:,0],x1,plot_type='bar',show=False)

plt.title("SHAP Feature Importance (Bar Plot)")

plt.tight_layout()

plt.show()

end_time=time.time()

print(f'SHAP分析耗时:{end_time-start_time:.4f}')

selected_features=['Purpose_debt consolidation','Home Ownership_Home Mortgage','Purpose_home improvements','Purpose_other']

for feature in selected_features:

unique_count=x[feature].nunique()

print(f'{feature}的唯一值数量:{unique_count}')

if unique_count<10:

print(f'{feature}可能是离散型变量')

else:

print(f'{feature}可能是连续性变量')

fig,axes=plt.subplots(2,2,figsize=(10,8))

axes=axes.flatten()

for i,feature in enumerate(selected_features):

axes[i].hist(x[feature],bins=10)

axes[i].set_title(f'histogram of {feature}')

axes[i].set_xlabel(feature)

axes[i].set_ylabel('frequency')

plt.tight_layout()

plt.show()

print(x[['KMeans_Cluster']].value_counts())

x_cluster0=x[x['KMeans_Cluster']==0]

x_cluster1=x[x['KMeans_Cluster']==1]

x_cluster2=x[x['KMeans_Cluster']==2]

x_cluster3=x[x['KMeans_Cluster']==3]

#簇0

fig,axes=plt.subplots(2,2,figsize=(6,4))

axes=axes.flatten()

for i,feature in enumerate(selected_features):

axes[i].hist(x_cluster0[feature],bins=20)

axes[i].set_title(f'Histogram of {feature}')

axes[i].set_xlabel(feature)

axes[i].set_ylabel('frequency')

plt.tight_layout()

plt.show()

#簇1

fig,axes=plt.subplots(2,2,figsize=(6,4))

axes=axes.flatten()

for i,feature in enumerate(selected_features):

axes[i].hist(x_cluster1[feature],bins=20)

axes[i].set_title(f'Histogram of {feature}')

axes[i].set_xlabel(feature)

axes[i].set_ylabel('frequency')

plt.tight_layout()

plt.show()

#簇2

fig,axes=plt.subplots(2,2,figsize=(6,4))

axes=axes.flatten()

for i,feature in enumerate(selected_features):

axes[i].hist(x_cluster2[feature],bins=20)

axes[i].set_title(f'Histogram of {feature}')

axes[i].set_xlabel(feature)

axes[i].set_ylabel('frequency')

plt.tight_layout()

plt.show()

#簇3

fig,axes=plt.subplots(2,2,figsize=(6,4))

axes=axes.flatten()

for i,feature in enumerate(selected_features):

axes[i].hist(x_cluster3[feature],bins=20)

axes[i].set_title(f'Histogram of {feature}')

axes[i].set_xlabel(feature)

axes[i].set_ylabel('frequency')

plt.tight_layout()

plt.show()

print("--- 递归特征消除 (RFE) ---")

from sklearn.feature_selection import RFE

start_time=time.time()

base_model=RandomForestClassifier(random_state=42,class_weight='balanced')

rfe=RFE(base_model,n_features_to_select=5)

rfe.fit(x_train,y_train)

x_train_rfe=rfe.transform(x_train)

x_test_rfe=rfe.transform(x_test)

selected_features_rfe=x_train.columns[rfe.support_].tolist()

print(f"RFE筛选后保留的特征数量: {len(selected_features_rfe)}")

print(f"保留的特征: {selected_features_rfe}")

#训练随机森林模型

rf_model_rfe=RandomForestClassifier(random_state=42,class_weight='balanced')

rf_model_rfe.fit(x_train_rfe,y_train)

rf_pred_rfe=rf_model_rfe.predict(x_test_rfe)

end_time=time.time()

print(f"训练与预测耗时: {end_time - start_time:.4f} 秒")

print("\nRFE筛选后随机森林在测试集上的分类报告:")

print(classification_report(y_test, rf_pred_rfe))

print("RFE筛选后随机森林在测试集上的混淆矩阵:")

print(confusion_matrix(y_test, rf_pred_rfe))

大模型——dify实战通过dify搭建你自己的图片识别服务 本文介绍了如何通过Dify平台搭建图片识别服务。首先创建工作流,添加支持图片上传的字段,并配置视觉模型qwen-vl-max-latest进行图像分析。文章详细说明了各步骤操作,包括字段设置、模型选择、提示词编写等。在测试阶段发现URL解析问题后,提供了解决方案:修改Dify的.env文件,调整FILES_URL配置并重启服务。最终成功实现上传图片或输入图片链接后,AI能够准确分析并返回简洁的图片内容描述。这一方案适用于需要快速部署图像识别功能的场景。 阅读详情

相关推荐

2025反爬终极方案:Python破解Cloudflare v2行为指纹,设备伪装+轨迹模拟拦截率压至1%

Cloudflare v2的反爬逻辑越来越接近“人类行为识别”,单纯的技术破解已失效,核心竞争力变成“模拟真实用户的能力”。本文的终极方案本质是“全方位复刻人类行为”——从设备指纹到操作轨迹,从网络特征到交互模式,让爬虫成为“无法被区分的真实用户”。这套方案的优势是“通用性强”,不仅适用于Cloudflare v2,也能破解大多数高反爬网站(如小红书、知乎、跨境电商)的行为检测;且代码可直接复用,新手只需替换目标URL和数据提取逻辑,就能快速落地。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2355

Python打卡DAY21

DAY 21 常见的降维算法。

m0_65171196的博客 256

OCC WebGL案例编译实战:从FreeType配置到静态库生成

本文详细记录了将OCC(Open CASCADE Technology)3D图形库编译为WebAssembly(Wasm)并在浏览器中通过WebGL渲染的实战过程。重点解决了FreeType库的交叉编译配置、OCC核心库的裁剪与静态库生成,以及WebGL样例项目的CMake改造等关键步骤,为开发者提供了从环境搭建到最终集成的完整指南。

weixin_28831461的博客 317

Python打卡:Day21

1.PCA2.t-SNE。

qq_64377553的博客 216

Veritas NetBackup 10.1 Windows安装指南:从账户配置到完整部署

本文详细介绍了Veritas NetBackup 10.1在Windows系统上的完整安装流程,从账户配置到部署验证。重点讲解了创建专用服务账户、安装组件选择、许可证输入等关键步骤,并提供了常见问题排查和进阶配置建议,帮助用户顺利完成企业级备份解决方案的部署。

weixin_26765287的博客 454

Python + DeepSeek 完美结合:本地部署提效指南

随着生成式 AI 和深度学习技术的快速发展,如何将智能搜索工具与本地部署结合以提升效率成为了许多企业和开发者关注的重点。DeepSeek 是一款开源的智能搜索框架,结合 Python 的灵活性,能够实现高效、可靠的本地部署方案。本文将介绍如何通过 Python 和 DeepSeek 的完美结合,实现本地化部署并提升工作效率。通过将 Python 与 DeepSeek 结合,可以快速实现语义搜索的本地化部署,确保数据安全的同时提升工作效率。文件可直接作为 DeepSeek 的输入数据。

weixin_44872675的博客 1万+

python打卡训练营打卡记录day21

自由作业:探索下什么时候用到降维?或者让ai给你出题,群里的同学互相学习下。可以考虑对比下在某些特定数据集上t-sne的可视化和pca可视化的区别。

m0_74839150的博客 216

最新2026年《网络数据安全风险评估办法》条款解读

大型企业集团IT变革下的零信任安全体系建设方案(55页).pptx。以数据安全为核心的安全立体防御体系解决方案(41页).pptx。让数据安全合规地创造价值(15页 PPT).pptx。大型集团数据安全应急预案(57页).docx。数据安全治理与评估服务业务介绍.pptx。数据安全管理实践(17页).pptx。大数据安全架构设计方案.pptx。大数据安全规划总体方案.pptx。数据库安全综合治理方案.pptx。医疗数据安全建设方案.pptx。数据安全框架规划图.pptx。数据安全治理方案.pptx。

cdfunlove的博客 47

DAY21打卡

今天有事没有学新的内容,但是有复习前面的内容。

yiqieyouliyuwo的博客 361

基于YOLO的智能视频监控异常行为检测研究:从算法原理到落地部署的全栈实践

本文深入探讨如何利用 YOLO(You Only Look Once)系列算法构建一套端到端的异常行为检测系统。文章首先回顾 YOLOv8 在时空建模上的局限,然后提出“YOLO-STA(Spatio-Temporal Aggregation)”轻量级改进框架,在公开数据集 UCF-Crime 上将异常行为检测的 mAP@0.5 从 72.4 提升到 80.1;接着给出完整训练、推理、部署的 Python 代码(PyTorch + TensorRT),并介绍如何仅用 4 GB 显存的 Jetson Xavi

博客 1335

华为OD机试 新系统 双机位C卷 真题题库目录|机考题库 + 算法考点详解

本文整理华为OD机试(机考) 新系统真题题库,提供高频考点精析与详细题目内容,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解 和 在线OJ做题练习。华为OD机试新系统真题题库。

qq_45776114的博客 10万+

day 21 python打卡

仔细回顾一下之前21天的内容,没跟上进度的同学补一下进度。

2503_91756091的博客 175

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python打卡训练营day21-降维算法

与特征筛选相比,特征筛选是从原始特征集中选择部分子集,保留的仍是原始特征,仅去除冗余或不相关的特征。之前经常使用的心脏病数据集,有13个特征,303个样本,是比较合理的数据集形状,一般不会特别要求进行降维(当然也可以尝试进行降维去除噪声),不过在之前day16的聚类后进行可视化时使用了降维,方便观察特征与标签的关系。X_selected 是之前筛选好特征的DataFrame变量,进行降维后使用新的X_PCA进行训练,与未降维的数据训练效果进行对比即可。缓解过拟合:去除冗余特征后,模型泛化能力更强。

sak77的博客 263

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Day21 python打卡

题目 :使用heart心脏病数据集,对比PCA和t-SNE在2D可视化中的表现差异,并分析原因。(要求:包含数据预处理、两种降维方法的实现、可视化对比图、结果分析)可以考虑对比下在某些特定数据集上t-sne的可视化和pca可视化的区别。3. 缓解维度灾难 :高维空间中数据稀疏,基于距离的算法(如KNN)性能下降,降维可改善。5. 多模态数据融合 :将不同来源的高维特征(如文本+图像)统一到低维空间。还有一些其他的降维方式,也就是最重要的词向量的加工,我们未来再说。一、降维的主要应用场景。

m0_74197500的博客 294

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python学习打卡:DAY 21 常见的降维算法

还有一些其他的降维方式,也就是最重要的词向量的加工,我们未来再说。

qq_57589581的博客 164

Python打卡 DAY 21

知识点回顾:1.LDA线性判别2.PCA主成分分析3.t-sne降维作业:自由作业:探索下什么时候用到降维?降维的主要应用?对比下在某些特定数据集上t-sne的可视化和pca可视化的区别。

2401_86098690的博客 964

Python打卡训练营学习记录Day21

@浙大疏锦行

FanfanPyt的博客 189

Python训练营打卡Day21

t-SNE 是一种强大的非线性降维技术,主要用于高维数据的可视化。它通过在低维空间中保持高维空间中数据点之间的局部相似性(邻域关系)来工作。与PCA关注全局方差不同,t-SNE 更关注局部细节。理解它的超参数(尤其是困惑度)和结果的正确解读方式非常重要。

m0_70431145的博客 2170

day21python打卡

降维是处理高维数据的核心工具,选择合适方法需权衡数据特性(线性/非线性)、任务目标(可视化/去噪/提速)和计算资源。PCA与t-SNE的对比体现了线性与非线性方法在保留数据结构上的本质差异。浙大疏锦行。

qq_58459892的博客 762

Python训练营打卡Day21(2025.5.10)

【代码】Python训练营打卡Day21(2025.5.10)

2301_80505456的博客 195

python学习打卡day21

高维数据难以直接可视化(如超过3维),通过降维(如PCA、t-SNE、UMAP)投影到2D/3D空间,揭示数据分布、聚类或流形结构。适用算法:t-SNE(非线性可视化)、PCA(线性全局结构)、UMAP(高效非线性)。高维特征导致计算成本高且易过拟合(如文本、图像数据),降维可减少参数数量,提升效率。适用算法:PCA、LDA(有监督分类场景)、Autoencoder(深度学习方法)。适用算法:PCA(最大化方差去噪)、ICA(独立成分分析)。适用算法:LDA(优化类间距离)、NCA(邻域成分分析)。

2201_75852821的博客 1033

python学习DAY21打卡

PCA 的目标是保留数据的全局方差,而 t-SNE 的核心目标是在高维空间中相似的数据点,在降维后的低维空间中也应该保持相似(即彼此靠近),而不相似的点则应该相距较远。作为降维技术时,其核心目标是找到一个低维特征子空间(即原始特征的线性组合),使得在该子空间中,不同类别的数据点尽可能地分开(类间距离最大化),而同一类别的数据点尽可能地聚集(类内方差最小化)。LDA 降维后的维度(即生成的判别特征的数量)有一个严格的上限: min(n_features, n_classes - 1)。

m0_55265967的博客 938

Python训练打卡Day21

刷熟悉常见的降维算法

m0_58811034的博客 723

python打卡day21

【代码】python打卡day21。

qq_47910226的博客 368
上一篇: python打卡DAY20
下一篇: python打卡DAY22
Bugabooo
博客等级 码龄2年 166粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值