目录
1.数据集的组成
1.1可用数据集
1.2常用数据集结构组成
2.特征工程
2.1特征抽取
2.1.1sklearn 特征抽取API
2.1.2文本特征抽取中文问题
2.2 文本特征常用方法tf-idf分析问题(NLP不用这个用更新的方法)
3特征预处理
3.1 标准缩放归一化
3.1.1sklearn归一化API:
3.1.2归一化案例
3.2 标准缩放 标准化(使用较多)
3.2.1.sklearn特征化API:
3.3 标准缩放 缺失值处理
机器学习的数据:文件csv
pandas:读取工具
numpy:释放了GIL 实现多线程
Kaggle网址:Find Open Datasets and Machine Learning Projects | KaggleDownload Open Datasets on 1000s of Projects + Share Projects on One Platform. Explore Popular Topics Like Government, Sports, Medicine, Fintech, Food, More. Flexible Data Ingestion.https://www.kaggle.com/datasets
UCI数据集网址: http://archive.ics.uci.edu/ml/http://archive.ics.uci.edu/ml/
scikit-learn网址:
http://scikit-learn.org/stable/datasets/index.html#datasetshttp://scikit-learn.org/stable/datasets/index.html
直接影响预测结果
对文本等数据 进行特征值化,为了计算机理解数据
sklearn.feature_extraction
1.对字典数据进行特征值化:
sklearn.feature_extraction.DictVectorizer
from sklearn.feature_extraction import DictVectorizer
def dictvec():
'''
字典数据抽取
:return: none
'''
# 实例化
dict = DictVectorizer(sparse=False)
data = dict.fit_transform([{'city': '北京','temperature':100},\
{'city': '上海','temperature':60},{'city': '深圳','temperature':30}])
print(dict.get_feature_names())
print(data)
return None
if __name__=='__main__':
dictvec()
one-hot编码利于数据分析
2.文本特征提取
sklearn.feature_extraction.text.CountVectorizer
应用场景:文本分类,情感分析
def countvec():
'''
对文本特征值化
'''
cv = CountVectorizer()
data =cv.fit_transform(["life is is short,i like python",\
"life is too long,i dislike python"])
print(cv.get_feature_names())
print(data.toarray())
return None
if __name__=='__main__':
countvec()
对于中文 按空格分词,单个字也不进行统计
利用 jieba 分词 可以自动对中文进行分词
def cutword():
'''
:return: c1,c2,c3
'''
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():
'''
对中文进行特征值化
:return: None
'''
c1,c2,c3 = cutword()
cv = CountVectorizer()
data =cv.fit_transform([c1, c2, c3])
print(cv.get_feature_names())
print(data.toarray())
return None
if __name__=='__main__':
hanzivec()
term frequency
inverse document frequency ;log(总文档数量/该词出现的文档数量) 用于调权重
def tfidfvec():
'''
对中文进行特征值化
:return: None
'''
c1, c2, c3 = cutword()
tf = TfidfVectorizer()
data = tf.fit_transform([c1, c2, c3])
print(tf.get_feature_names())
print(data.toarray())
return None
if __name__=='__main__':
tfidfvec()
通过特定的统计方法(数学方法)将数据转换成算法要求的数据
特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间
sklearn.preprocessing.MinMaxScaler
def mm():
'''
归一化处理
:return: None
'''
mm=MinMaxScaler(feature_range=(2,3)) #指定范围落在2-3
data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
return None
if __name__=='__main__':
mm()
归一化:异常值对最大最小值影响较大,只适合传统精确小数据场景,所以最常见的是使用标准化
标准化:特点:通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内
对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
scikit-learn.preprocessing.StandardScaler
def stand():
'''
标准化
:return: None
'''
std = StandardScaler()
data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
print(data)
return None
if __name__=='__main__':
stand()
主要用pandas 处理 这里不常用
删除 |
如果每列或者行数据缺失值达到一定的比例,建议放弃整行或者整列 |
插补 |
可以通过缺失值每行或者每列的平均值、中位数来填充 通常按列 |
def im():
'''
缺失值
:return:
'''
im = SimpleImputer(missing_values=np.nan,strategy='mean')
data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
print(data)
return None
if __name__=='__main__':
im()
知识点补充引用:
【疑难杂症】sklearn老版本的Imputer和新版本SimpleImputer处理缺失值差异_百木从森的博客-CSDN博客_sklearn 版本