python利用特征进行可视化样本显示_利用Python进行机器学习之特征选择

5f9052fff4f2f980990154a437aec3fc.png

毫无疑问,解决一个问题最重要的是恰当选取特征、甚至创造特征的能力,这叫做特征选取和特征工程。对于特征选取工作,我个人认为分为两个方面:

1)利用python中已有的算法进行特征选取。

2)人为分析各个变量特征与目标值之间的关系,包括利用图表等比较直观的手段方法,剔除无意义或者说不重要的特征变量,使得模型更加精炼高效。

一、scikit-learn中树算法

from sklearn import metrics

from sklearn.ensemble import ExtraTreesClassifier

model = ExtraTreesClassifier()

model.fit(X, y)

# display the relative importance of each attribute

print(model.feature_importances_)

二、RFE搜索算法

另一种算法是基于对特征子集的高效搜索,从而找到最好的子集,意味着演化了的模型在这个子集上有最好的质量。递归特征消除算法(RFE)是这些搜索算法的其中之一,Scikit-Learn库同样也有提供。

三、利用LassoCV进行特征选择

#!/usr/bin/python

import pandas as pd

import numpy as np

import csv as csv

import matplotlib

import matplotlib.pyplot as plt

from sklearn.feature_selection import RFE

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()

# create the RFE model and select 3 attributes

rfe = RFE(model, 3)

rfe = rfe.fit(X, y)

# summarize the selection of the attributes

print(rfe.support_)

print(rfe.ranking_)

from sklearn.linear_model import Ridge, RidgeCV, ElasticNet, LassoCV, LassoLarsCV

from sklearn.model_selection import cross_val_score

train = pd.read_csv('train.csv', header=0) # Load the train file into a

dataframe

df = pd.get_dummies(train.iloc[:,1:-1])

df = df.fillna(df.mean())

X_train = df

y = train.price

def rmse_cv(model):

rmse= np.sqrt(-cross_val_score(model, X_train, y,

scoring="neg_mean_squared_error", cv = 3))

return(rmse)

#调用LassoCV函数,并进行交叉验证,默认cv=3 model_lasso = LassoCV(alphas = [0.1,1,0.001, 0.0005]).fit(X_train, y)

#模型所选择的最优正则化参数alpha print(model_lasso.alpha_)

#各特征列的参数值或者说权重参数,为0代表该特征被模型剔除了 print(model_lasso.coef_)

#输出看模型最终选择了几个特征向量,剔除了几个特征向量 coef = pd.Series(model_lasso.coef_, index = X_train.columns)

print("Lasso picked " + str(sum(coef != 0)) + " variables and eliminated the other " +

str(sum(coef == 0)) + " variables")

#输出所选择的最优正则化参数情况下的残差平均值,因为是3折,所以看平均值 print(rmse_cv(model_lasso).mean())

#画出特征变量的重要程度,这里面选出前3个重要,后3个不重要的举例 imp_coef = pd.concat([coef.sort_values().head(3),

coef.sort_values().tail(3)])

matplotlib.rcParams['figure.figsize'] = (8.0, 10.0)

imp_coef.plot(kind = "barh")

plt.title("Coefficients in the Lasso Model")

plt.show()

从上述代码中可以看出,权重为0的特征就是被剔除的特征,从而进行了特征选择。还可以从图上直观看出哪些特征最重要。至于权重为负数的特征,还需要进一步分析研究。

LassoCV参考:

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoCV.html

#sklearn.linear_model.LassoCV

四、利用图表分析特征以及特征间的关系

1)分析特征值的分布情况,如果有异常最大、最小值,可以进行极值的截断

plt.figure(figsize=(8,6))

plt.scatter(range(train.shape[0]), np.sort(train.price_doc.values))

plt.xlabel('index', fontsize=12)

plt.ylabel('price', fontsize=12)

plt.show()

从图中可以看出,目标值price_doc有一些异常极大值散列出来,个别异常极值会干扰模型

的拟合。所以,可以截断极值。其它各特征列也可以采取该方式进行极值截断。

#截断极值,因为极值有时候可以认为是异常数值,会干扰模型的参数 ulimit = np.percentile(train.price_doc.values, 99)

llimit = np.percentile(train.price_doc.values, 1)

train['price_doc'].ix[train['price_doc']>ulimit] = ulimit

train['price_doc'].ix[train['price_doc']

2)分组进行分析

grouped_df = df.groupby('LotFrontage')['MSSubClass'].aggregate(np.mean).reset_index()

#根据LotFrontage进行分组聚合,并求出分组聚合后MSSubClass的平均值,reset_index()将分组后的结果转换成DataFrame形式

plt.figure(figsize=(12,8))

sns.barplot(grouped_df.LotFrontage.values, grouped_df.MSSubClass.values, alpha=0.9,

color='red')

plt.ylabel('MSSubClass', fontsize=12)

plt.xlabel('LotFrontage', fontsize=12)

plt.xticks(rotation='vertical')

plt.show()

