Scikit-learn学习

 

目录

一,安装

二、数据的特征提取

1、字典特征提取

2、文本特征提取

3、数据的特征处理

4、缺失值的处理

5、特征降维

三、数据集

四、分类算法

1、K近邻算法

2、朴素贝叶斯算法

模型的选择与调优

3、决策树

4、随机森林

5、逻辑回归

五、回归算法

1、线性回归

欠拟合与过拟合

回归算法之岭回归

保存模型与载入模型

2、逻辑回归

六、非监督学习-聚类K-Means


 

一,安装

pip3 install Scikit-learn

 

二、数据的特征提取

  • 特征提取针对非连续型数据
  • 特征提取对文本等进行特征值化

特征提取API:sklearn.feature_extraction

1、字典特征提取

sklearn.feature_extraction.DictVectorizer

from sklearn.feature_extraction import DictVectorizer

dict = DictVectorizer(sparse=False)

data = dict.fit_transform(
    [{'name': 'Bob', 'age': 12, 'gender': 'male'}, {'name': 'Lucy', 'age': 15, 'gender': 'female'}])

print(dict.get_feature_names())
print(dict.inverse_transform(data))

print(data)

['age', 'gender=female', 'gender=male', 'name=Bob', 'name=Lucy']
[{'age': 12.0, 'gender=male': 1.0, 'name=Bob': 1.0}, {'age': 15.0, 'gender=female': 1.0, 'name=Lucy': 1.0}]
[[12.  0.  1.  1.  0.]
 [15.  1.  0.  0.  1.]] 

#特征分布采用了one-hot编码

  • DictVectorizer.fit_transform(X)       
    • X:字典或者包含字典的迭代器
    • 返回值:返回sparse矩阵
  • DictVectorizer.inverse_transform(X)
    • X:array数组或者sparse矩阵
    • 返回值:转换之前数据格式
  • DictVectorizer.get_feature_names()
    • 返回类别名称
  • DictVectorizer.transform(X)
    • 按照原先的标准转换

 

2、文本特征提取

sklearn.feature_extraction.text.CountVectorizer

  • CountVectorizer(max_df=1.0,min_df=1,…)
    • 返回词频矩阵
    • CountVectorizer.fit_transform(X,y)       
      • X:文本或者包含文本字符串的可迭代对象
      • 返回值:返回sparse矩阵
    • CountVectorizer.inverse_transform(X)
      • X:array数组或者sparse矩阵
    • 返回值:转换之前数据格式

    • CountVectorizer.get_feature_names()
      • 返回值:单词列表

