机器学习(1)

一、数值型算法

1、归一化算法:

from sklearn.preprocessing import MinMaxScaler
def mm():
    """
    数据格式(2维数组)
    归一化处理
    使得某一个特征对最终结果不会造成更大影响
    总结:注意在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,
         所以这种方法鲁棒性较差,只适合传统精确小数据场景。
    """
    # mm = MinMaxScaler(feature_range=(2,3)) 区间
    mm = MinMaxScaler()
    data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
    print(data)
    return None
if __name__ == '__main__':
    mm()

2、标准化算法:

from sklearn.preprocessing import StandardScaler
def stand():
    """
    标准化缩放算法(数据量大用)
    总结:在已有样本足够多的情况下比较稳定,适合
         现代嘈杂大数据场景。
    """
    std = StandardScaler()
    data = std.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
    print(data)
    return None
if __name__ == '__main__':
    stand()

3、 缺失值处理

from sklearn.impute import SimpleImputer
from numpy import  nan as NA
ddef im():
    """
    缺失值处理
    插补
    如果是“mean”,则使用每列中的平均值替换缺失值。只能与数字数据一起使用。
    如果为“median”,则使用每列中的中位数替换缺失值。只能与数字数据一起使用。
    如果为“most_frequent”,则使用每一列中的最频繁值替换“ missing”。可以与字符串或数字数据一起使用。
    如果为“constant”,则将缺失的值替换为fill_value。可以与字符串或数字数据一起使用。
    verbose 0 列 1 行
    """
    im = SimpleImputer(missing_values=NA,strategy='mean',verbose=0)
    data = im.fit_transform([[1, 2],[NA, 3],[7, 6]])
    print(data)
    return None

if __name__ == '__main__':
    im()

二、其他
1、字典数据抽取:

from sklearn.feature_extraction import DictVectorizer
def dictvec():
    """
    字典数据抽取
    return:None
    ['city=北京', 'city=汕头', 'city=河南', 'temperature']
    [[  1.   0.   0. 100.]
     [  0.   0.   1. 120.]
     [  0.   1.   0.  80.]]
    """
    # 实例化
    dict = DictVectorizer(sparse=False)
    # 调用fit_transform
    data = dict.fit_transform([{'city':'北京','temperature':100},{'city':'河南','temperature':120},{'city':'汕头','temperature':80}])
    print(dict.get_feature_names())
    print(dict.inverse_transform(data))
    print(data)
    return None
if __name__ == '__main__':
    dictvec()

2、对文本进行特征值化(弃用,不会自动分词):

from sklearn.feature_extraction.text import CountVectorizer
def countvec():
    """
    对文本进行特征值化
    1、统计所有文章当中所有的词,重复的只看做一次 词的列表
    2、对每篇文章,在词的列表里进行统计每个词出现的次数
    3、单个字母不统计
    中文分词用空格分词
    """
    cv = CountVectorizer()

    # data = cv.fit_transform(["life is is short,i like python","life is too long,i dislike python"])
    data = cv.fit_transform(["人生 苦短,我 喜欢 python","人生漫长,不用 python"])

    print(cv.get_feature_names())

    print(data.toarray())

    return None
if __name__ == '__main__':
    countvec()

3、中文特征值化(自动分词)

import jieba
def cutword():
    """
    1、做中文分词
    """
    con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
    con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
    con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
    # 转化成列表
    content1 = list(con1)
    content2 = list(con2)
    content3 = list(con3)

    # 把列表转成字符串
    c1 = ' '.join(content1)
    c2 = ' '.join(content2)
    c3 = ' '.join(content3)
    return c1,c2,c3

def hanzivec():
    """
    2、中文特征值化
    """
    c1,c2,c3 = cutword()
    print(c1,c2,c3)
    cv = CountVectorizer()
    data = cv.fit_transform([c1,c2,c3])
    print(cv.get_feature_names())
    print(data.toarray())
    return None

if __name__ == '__main__':
    hanzivec()

4、中文特征值化(自动分词并拿到词的重要性(重复性))

import jieba
def cutword():
    """
    1、做中文分词
    """
    con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
    con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
    con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
    # 转化成列表
    content1 = list(con1)
    content2 = list(con2)
    content3 = list(con3)

    # 把列表转成字符串
    c1 = ' '.join(content1)
    c2 = ' '.join(content2)
    c3 = ' '.join(content3)
    return c1,c2,c3

def tfidfvec():
    """
    2、中文特征值化-方法2Tfidf
    并拿到分词的重要性
    """
    c1,c2,c3 = cutword()
    print(c1,c2,c3)
    tf = TfidfVectorizer()
    data = tf.fit_transform([c1,c2,c3])
    print(tf.get_feature_names())
    print(data.toarray())
    return None

if __name__ == '__main__':
    tfidfvec()

三、降维(降低特征数)
1、过滤式

from sklearn.feature_selection import VarianceThreshold
def var():
    """
    /Volumes/Document\ Disk/five/project/py_project/test1/venv/bin
    降维(过滤式)
    特征选择-删除方差的特征
    threshold 1~10 根据每个特征的方差,凡是特征的方差值超过指定的方差就排除掉此特征,从而达到降维效果
    """
    var = VarianceThreshold(threshold=1.0)
    data = var.fit_transform([[0,2,0,3],[0,1,4,3],[0,1,1,3]])
    print(data)
    return None

if __name__ == '__main__':
    var()

2、主成分分析

from sklearn.decomposition import PCA
def pca():
    """
    主成分分析进行特征降维(保留百分之几的特征)
    n_components 0~1 正常 0.9~0.95 最好  保留的特征的百分比
    """
    pca = PCA(n_components=0.9)
    data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
    print(data)
    return None

if __name__ == '__main__':
    pca()

你可能感兴趣的:(机器学习(1))