机器学习—降维-特征选择6-1(过滤法)
使用过滤法对糖尿病数据集降维
主要步骤流程:
- 1. 导入包
- 2. 导入数据集
- 3. 数据预处理
- 3.1 检测缺失值
- 3.2 生成自变量和因变量
- 4. 使用不同的统计指标做特征选择
- 4.1 使用 方差 指标
- 4.2 使用 卡方检验 指标
- 5. 构建逻辑回归模型并评估模型性能
- 5.1 使用原始数据构建
- 5.1.1 数据预处理
- 5.1.2 构建模型
- 5.2 使用特征选择(方差法)后的数据构建
- 5.2.1 数据预处理
- 5.2.2 构建模型
- 5.3 使用特征选择(卡方检验)后的数据构建
- 5.3.1 数据预处理
- 5.3.2 构建模型
- 5.1 使用原始数据构建
1. 导入包
In [1]:
# 导入包
import numpy as np
import pandas as pd
2. 导入数据集
In [2]:
# 导入数据集
dataset = pd.read_csv('pima-indians-diabetes.csv')
dataset
Out[2]:
3. 数据预处理
3.1 检测缺失值
In [3]:
# 检测缺失值
null_df = dataset.isnull().sum()
null_df
Out[3]:
3.2 生成自变量和因变量
In [4]:
# 生成自变量和因变量
X = dataset.iloc[:,0:8].values
y = dataset.iloc[:,8].values
4. 使用不同的统计指标做特征选择
4.1 使用 方差 指标
In [6]:
# 使用不同的统计指标做特征选择
# 特征选择(方差法)
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif
test = SelectKBest(score_func=f_classif, k=4) # 只选择4个特征
fit = test.fit(X, y)
In [8]:
# 得到每个特征的分数
print(fit.scores_)
找 scores_ 值大的字段。前4个字段依次为:1 (plas), 5 (mass), 7 (age), 0 (preq)
In [7]:
# 得到筛选后的特征
features1 = fit.transform(X)
features1
Out[7]:
features1 存储着特征选择后的特征。后面构建模型时,自变量变为 features1,而不是X。
4.2 使用 卡方检验 指标
In [9]:
# 特征选择(卡方检验)
from sklearn.feature_selection import chi2
test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X, y)
In [10]:
# 得到每个特征的分数
print(fit.scores_)
找 scores_ 值大的字段。前4个字段依次为:4 (test), 1 (plas), 7 (age), 5 (mass)。这和用 方差法选取的字段不一致
In [11]:
# 得到筛选后的特征
features2 = fit.transform(X)
features2
Out[11]:
5. 构建逻辑回归模型并评估模型性能
5.1 使用原始数据构建
5.1.1 数据预处理
In [12]:
# 数据预处理
# 拆分数据集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0) # 拆分数据集
In [13]:
from sklearn.preprocessing import StandardScaler
sc = StandardScaler() # 特征缩放
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
5.1.2 构建模型
In [14]:
# 构建模型
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression(penalty='l2', C=1, class_weight='balanced', random_state = 0)
classifier.fit(X_train, y_train)
Out[14]:
In [15]:
# 预测测试集
y_pred = classifier.predict(X_test)
In [16]:
# 评估模型性能
from sklearn.metrics import accuracy_score
print(accuracy_score(y_test, y_pred))
5.2 使用特征选择(方差法)后的数据构建
5.2.1 数据预处理
In [17]:
# 数据预处理
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(features1, y, test_size = 0.25, random_state = 0) # 拆分数据集
In [18]:
# 特征缩放
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
5.2.2 构建模型
In [19]:
# 构建模型
classifier = LogisticRegression(penalty='l2', C=1, class_weight='balanced', random_state = 0)
classifier.fit(X_train, y_train)
Out[19]:
In [20]:
# 预测测试集
y_pred = classifier.predict(X_test)
In [21]:
# 评估模型性能
print(accuracy_score(y_test, y_pred))
5.3 使用特征选择(卡方检验)后的数据构建
5.3.1 数据预处理
In [22]:
# 数据预处理
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(features2, y, test_size = 0.25, random_state = 0) # 拆分数据集
In [23]:
# 特征缩放
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
5.3.2 构建模型
In [24]:
# 构建模型
classifier = LogisticRegression(penalty='l2', C=1, class_weight='balanced', random_state = 0)
classifier.fit(X_train, y_train)
Out[24]:
In [25]:
# 预测测试集
y_pred = classifier.predict(X_test)
In [26]:
# 评估模型性能
print(accuracy_score(y_test, y_pred))
结论:
- 降维不一定会带来模型性能的提升;
- 不同的降维算法,降维后的数据不同;
分类:
数据科学 / 机器学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)