100-Days-Of-ML oneday

2024-01-11 14:38
文章标签 100 ml days oneday

本文主要是介绍100-Days-Of-ML oneday,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个博客是基于github上项目,Avik Jain致力于通过这个项目,让机器学习入门者学习机器学习的理论与实战,话不多说,现在开始:
https://github.com/Avik-Jain/100-Days-Of-ML-Code
在这里插入图片描述
注意:
1、pandas包生成的DF使用切片方式不同于python中的切片([:],包左不包右),DF.loc[0:3] 一共是四行
2、pandas中的df.concat()方法参数axis=0 和 axis=1,相当于sql中的union和join,他和fd.merge的区别
https://codeday.me/bug/20180824/225799.html
https://www.jb51.net/article/134615.htm pandas函数
pd.merge(df1, df2, on=‘col1’,
how=‘inner’,sort=True) 合并两个DataFrame,按照共有的某列做内连接(交集),outter为外连接(并集),结果排序
pd.merge(df1, df2, left_on=‘col1’,
right_on=‘col2’) df1 df2没有公共列名,所以合并需指定两边的参考列
pd.concat([sr1, sr2, sr3,…], axis=0) 多个Series堆叠成多行,结果仍然是一个Series
pd.concat([sr1, sr2, sr3,…], axis=1) 多个Series组合成多行多列,结果是一个DataFrame,索引取并集,没有交集的位置填入缺省值NaN
3、
一、导包
import nu

二、
准备数据:
Country,Age,Salary,Purchased
France,44,72000,No
Spain,27,48000,Yes
Germany,30,54000,No
Spain,38,61000,No
Germany,40,Yes
France,35,58000,Yes
Spain,52000,No
France,48,79000,Yes
Germany,50,83000,No
France,37,67000,Yes

Jupyter Notebook
ML100Day_1
最后检查: 8 分钟前
(自动保存)
Current Kernel Logo
Python 3
File
Edit
View
Insert
Cell
Kernel
Widgets
Help
实际代码:
import numpy as np
import pandas as pd
df = pd.read_csv(‘C:\Users\Administrator\Desktop\ml 100day\MLDayOneData.csv’)
print(df)
Country Age Salary Purchased
0 France 44.0 72000.0 No
1 Spain 27.0 48000.0 Yes
2 Germany 30.0 54000.0 No
3 Spain 38.0 61000.0 No
4 Germany 40.0 NaN Yes
5 France 35.0 58000.0 Yes
6 Spain NaN 52000.0 No
7 France 48.0 79000.0 Yes
8 Germany 50.0 83000.0 No
9 France 37.0 67000.0 Yes
#从qdf中取出x和y,并将他们转换成ndarray
x = df.iloc[ : ,:-1].values
print(type(df.iloc[ : ,3]))
print(type(x))
y = df.iloc[:,3].values
<class ‘pandas.core.series.Series’>
<class ‘numpy.ndarray’>
#处理空值
#首先创建异常值处理器对象
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values = “NaN”,strategy = “mean”,axis = 0)
print(x)
[[‘France’ 44.0 72000.0]
[‘Spain’ 27.0 48000.0]
[‘Germany’ 30.0 54000.0]
[‘Spain’ 38.0 61000.0]
[‘Germany’ 40.0 nan]
[‘France’ 35.0 58000.0]
[‘Spain’ nan 52000.0]
[‘France’ 48.0 79000.0]
[‘Germany’ 50.0 83000.0]
[‘France’ 37.0 67000.0]]
C:\Users\Administrator\AppData\Roaming\Python\Python37\site-packages\sklearn\utils\deprecation.py:58: 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.
warnings.warn(msg, category=DeprecationWarning)
#将有异常值的列进行处理(所有行,所有特征x)
imp = imp.fit(x[ : ,1:3])
print(imp)
print(type(imp))
Imputer(axis=0, copy=True, missing_values=‘NaN’, strategy=‘mean’, verbose=0)
<class ‘sklearn.preprocessing.imputation.Imputer’>
x[ : , 1:3] = imp.transform(x[ : ,1:3])
print(x)
[[‘France’ 44.0 72000.0]
[‘Spain’ 27.0 48000.0]
[‘Germany’ 30.0 54000.0]
[‘Spain’ 38.0 61000.0]
[‘Germany’ 40.0 63777.77777777778]
[‘France’ 35.0 58000.0]
[‘Spain’ 38.77777777777778 52000.0]
[‘France’ 48.0 79000.0]
[‘Germany’ 50.0 83000.0]
[‘France’ 37.0 67000.0]]
#比如处理y值,y值可能是好坏,矩阵中需要数值型,我们通过encode categorical data,将y转换成y值
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
#创建标签编码器对象
le_x = LabelEncoder()
print(x[ : , 0])

[‘France’ ‘Spain’ ‘Germany’ ‘Spain’ ‘Germany’ ‘France’ ‘Spain’ ‘France’
‘Germany’ ‘France’]
x[ : , 0] = le_x.fit_transform(x[ : , 0])
#fit_transform是fit和transform的简写,fit的作用简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性
#transform的简写是利用这些fit出来的结果进行转换
print(x[ : , 0])

[0 2 1 2 1 0 2 0 1 0]
print(x)
[[0 44.0 72000.0]
[2 27.0 48000.0]
[1 30.0 54000.0]
[2 38.0 61000.0]
[1 40.0 63777.77777777778]
[0 35.0 58000.0]
[2 38.77777777777778 52000.0]
[0 48.0 79000.0]
[1 50.0 83000.0]
[0 37.0 67000.0]]
#现在将变量转成了数字类型,现在就要使用虚拟变量哑变量(Dummy variable)将数据归一化,

https://www.cnblogs.com/king-lps/p/7846414.html

