Scikit-learn机器学习基础

一,机器学习是从数据中自动分析获得规律,并利用规律对未知数据进行预测的方法。
二,机器学习中数据集的构成是:csv文件,而不是数据库。因为数据库的读取速度有限制并且格式不符合。数据构成:特征值+目标值(有的数据集可以没有目标值)。
三,特征工程
作用:对特征进行处理,将原始数据转换为更好地代表预测模型地潜在问题地特征,从而提高预测效果。
1, 特征抽取:对文本等数据进行特征值化
sklearn特征抽取API:sklearn.feature_extraction
(1) 字典特征抽取
我们将城市和环境作为字典数据,来进行特征的提取。
sklearn.feature_extraction.DictVectorizer(sparse = True)
将映射列表转换为Numpy数组或scipy.sparse矩阵
sparse 是否转换为scipy.sparse矩阵表示,默认开启
方法:
fit_transform(X,y)
应用并转化映射列表X,y为目标类型
inverse_transform(X[, dict_type])
将Numpy数组或scipy.sparse矩阵转换为映射列表
代码如下:

from sklearn.feature_extraction import DictVectorizer
onehot=DictVectorizer(sparse=False)#需要先生成实例对象,如果为True则返回sparse数组,需要用toarray转化
instances=[{'city':'北京','temperature':100},{'city': '上海','temperature':60}, {'city': '深圳','temperature':30}]
x=onehot.fit_transform(instances)#才能调用方法
print(x)
print(onehot.inverse_transform(x,dict_type=dict))
print(onehot.feature_names_)

结果如下:

[[  0.   1.   0. 100.]
 [  1.   0.   0.  60.]
 [  0.   0.   1.  30.]]
[{'city=北京': 1.0, 'temperature': 100.0}, {'city=上海': 1.0, 'temperature': 60.0}, {'city=深圳': 1.0, 'temperature': 30.0}]
['city=上海', 'city=北京', 'city=深圳', 'temperature']

作用主要是进行分类。

(2)文本特征抽取(英文)

from sklearn.feature_extraction.text import CountVectorizer
cv=CountVectorizer()#无法传入参数
content = ["life is short,i like python","life is too long,i dislike python"]
print(cv.fit_transform(content).toarray())
print(cv.get_feature_names())
#单个字母不参与特征抽取

结果如下:

[[0 1 1 1 0 1 1 0]
 [1 1 1 0 1 1 0 1]]
['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']

注:该方法本质是求各特征的出现次数,所以可以出现两次,多次的情况。本例为特殊。

(3)文本特征抽取(中文)
依然可用sklearn.feature_extraction.text.CountVectorizer作为API但是需要先对中文进行分词,与英文相同,用空格隔开,这里用jieba模块自动进行分词.

from sklearn.feature_extraction.text import CountVectorizer
import jieba
def ZW(contents):
    cv=CountVectorizer()#无法传入参数
    a=[]
    for i in contents:
        a.append(jb(i))
    print(a)
    print(cv.fit_transform(a).toarray())
    print(cv.get_feature_names())
#单个字母不参与特征抽取
def jb(content):
    x=jieba.cut(content)#这里返回的是词语迭代器
    li=list(x)
    jb=' '.join(li)
    return jb

if __name__=='__main__':
    a=['张梦是个紫的猪','张梦是个红的猪','张梦是个能吃的猪']
    ZW(a)

结果如下:

['张梦是 个 紫 的 猪', '张梦是 个 红 的 猪', '张梦是 个 能 吃 的 猪']
[[1]
 [1]
 [1]]
['张梦是']

因为单个字不作为特征

(4)特征抽取中文(tf-df方法)
为什么要用这个方法?因为如果某个词或短语在一篇文章中出现概率很高,在其他文章很少出现,那么就认为该词适合分类。如’明天‘,’今天‘等词就不适合分类。
将上面的count改为Tfidf即可

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def ZW(contents):
    cv=CountVectorizer()#无法传入参数
    a=[]
    for i in contents:
        a.append(jb(i))
    print(a)
    print(cv.fit_transform(a).toarray())
    print(cv.get_feature_names())