这种可以分析出目标值的一个变化情况,比如房屋价格的话,可以根据年进行分组聚合,展示出每年房屋价格均值的一个变化情况,从而能够看出时间对房屋价格的一个大致影响。比如,北京房屋价格随着时间的推进,每年都在上涨,这说明时间是一个很重要的特征变量。

3)统计数据集中各种数据类型出现的次数

#打出df各列数据类型,并利用rest_index()转成DataFrame形式。一共两列,1-列名,2-类型 df_type = df.dtypes.reset_index()

#将两列更改列名 df_type.columns = ["Count", "Column Type"]

#分组统计各个类型列出现的次数 df_type=df_type.groupby("Column Type").aggregate('count').reset_index()

4)图的形式展示缺失值情况

#将各列的缺失值情况统计出来,一共2列,1-列名,2-缺失值数量 missing_df = df.isnull().sum(axis=0).reset_index()

#赋予新列名 missing_df.columns = ['column_name', 'missing_count']

#将缺失值数量>0的列筛选出来 missing_df = missing_df.ix[missing_df['missing_count']>0]

#排序 missing_df = missing_df.sort_values(by='missing_count', ascending=True)

#将缺失值以图形形式展示出来 ind = np.arange(missing_df.shape[0])

width = 0.9

fig, ax = plt.subplots(figsize=(12,18))

rects = ax.barh(ind, missing_df.missing_count.values, color='y')

ax.set_yticks(ind)

ax.set_yticklabels(missing_df.column_name.values, rotation='horizontal')

ax.set_xlabel("Count of missing values")

ax.set_title("Number of missing values in each column")

plt.show()

5)利用联合分布图分析各重要特征变量与目标值的影响关系

#先对该特征进行极值截断 col = "full_sq"

ulimit = np.percentile(train_df[col].values, 99.5)

llimit = np.percentile(train_df[col].values, 0.5)

train_df[col].ix[train_df[col]>ulimit] = ulimit

train_df[col].ix[train_df[col]

#画出联合分布图 plt.figure(figsize=(12,12))

sns.jointplot(x=np.log1p(train_df.full_sq.values),

y=np.log1p(train_df.price_doc.values), size=10)

plt.ylabel('Log of Price', fontsize=12)

plt.xlabel('Log of Total area in square metre', fontsize=12)

plt.show()

pearsonr表示两个变量的相关性系数。

6)pointplot画出变量间的关系

grouped_df = train_df.groupby('floor')['price_doc'].aggregate(np.median).reset_index()

plt.figure(figsize=(12,8))

sns.pointplot(grouped_df.floor.values, grouped_df.price_doc.values, alpha=0.8,

color=color[2])

plt.ylabel('Median Price', fontsize=12)

plt.xlabel('Floor number', fontsize=12)

plt.xticks(rotation='vertical')

plt.show()

2018/12/5 python进行机器学习(二)之特征选择 - 光彩照人 - 博客园

https://www.cnblogs.com/gczr/p/6802948.html 8/10

从中看出楼层数对价格的一个整体影响。

7)countplot展示出该特征值的数量分布情况

plt.figure(figsize=(12,8))

sns.countplot(x="price", data=df)

plt.ylabel('Count', fontsize=12)

plt.xlabel('Max floor number', fontsize=12)

plt.xticks(rotation='vertical')

plt.show()

展示出了每个价格的出现次数。

8)boxplot分析最高楼层对房屋价格的一个影响,尤其看中位价格的走势,是一个大致的判断。

plt.figure(figsize=(12,8))

sns.boxplot(x="max_floor", y="price_doc", data=train_df)

plt.ylabel('Median Price', fontsize=12)

plt.xlabel('Max Floor number', fontsize=12)

plt.xticks(rotation='vertical')

plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

甘肃2019年9月计算机二级报名入口,2019年9月甘肃计算机二级考试成绩查询入口...

【摘要】2019年9月份计算机二级考试已经圆满结束,参加考试的小伙伴们已经迫不及待的想要知道成绩了吧,小编对2019年9月甘肃计算机二级考试成绩查询入口进行了整理,参加9月份考试的朋友们到时候记得按时查询成绩哦!想要了解更多计算…

FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库

简介FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库从 .NET 和 .NET Core 发送电子邮件的最简单方法。将 Razor 用于电子邮件模板并使用 SendGrid、MailGun、SMTP 等进行发送Nuget包•FluentEmail.Core - 域模型•FluentEmail.Smtp - 通过 SMTP 服务器发送电子邮件•Flu…

安装MySql出现Error Nr.1045的解决办法

如图,最后一步出现这个错误框 这是因为上次安装过MySql,其用户数据在卸载的时候没有被删除掉,解决办法如下: 显示隐藏的文件夹,打开C盘,找到下图文件删除之 删除之后再安装一遍MySQL,就可以了转…

python网易云_用python爬虫爬取网易云音乐

标签: 使用python爬虫爬取网易云音乐 需要使用的模块 只需要requests模块和os模块即可 开始工作 先去网易云音乐网页版找一下你想要听的歌曲点击进去。按键盘F12打开网页调试工具,点击Network就可以查看网络请求的相关信息,选择XHR,然后可以看…

android 固定底部 布局_Android系统列表控件

