2020-10-06机器学习基础与原型搭建

该文介绍了机器学习中数据预处理的步骤,包括检查空值比例并填充,计算特征偏度,调整数值分布,转换分类变量,以及训练集和测试集的划分。此外,还涉及了特征重要性的检测,并使用Lasso模型进行特征筛选。最后,通过KNN模型展示了基础模型训练与预测的过程。
摘要由CSDN通过智能技术生成

1. 内容

本学习材料主要包括以下四个方面的内容
* 机器学习的基础介绍
* 特征工程与特征筛选
* 基础模型的训练与预测
* 机器学习实验流程


3. 特征工程与特征筛选

3.1 查看空值比例

## 查看空值比例
data_na = (data.isnull().sum()/len(data))*100
data_na = data_na.drop(data_na[data_na == 0].index).sort_values(ascending=False)
missing_data = pd.DataFrame(data_na)
missing_data.columns=['缺失比例']
missing_data

3.2 绘制空值比例的条形图

## 绘制空值比例的条形图
plt.figure(figsize=(15,10))
sns.barplot(x=data_na.index, y=data_na)
plt.xlabel('特征', fontsize=15)
plt.ylabel('缺失比例', fontsize=15)

3.3 缺省值填充

## 对于数值型变量的缺失值用中位数进行填充
feature1 = ['最低血压','腰围','最高血压','体重指数','肥胖腰围','身高','体重','好胆固醇','总胆固醇','坏胆固醇']
for i in feature1:
    data[i] = data[i].fillna(data[i].median())
## 对于分类型变量的缺失值用众数进行填充
feature2 = ['收入','未婚','视力不佳','高血压','慢性疲劳','肝炎','教育','糖尿病']
for i in feature2:
    data[i] = data[i].fillna(data[i].mode())
    data[i] = data[i].fillna(0.0)    ##上面一行插不上,不知道为啥

3.4 特征偏度计算

## 计算特征偏度
from scipy.stats import skew
skewed_feats = data.apply(lambda x: skew(x.dropna())).sort_values(ascending=False)
skewness = pd.DataFrame(skewed_feats)
skewness.columns=['skewness']
skewness

3.5 数值分布正态分布

# 对偏态分布的数据进行变换(Box-Cox),使其更加服从正态分布
from scipy.special import boxcox1p
skewness = skewness[abs(skewness) > 0.75]
print('There are {} skewed numerical features'.format(skewness.shape[0]))

skewed_features = skewness.index
## 仅对数值型变量进行标准化
skew_features=['体重指数','体重','好胆固醇', '最高血压','腰围','坏胆固醇',
               '总胆固醇', '年龄', '身高', '最低血压']
lam = 0.15
for feat in skew_features:
    data[feat] = boxcox1p(data[feat], lam)

## 转换哑变量
obj=['性别','区域','血脂异常','PVD','体育活动','教育','收入','未婚','视力不佳','饮酒','高血压','家庭高血压','慢性疲劳','肝炎','家族肝炎','护理来源','糖尿病','家族糖尿病']
for i in obj:
    data[i]=data[i].astype(object)
data = pd.get_dummies(data)
data.head()

3.6 训练集测试集划分

train = data[0:700]
train_x = train.drop('ALF', axis=1)
train_y = train['ALF']
val = data[700:]
val_x = val.drop('ALF', axis=1)
val_y = val['ALF']

3.7 特征筛选

## 特征重要性检测
from sklearn.linear_model import Lasso
## 拟合lasso模型
lasso=Lasso(alpha=0.001)
lasso.fit(train_x,train_y)
## 计算特征重要性
FI_lasso = pd.DataFrame({"Feature Importance":lasso.coef_}, index=train_x.columns)
FI_lasso.sort_values("Feature Importance",ascending=False)

3.8 基础模型训练与预测

## KNN
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
X=data.drop('ALF',axis=1)
y=data['ALF']
## 对不同的k算分
scores=[]
for i in range(1,11):
    knn=KNeighborsClassifier(n_neighbors=i) #选择邻近的i个点
    score=cross_val_score(knn,X,y,cv=5,scoring='accuracy')#评分方式为accuracy
    scores.append(score.mean())
## 画图
plt.plot(scores)
xtick=['1','2','3','4','5','6','7','8','9','10']
plt.xticks(range(0,10),xtick)
plt.show()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值