使用方法:

  1. 实例化类CountVectorizer
  2. 调用fit_transform方法输入数据并转换 (注意返回格式,利用toarray()进行sparse矩阵转换array数组
from sklearn.feature_extraction.text import CountVectorizer

tc = CountVectorizer()
data = tc.fit_transform(['声明 一个 变量 的 方法', '定义 一个 函数 的 方法'])
print(tc.get_feature_names())

print(data)
print('-' * 10)
print(data.toarray())

print(type(data))

['一个', '函数', '变量', '声明', '定义', '方法']
  (0, 5)    1
  (0, 2)    1
  (0, 0)    1
  (0, 3)    1
  (1, 1)    1
  (1, 4)    1
  (1, 5)    1
  (1, 0)    1
----------
[[1 0 1 1 0 1]
 [1 1 0 0 1 1]]
<class 'scipy.sparse.csr.csr_matrix'>

特征值的分割是以字符数的空格为分割点做分割。单个字符(英文的单个字母、中文单字、标点)不会作为特征值,。 

from sklearn.feature_extraction.text import CountVectorizer
import jieba

c1 = jieba.cut('当前出现的问题,表面上是孩子为上学而纠结的问题,其实是这个家出现了问题。比如,家庭成员之间的沟通不顺畅,家人之间的爱没有流动,而且不是一天两天构成的,是许许多多个日子堆积起来的。')

c2 = jieba.cut(
    '追根求源,是夫妻之间的不和谐。遇事的时候,双方相互抱怨。孩子不上学了,我埋怨孩子爸爸教育方式简单粗暴、冷酷无情,他埋怨我对孩子没原则、没底线、没要求。仔细想来,这些埋怨竟然都是对的。孩子夹在中间,他不明白该往哪里去,他生活在撕扯中,他痛苦不堪!')

c3 = jieba.cut('问题一股脑儿地出现的时候,人会感到痛苦不堪,但这时恰恰是该长长吐口气的时候了!憋屈了那么久,装了那么久,是该释放的时候了,声嘶力竭地吵一架、狗血喷头地骂一场,感觉真好!')

cot1 = list(c1)
cot2 = list(c2)
cot3 = list(c3)

c1 = ' '.join(cot1)
c2 = ' '.join(cot2)
c3 = ' '.join(cot3)

cv = CountVectorizer()
data = cv.fit_transform([c1,c2,c3])

print(cv.get_feature_names())
print(data.toarray())

['一场', '一天两天', '一架', '一股脑儿', '上学', '不是', '中间', '之间', '人会', '仔细', '其实', '冷酷无情', '出现', '原则', '双方', '口气', '和谐', '哪里', '地吵', '地骂', '埋怨', '堆积起来', '声嘶力竭', '夫妻', '孩子', '家人', '家庭成员', '底线', '当前', '恰恰', '想来', '感到', '感觉', '憋屈', '抱怨', '撕扯', '教育', '方式', '日子', '时候', '明白', '构成', '比如', '沟通', '没有', '流动', '爸爸', '狗血喷头', '生活', '痛苦不堪', '相互', '竟然', '简单', '粗暴', '纠结', '而且', '表面', '要求', '许许多多', '该往', '这个', '这些', '这时', '追根求源', '遇事', '那么', '释放', '长长', '问题', '顺畅']
[[0 1 0 0 1 1 0 2 0 0 1 0 2 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 0 0 0 0 0 0
  0 0 1 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 0 0 0 0 0 3 1]
 [0 0 0 0 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 0 3 0 0 1 4 0 0 1 0 0 1 0 0 0 1 1
  1 1 0 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 0 0 0 1 0 1 0 1 0 1 1 0 0 0 0 0]
 [1 0 1 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0 1 0 1 1 1 0 0
  0 0 0 3 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 1 1 1 0]]

 

TF-IDF:sklearn.feature_extraction.text.TfidfVectorizer

逆向文件频率(inverse document frequency,IDF)是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到.

TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

  • TfidfVectorizer(stop_words=None,…)
    • 返回词的权重矩阵
    • TfidfVectorizer.fit_transform(X,y)       
      • X:文本或者包含文本字符串的可迭代对象
      • 返回值:返回sparse矩阵
    • TfidfVectorizer.inverse_transform(X)
      • X:array数组或者sparse矩阵
    • 返回值:转换之前数据格式

    • TfidfVectorizer.get_feature_names()
      • 返回值:单词列表
from sklearn.feature_extraction.text import TfidfVectorizer
tf = TfidfVectorizer()
data = tf.fit_transform([c1,c2,c3])

print(tf.get_feature_names())
print(data.toarray())

['一场', '一天两天', '一架', '一股脑儿', '上学', '不是', '中间', '之间', '人会', '仔细', '其实', '冷酷无情', '出现', '原则', '双方', '口气', '和谐', '哪里', '地吵', '地骂', '埋怨', '堆积起来', '声嘶力竭', '夫妻', '孩子', '家人', '家庭成员', '底线', '当前', '恰恰', '想来', '感到', '感觉', '憋屈', '抱怨', '撕扯', '教育', '方式', '日子', '时候', '明白', '构成', '比如', '沟通', '没有', '流动', '爸爸', '狗血喷头', '生活', '痛苦不堪', '相互', '竟然', '简单', '粗暴', '纠结', '而且', '表面', '要求', '许许多多', '该往', '这个', '这些', '这时', '追根求源', '遇事', '那么', '释放', '长长', '问题', '顺畅']
[[0.         0.18260587 0.         0.         0.13887647 0.18260587
  0.         0.27775294 0.         0.         0.18260587 0.
  0.27775294 0.         0.         0.         0.         0.
  0.         0.         0.         0.18260587 0.         0.
  0.13887647 0.18260587 0.18260587 0.         0.18260587 0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.18260587 0.         0.         0.18260587
  0.18260587 0.18260587 0.18260587 0.18260587 0.         0.
  0.         0.         0.         0.         0.         0.
  0.18260587 0.18260587 0.18260587 0.         0.18260587 0.
  0.18260587 0.         0.         0.         0.         0.
  0.         0.         0.41662942 0.18260587]
 [0.         0.         0.         0.         0.11144747 0.
  0.14654002 0.11144747 0.         0.14654002 0.         0.14654002
  0.         0.14654002 0.14654002 0.         0.14654002 0.14654002
  0.         0.         0.43962007 0.         0.         0.14654002
  0.44578986 0.         0.         0.14654002 0.         0.
  0.14654002 0.         0.         0.         0.14654002 0.14654002
  0.14654002 0.14654002 0.         0.11144747 0.14654002 0.
  0.         0.         0.         0.         0.14654002 0.
  0.14654002 0.11144747 0.14654002 0.14654002 0.14654002 0.14654002
  0.         0.         0.         0.14654002 0.         0.14654002
  0.         0.14654002 0.         0.14654002 0.14654002 0.
  0.         0.         0.         0.        ]
 [0.19266144 0.         0.19266144 0.19266144 0.         0.
  0.         0.         0.19266144 0.         0.         0.
  0.14652399 0.         0.         0.19266144 0.         0.
  0.19266144 0.19266144 0.         0.         0.19266144 0.
  0.         0.         0.         0.         0.         0.19266144
  0.         0.19266144 0.19266144 0.19266144 0.         0.
  0.         0.         0.         0.43957198 0.         0.
  0.         0.         0.         0.         0.         0.19266144
  0.         0.14652399 0.         0.         0.         0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.19266144 0.         0.         0.38532289
  0.19266144 0.19266144 0.14652399 0.        ]]
 

3、数据的特征处理

特征处理:通过特定的统计方法(数学方法)将数据转换成算法要求的数据

  • 数值型数据:标准缩放:

            1、归一化

            2、标准化

            3、缺失值

  • 类别型数据:one-hot编码
  • 时间类型:时间的切分

特征处理API:

sklearn. preprocessing 

归一化:X=[(x-min)/(max-min)] * (mx - mi) + mi

注:作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0

特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间

sklearn归一化API:  sklearn.preprocessing.MinMaxScaler

  • MinMaxScalar(feature_range=(0,1)…)
    • 每个特征缩放到给定范围(默认[0,1])
    • MinMaxScalar.fit_transform(X)       
      • X:numpy array格式的数据[n_samples,n_features]
      • 返回值:转换后的形状相同的array

使用:

1、实例化MinMaxScalar

2、通过fit_transform转换

from sklearn.preprocessing import MinMaxScaler

mm = MinMaxScaler(feature_range=(4,5))
data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)

[[5.         4.         4.         4.        ]
 [4.         5.         5.         4.83333333]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值