机器学习之正态分布拟合

文章目录

  • 核心思想
    • 什么是正态分布?
    • 正态分布的参数
    • 标准正态分布:正态分布的特例
  • 代码
  • 也可以试试哦

核心思想

什么是正态分布?

正态分布也被称为高斯分布或者钟形曲线(因为它看起来像一个钟),这是统计学中最重要的概率分布,就像我们在大自然中经常看到的那样,它有点神奇。例如,身高、体重、血压、测量误差、智商得分等都服从正态分布。

正态分布的参数

正态分布总是以平均值为中心,而曲线的宽度则由标准差(SD)决定。、这是两个正态分布,x轴上的高度单位是英寸,y轴上是特定高度对应的人数。

婴儿的平均身高为20英寸,标准差为0.6英寸 成年人的身高为70英寸,标准差为4英寸

了解正态分布标准差的意义在于,它遵循一个经验法则,即大约95%的测量值落在均值附近的+/-2倍个标准差之间。

推论:95%的人口落在平均值+/-2*SD之间

所有正态分布的共同特征

  1. 它们都是对称的
  2. 平均数 = 中位数
  3. 根据经验法则,我们可以确定正态分布曲线离均值标准差范围内的数据百分比。

标准正态分布:正态分布的特例

如前所述,正态分布根据参数值(平均值和标准差)有许多不同的形状。标准正态分布是正态分布的一个特例,均值为0,标准差为1。这个分布也称为Z分布。

标准正态分布上的值称为标准分数或Z分数。标准分数表示某一特定观测值高于或低于平均数的SD值。

代码

def circulating(df):

    cond = df.abs() - df.mean() > 3*df.std()
    cond.sum()  # 小于3σ标准的总和
    # 让小于3σ标准的那些作为条件 即布尔索引
    # 借助any()函数, 测试是否有True,有一个或以上返回True,反之返回False
    cond = cond.any(axis = 1)
    df2 = df.drop(labels=df[cond].index)
    return df2

也可以试试哦


data=pd.read_csv('Titanic.train.csv')
data=data.drop(['PassengerId','Name','Ticket','Cabin'],axis=1)
imputer=SimpleImputer(strategy='mean')
data['Age']=imputer.fit_transform(data[['Age']])
for col in data.columns:
    if data[col].dtype=='object':
        data[col]=data[col].astype('category')

x=data.drop(['Survived'],axis=1)
y=data['Survived']

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=0)

params={'max_depth':[2,3,4],
        'learning_rate':[0.05,0.1,0.15,0.2,1],
        'n_estimators':[30,50,80,100]}

estimator=LGBMClassifier(objective='binary',reg_alpha=0.1,
                         reg_lambda=0.2)
gbm=GridSearchCV(estimator,params)
gbm.fit(x_train,y_train,early_stopping_rounds=10,
        categorical_feature=['Sex','Embarked'],
        eval_metric=['auc','binary'],
        eval_set=[(x_train,y_train)],
        eval_names='train',
        verbose=10)

model=gbm.best_estimator_
y_pred=model.predict(x_test)
roc_auc=roc_auc_score(y_test,model.predict_proba(x_test)[:,1])
accuracy=accuracy_score(y_test,y_pred)

你可能感兴趣的:(人工智能,机器学习,python,人工智能)