PythonML-Day01: sklearn
ML-Day011.机器学习的数据大多都是文件,比如csv文件2.Pandas: 读取数据工具 基本的数据处理3.缺失值: 数据转换4.重复值: 不需要去重5.sklearn: 对于特征数据提供了强大的支持- Python的机器学习工具- 许多知名的机器学习算法的实现- 文档完善,容易上手,丰富的API6.特征工程: 将原始数据转换为 能更好...
·
ML-Day01
1.机器学习的数据大多都是文件,比如csv文件
2.Pandas: 读取数据工具 基本的数据处理
3.缺失值: 数据转换
4.重复值: 不需要去重
5.sklearn: 对于特征数据提供了强大的支持
- Python的机器学习工具
- 许多知名的机器学习算法的实现
- 文档完善,容易上手,丰富的API
6.特征工程: 将原始数据转换为 能更好的代表预测模型特征的过程,从而
- 提高对未知数据预测的准确性
7.特征工程直接影响预测结果
8.特征抽取: 将具体数据转换成具体的特征数值,进行特征值化【为了计算机更高的识别】
9.特征抽取 - 字典: from sklearn.feature_extraction import DictVectorizer:
- 传入一个可迭代的字典数组,返回一个one-hot 编码 的特征矩阵
- 对字典数据进行特征值化
- 把字典中某些类别的数据转换成特征值,比如字符串
- one-hot 编码:
10.特征抽取 - 文本 [CountVectorizer]: sklearn.feature_extraction.text.CountVectorizer
- 传入一个可迭代的文本[字符串]数组,返回一个one-hot 编码 的特征矩阵
- 针对传入列表文章中所有出现的词,重复的只看做一次,整理出新的词频列表
- 对每个词,在数组的每个元素[每篇文章]中是否出现以及次数,用0/1/2 表示
- 单个字母不参与统计
- 对于中文,使用jieba 分词 import jieba jieba.cut("")
11.特征抽取 - 文本 [TfidfVectorizer]:from sklearn.feature_extraction.text import TfidfVectorizer
- 如果某个词或者短语在一篇文章中出现的概率高,词频大,并且在其他文章中很少出现
- 则说明这个词适合作为分类的依据
- tf-idf 用来评估一个字词对于一个文件集中的某一个文件的重要程度
- tf:词频 term frequencey
- idf: 逆文档频率 log(总文档数量/该词出现的文档数量)
- 重要性 = tf * idf
12.数据预处理
- 通过特定的统计方法(数学方法),将数值型数据转换成算法要求的数据
13.数据预处理 - 归一化:from sklearn.preprocessing import MinMaxScaler
- 多个特征同等重要的时候,需要进行归一化
- 因为不同特征的数值大小肯定不一样,有的单位是1000,有的单位是0.1
- 所以,要将这些数据统一到一个相同的固定的区间上,这就是归一化
- 通过对原始数据进行变换 把数据映射到[默认0/1之间]
- 公式: X` = x - min / max -min X`` = X` * (mx - mi) + mi
- max 指 每一列的最大值
- min 指 每一列的最小值
- X`` 为最终结果
- [mx,mi] 为归一化区间端点,默认为[0,1]
- MinMaxScalar.fit_transform(X)
- X :numpy array 格式的数据[n_samples, n_features]
- 返回转换后的形状相同的array
- 缺点:异常点对最大值最小值影响很大,所以,归一化对于异常点的处理稍弱
- 鲁棒性较差[稳定性]
- 只适合传统的精确小数据场景
14.数据预处理 - 标准化:from sklearn.preprocessing import StandardScaler
- 通过对原始数据进行变换,把原始数据变换到 均值为0,标准差为1 的范围内
- 公式: X` = x - mean / &
- 公式说明: 对于每一列,mean 为均值, & 为保准差
- & = var[方差] ^ 0.5
- var[方差] = ((x1 - mean)^2 + ... +(xn - mean)^2) / n[样本数]
- 方差是考量数据稳定性的标识
- 出现异常点,影响不是很大
- 适合现代嘈杂大数据场景
- 在已有样本非常多的情况下稳定
15.数据预处理 - 处理缺失值:插值
- Imputer(missing_values='NaN',strategy='mean',axis=0)
- Imputer.fit_transform(X)
- X numpy array 格式的数据
- 返回值: 转换后形状相同的Array
- 缺失值必须是 np.nan格式, 属于float类型
16.数据降维
- 维:特征值的数量
- 特征选择 / 主成分分析
17.数据降维 - 特征选择
- 为什么?
- 1.冗余 - 部分特征,相似性高,容易消耗计算性能
- 2.噪声 - 部分特征对预测结果有影响
- 特征选择 就是单纯的从提取到的所有的特征中,选择部分特征作为训练集特征
- 主要方法
- 过滤式:通过方差去过滤
- 嵌入式: 正则化、决策树
- 包裹式
- 神经网络
18.特征选择 - 方差过滤: from sklearn.feature_selection import VarianceThreshold
- 删除所有低方差的特征
- VarianceThreshold(threshold = 0.0)
- variance.fit_transform(x)
- x : 输入,np array 数据
- threshold 方差阈值
- 返回值:训练集差异低于阈值的特征列将被删除
- 默认保留所有非零方差(完全一样)的特征列
19.数据降维 - 主成分分析PCA
- PCA 是一种分析、简化数据的技术
- 数据维数压缩、尽可能降低元数据的特征数量[复杂度],损失少量信息
- 作用:可以削减回归分析或者聚类分析中特征的数量
- 使用前提: 当你的数据特征数量达到上百的时候,考虑数据简化
- 结果: 特征数量减少,数据也会发生改变
- PCA(n_components = None)
- n_components 损失系数(0-1): 一般为90% - 95%, 即损失0-5%
- pca.fit_transform(x) -- 输入array, 返回转换后减少纬度的数据array
20.源码(一)
import jieba
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import VarianceThreshold
from sklearn.decomposition import PCA
import pandas
def dic():
"""
字典数据抽取 DictVectorizer
:return: sparse矩阵
"""
# 字典数据
dit_data = [{'city': '北京', 'temp': 100},
{'city': '广州', 'temp': 70},
{'city': '深圳', 'temp': 90}]
# 实例化一个转换器
dit = DictVectorizer()
# 调用fit_transform 转换方法
data = dit.fit_transform(dit_data)
# get_featurenames
print(dit.get_feature_names())
# inverse_transform
print(dit.inverse_transform(data))
def cut_word():
con1 = jieba.cut("生活如酒,或芳香,或浓烈,因为诚实,它变得醇厚;生活如歌,或高昂,或低沉,因为守信,它变得悦耳; 生活如画,或明丽,或素雅,因为诚信,它变得美丽")
con2 = jieba.cut("若能掬起一捧月光,我选择最柔和的;若能采来香山红叶,我选择最艳丽的;若能摘下满天星辰,我选择最明亮的。也许你会说,我的选择不是最好,但我的选择,我相信")
con3 = jieba.cut("当三闾大夫抱着石头与江水相拥,当西楚霸王自刎时的鲜血染红了整片夕阳!")
c1 = " ".join(con1)
c2 = " ".join(con2)
c3 = " ".join(con3)
return c1, c2, c3
def countVec():
"""
对文本进行特征值化
:return:
"""
c1, c2, c3 = cut_word()
dt = [c1, c2, c3]
cv = CountVectorizer()
data = cv.fit_transform(dt)
print(cv.get_feature_names())
print(data.toarray())
def tfidfVec():
"""
tfidf 文本特征值化
:return:
"""
c1, c2, c3 = cut_word()
dt = [c1, c2, c3]
tf = TfidfVectorizer()
data = tf.fit_transform(dt)
print(tf.get_feature_names())
print(data.toarray())
def minMaxScalar():
"""
对二维数组数据进行归一化处理
:return:
"""
dt = [[90, 2, 10, 40],
[60, 4, 15, 45],
[75, 3, 13, 46]]
mm = MinMaxScaler(feature_range=(2, 3))
data = mm.fit_transform(dt)
print(data)
def standardScalar():
"""
对二维数组数据进行标准化处理
:return:
"""
dt = [[1, -1, 3],
[2, 4, 2],
[4, 6, -1]]
sd = StandardScaler()
data = sd.fit_transform(dt)
print(data)
def variance():
"""
方差过滤
:return:
"""
dt = [[0, 2, 0, 3],
[0, 1, 4, 3],
[0, 1, 1, 3]]
var = VarianceThreshold(threshold=0.1)
data = var.fit_transform(dt)
print(data)
def pca():
"""
特征降维 - PCA主成分分析
:return:
"""
dt = [[2, 8, 4, 5],
[6, 3, 0, 8],
[5, 4, 9, 1]]
pca = PCA(n_components=0.9)
data = pca.fit_transform(dt)
print(data)
if __name__ == '__main__':
pca()
21.源码(二) - PCA降维
#!/usr/bin/env python
# coding: utf-8
from sklearn.decomposition import PCA
import pandas as pd
# 读取四张表的数据
prior = pd.read_csv("./KaggleData/order_products__prior.csv")
products = pd.read_csv("./KaggleData/products.csv")
orders = pd.read_csv("./KaggleData/orders.csv")
aisles = pd.read_csv("./KaggleData/aisles.csv")
# 合并4张表到一张表
_mg = pd.merge(prior, products, on=['product_id', 'product_id'])
_mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])
mt.head(10)
# 交叉表 -- 特殊的分组工具
cross = pd.crosstab(mt['user_id'], mt['aisle'])
# 进行主成分分析,进行降维操作
pca = PCA(n_components=0.9)
data = pca.fit_transform(cross)
data.shape
更多推荐
已为社区贡献3条内容
所有评论(0)