#单个字母不参与特征抽取
def jb(content):
    x=jieba.cut(content)#这里返回的是词语迭代器
    li=list(x)
    jb=' '.join(li)
    return jb
def TF(contents):
    cv=TfidfVectorizer()#无法传入参数
    a=[]
    for i in contents:
        a.append(jb(i))
    print(a)
    print(cv.fit_transform(a).toarray())
    print(cv.get_feature_names())

if __name__=='__main__':
    a=['为什么要用这个方法?因为如果某个词或短语在一篇文章中出现概率很高,','在其他文章很少出现,那么就认为该词适合分类。','如’明天‘,’今天‘等词就不适合分类']
    TF(a)

结果如下:

['为什么 要 用 这个 方法 ? 因为 如果 某个 词 或 短语 在 一篇 文章 中 出现 概率 很 高 ,', '在 其他 文章 很少 出现 , 那么 就 认为 该词 适合 分类 。', '如 ’ 明天 ‘ , ’ 今天 ‘ 等 词 就 不 适合 分类']
[[0.31377734 0.31377734 0.         0.         0.23863575 0.
  0.31377734 0.31377734 0.         0.23863575 0.31377734 0.
  0.31377734 0.31377734 0.31377734 0.         0.         0.31377734
  0.         0.        ]
 [0.         0.         0.         0.36977238 0.28122142 0.28122142
  0.         0.         0.36977238 0.28122142 0.         0.
  0.         0.         0.         0.36977238 0.36977238 0.
  0.28122142 0.36977238]
 [0.         0.         0.5628291  0.         0.         0.42804604
  0.         0.         0.         0.         0.         0.5628291
  0.         0.         0.         0.         0.         0.
  0.42804604 0.        ]]
['一篇', '为什么', '今天', '其他', '出现', '分类', '因为', '如果', '很少', '文章', '方法', '明天', '某个', '概率', '短语', '认为', '该词', '这个', '适合', '那么']
Loading model cost 0.769 seconds.

会显示重要度

(5)图像抽取

2,特征预处理
对数据进行处理,转化为算法要求的数据。
特征处理API:sklearn.preprocessing
对数值进行预处理方法有(1)归一化(2)标准化(3)缺失值处理
对类别初始化:one_hot编码
对时间初始化:时间切分
在这里插入图片描述

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler,StandardScaler,Imputer
import jieba
import numpy as np
a=np.array([[1,2,3],
            [-4,-5,-6],
            [7,-8,9]])
mm=MinMaxScaler(feature_range=(2,3))#指定范围
x=mm.fit_transform(a)
print(x)
[[2.45454545 3.         2.6       ]
 [2.         2.3        2.        ]
 [3.         2.         3.        ]]
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler,StandardScaler,Imputer
import jieba
import numpy as np
a=np.array([[1,2,3],
            [-4,-5,-6],
            [7,-8,9]])
mm=MinMaxScaler(feature_range=(2,3))#指定范围
st=StandardScaler()
x=st.fit_transform(a)
print(x)
print(st.mean_)
[[-0.07412493  1.35244738  0.16222142]
 [-1.18599891 -0.31822291 -1.29777137]
 [ 1.26012384 -1.03422447  1.13554995]]
[ 1.33333333 -3.66666667  2.        ]
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler,StandardScaler,Imputer
import jieba
import numpy as np


im=Imputer(missing_values='NaN',strategy='mean',axis=0)
x=im.fit_transform([[1,2],
            [np.NaN,-5],
            [7,-8]])
print(x)

import numpy as np
from sklearn.impute import SimpleImputer
a = [[1, 2],
     [np.nan, -5],
     [7, -8]]

im = SimpleImputer(missing_values=np.nan, strategy='mean')
x = im.fit_transform(a)
print(x)#可正常运行

结果如下:

[[ 1.  2.]
C:\anaconda\lib\site-packages\sklearn\utils\deprecation.py:66: DeprecationWarning: Class Imputer is deprecated; Imputer was deprecated in version 0.20 and will be removed in 0.22. Import impute.SimpleImputer from sklearn instead.
 [ 4. -5.]
 [ 7. -8.]]
  warnings.warn(msg, category=DeprecationWarning)

警告是版本问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值