拿到获取的原始特征,必须对每一特征分别进行归一化,比如,特征A的取值范围是[-1000,1000],特征B的取值范围是[-1,1].如果使用logistic回归,w1x1+w2x2,因为x1的取值太大了,所以x2基本起不了作用。所以,必须进行特征的归一化,每个特征都单独进行归一化。

对于连续性特征:

Rescale bounded continuous features: All continuous input that are bounded, rescale them to [-1, 1] through x = (2x - max - min)/(max - min). 线性放缩到[-1,1]

Standardize all continuous features: All continuous input should be standardized and by this I mean, for every continuous feature, compute its mean (u) and standard deviation (s) and do x = (x - u)/s. 放缩到均值为0,方差为1

对于离散性特征:

Binarize categorical/discrete features: 对于离散的特征基本就是按照one-hot(独热)编码,该离散特征有多少取值,就用多少维来表示该特征。


##独热变量的优缺点:优点:one-hot变量解决了分类器不好处理属性数据的问题,她在一定程度上起到了 扩充特征 的作用,他的值只有0和1,不同类型存储在垂直的空间
#缺点:当类别很多时,特征空间会变得特别大,这种情况下,一般可以用 PCA 来减少维度。而且 one-hot encoding+PCA 这种组合在实际中也非常有用

#什么情况下用(不用)独热编码?
#用 独热编码用来解决类别型数据的离散值问题
#不用: 将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。 有些基于树的算法在处理变量时,并不是基于向量空间度量,数值只是个类别符号,即没有偏序关系,所以不用进行独热编码。 Tree Model不太需要one-hot编码: 对于决策树来说,one-hot的本质是增加树的深度。

什么情况下(不)需要归一化? 需要:基于参数模型或者基于距离的模型,都是需要进行特征的归一化

不需要:基于树的方法是不许用进行特征的归一化的,例如随机森林、bagging、BOOSTING等

#哑变量与One-hot编码的区别在于:哑变量将定性特征转化为n-1个特征,而One-hot则是转化为n个特征。意思就是哑变量在编码时会去除第一个状态,而One-hot则对所有的状态都会进行编码。
#创建独热编码器对象
oneHotEncode= OneHotEncoder(categorical_features = [0])
print(oneHotEncode)
OneHotEncoder(categorical_features=[0], categories=None,
dtype=<class ‘numpy.float64’>, handle_unknown=‘error’,
n_values=None, sparse=True)
x = oneHotEncode.fit_transform(x).toarray()

print(type(x))
<class ‘numpy.ndarray’>
x
array([[1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.40000000e+01,
7.20000000e+04],
[0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 2.70000000e+01,
4.80000000e+04],
[0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 3.00000000e+01,
5.40000000e+04],
[0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.80000000e+01,
6.10000000e+04],
[0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 4.00000000e+01,
6.37777778e+04],
[1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.50000000e+01,
5.80000000e+04],
[0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.87777778e+01,
5.20000000e+04],
[1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.80000000e+01,
7.90000000e+04],
[0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 5.00000000e+01,
8.30000000e+04],
[1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.70000000e+01,
6.70000000e+04]])

这篇关于100-Days-Of-ML oneday的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/594704

相关文章

【LeetCode热题100】前缀和

这篇博客共记录了8道前缀和算法相关的题目,分别是:【模版】前缀和、【模版】二维前缀和、寻找数组的中心下标、除自身以外数组的乘积、和为K的子数组、和可被K整除的子数组、连续数组、矩阵区域和。 #include <iostream>#include <vector>using namespace std;int main() {//1. 读取数据int n = 0, q = 0;ci

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

诺瓦星云校招嵌入式面试题及参考答案(100+面试题、10万字长文)

SPI 通信有哪些内核接口? 在嵌入式系统中,SPI(Serial Peripheral Interface,串行外设接口)通信通常涉及以下内核接口: 时钟控制接口:用于控制 SPI 时钟的频率和相位。通过设置时钟寄存器,可以调整 SPI 通信的速度以适应不同的外设需求。数据发送和接收接口:负责将数据从主机发送到从机以及从从机接收数据到主机。这些接口通常包括数据寄存器,用于存储待发

多个线程如何轮流输出1到100

多个线程如何轮流输出1到100的值 这个面试问题主要考察如何让线程同步,首先线程同步必会用到的就是互斥锁,互斥锁保证多个线程对数据的同时操作不会出错。但是线程同步还会用到条件变量condition_variable,condition_variable(条件变量)是 C++11 中提供的一种多线程同步机制,它允许一个或多个线程等待另一个线程发出通知,以便能够有效地进行线程同步。 conditi

【最新华为OD机试E卷-支持在线评测】机器人活动区域(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测,专栏文章质量平均 94 分 最新华为OD机试目录: https://blog.

华为OD机试 - 最大利润(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。 一、题目描述

Python精选200Tips:91-100

To do a good job, one must first sharpen their tools. 091 sys092 os093 json094 re邮箱地址手机号身份证号数字(整数和浮点数)匹配科学计数法汉字大、小写字母年月日 095 itertools096 datetime097 math098 random099 collectionsCounterdequedefa

【最新华为OD机试E卷-支持在线评测】分糖果(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测,专栏文章质量平均 94 分 最新华为OD机试目录: https://blog.

【ML--05】第五课 如何做特征工程和特征选择

一、如何做特征工程? 1.排序特征:基于7W原始数据,对数值特征排序,得到1045维排序特征 2. 离散特征:将排序特征区间化(等值区间化、等量区间化),比如采用等量区间化为1-10,得到1045维离散特征 3. 计数特征:统计每一行中,离散特征1-10的个数,得到10维计数特征 4. 类别特征编码:将93维类别特征用one-hot编码 5. 交叉特征:特征之间两两融合,x+y、x-y、