在android系统控件中,有多个控件可以展示列表数据。一、ListView该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动。ListView控件以列表的形式展示具体内容,并且能够根据数据的长度自…

.NetCore中IdentityServer使用nginx-proxy的一次排错经历

前言最近在看 Duende.IdentityServer.Admin,本地使用IIS Express跑了一下源码,也看了一遍的代码,决定使用他们的模板创建一个Demo,部署在本地的Docker环境中,也算是踩一下坑吧。以下不会详细介绍项目的部署&#xff0c…

nmap脚本使用总结

原文链接:http://drops.wooyun.org/tips/2188 0x00 前言: nmap的基本介绍和基本使用方法,在乌云知识库中已经有人提交过,讲的比较详细,在此文中就不再讲述。 具体链接:http://drops.wooyun.org/tips/2002 本…

身份管理软件公司Okta计划IPO,目标融资1亿美元

Okta是一家专门提供身份管理和单点登陆(SSO)软件的公司。今日公司提交了一份S-1表格正式启动了IPO程序。根据文件内容显示,Okta计划在首次公开募股中融资1亿美元。 公司表示,Okta将在纳斯达克上市,股票代码为OKTA。 即…

jmeter对乱码如何处理_JMeter读取 Excel 表中用例数据实现接口压测

传统的接口测试,都是在接口中手动输入不同用例准备的多种场景参数数据,一遍一遍的输入来执行多个不同的用例,但是现在利用excel表格准备各种类型的数据,使用Jmeter中Jmeter CSV Data Set Config参数化实现可设置的、一次性的读取e…

C# 利用.NET 升级助手将.NET Framework项目升级为.NET 6

概述.NET6 正式版本已经发布有一阵子了,今天我就体验一下如何将.NET Framework的项目升级为.NET 6.升级条件:Windows 操作系统.NET 6 SDKVisual Studio 2022 17.0 或更高版本环境准备①首先是VS2022下载,直接上微软官方网站,下载地…

城市遥感动态监测管理系统

1.系统概述 随着全国各城市数字化进程的发展,高分辨率遥感影像和数字航空影像为“数字城市”的建设提供了丰富的数据源。近年来,遥感影像的空间分辨率和光谱分辨率的明显提高,使得高分辨率遥感影像和数字航空影像的应用得到了极大的延伸。在城…

3月第4周全球域名商TOP15:万网第四 涨幅居亚

IDC评述网(idcps.com)04月03日报道:据WebHosting.info公布的最新数据显示,在3月第4周,全球域名商域名总量十五强排行榜中,美国占10个席位,成为最大赢家。其次是中国,有3家域名商上榜…

【Blog.Core开源】框架集成部门权限

(Blog.Core框架功能点概述)Blog.Core开源四年啦,一行行代码凝结了大家的热情和心血,基本功能骨架已完成,欢迎更多的公司和企业使用哟。真实公司留言盖楼可获得一对一技术指导:https://github.com/anjoy8/Bl…

[一个经典的多线程同步问题]解决方案一:关键段CS

前面提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题。 本文先介绍如何使用关键段,然后再深层次的分析下关键段的实现机制和原理。 关键段CRITICAL_SECTION一共就四个函数,下面说一下这四个函数的原型…

服务器线程数一直增加,.NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长...

一个 asp.net core 站点,之前运行在Linux 服务器上,运行一段时间后有时站点会挂掉,在日志中记录很多“EMFILE too many open files”的错误:Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException: Error -24 EMF…

python种颜色循环_Python 实现一个颜色色值转换的小工具

需求说明 公司的 UI 设计小哥,已经转用 Zeplin 很久了。Zeplin 的设计稿展示页面的颜色色值使用十进制的 RGB 表示的,在 Android 中的颜色表示大多情况下都需要十六进制的 RGB 表示。我的数学没有好到直接看到十进制就可以心算得到十六进制的结果&#x…

bugly中批量隐藏版本

App项目使用Bugly的内测分发功能进行整包的测试,但日积月累之后,版本就会特别多。而线上同时跑的版本可能不过三个左右,那么多版本会干扰到查看崩溃、选择版本,如何隐藏呢? 右上角,更多 –> 产品设置 –…

检查点(Checkpoint)过程如何处理未提交的事务

每次我讲解SQL Server之前,我都会先简单谈下当我们执行查询时,在SQL Server内部发生了什么。执行一个SELECT语句非常简单,但是执行DML语句更加复杂,因为SQL Server要修改内存中的相关页,并在事务日志里记录整个事务。 …

机器学习工作坊 - 计算机视觉

点击上方蓝字关注我们(本文阅读时间:2分钟)活动介绍四月的 MS Learn 学堂,我们将进入机器学习专题。 本月三期 MS Learn 学堂,我们会以工作坊的形式,结合具体应用实例,带领大家实践计算机视觉、…

arcgis server 无法手动删除切片

背景 问题 场景如下: 切片放置在专门的文件服务器上,通过unc共享路径对外共享。文件服务器的OS为windows server2008R2想手动更新切片服务的切片。发现同一切片服务,有的比例级别文件夹可以删除或者重命名。有的比例级别不可以。不能删除的比…