国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

這篇具有很好參考價值的文章主要介紹了數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、數(shù)據(jù)統(tǒng)計

1、行列式的最大元素和最小元素

2、求向量的平均值和中值?

3、對矩陣做排序

?二、數(shù)據(jù)優(yōu)化(數(shù)據(jù)殘缺值和異常值的處理)

1、數(shù)據(jù)殘缺

①插值

②擬合

?③鄰近替換

④KNN算法填充

2、數(shù)據(jù)異常

①拉依達準則

②替換異常值

3、數(shù)據(jù)變換

①0-1標準化

②z-score標準化

③標準化的應(yīng)用

4、數(shù)據(jù)離散化

①等寬法

②等頻法

三、數(shù)據(jù)降維

1、主成分分析

①主成分分析簡介

②主成分分析計算步驟

③案例分析

?2、因子分析(FA)

①應(yīng)用場景

②步驟

③模型分析

?④代碼實現(xiàn)


一、數(shù)據(jù)統(tǒng)計

數(shù)據(jù)統(tǒng)計一般包括求矩陣最大、最小元素,求矩陣平均值和中值, 矩陣元素求和、求積,矩陣元素累加和與累乘積,求標準方差、相關(guān)系數(shù)、元素排序等。

直接舉例子說明

1、行列式的最大元素和最小元素

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

命令如下:
A=[12,45,58;25,60,-45;56,25,178;2,0,-13];
max(A,[],2)        %求每行最大元素
ans =
        58
        60
        178
        2
max(A)             %求每列最大元素
ans =
56    60   178
min(min(A))         %求整個矩陣的最小元素。也可用命令:min(A(:))
ans =
-45

2、求向量的平均值和中值?

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

命令如下:
x=[10,24,6,-8,0,-12];         %偶數(shù)個元素
mean(x)                   %求此向量的平均值
x =
10    24     6    -8     0   -12
ans =
3.3333
median(x)                  %求此向量的中值
ans =
3

3、對矩陣做排序

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

命令如下:

? ??A=[0,-11,5;1,15,7;16,9,-20];

sort(A)??????????????????? %對A的每列按升序排序

ans =

        0?? ?-11 ?-20

???? ???1???? 9?? ?5

??? ???16??? 15?? ?7



-sort(-A,2)???????????????? %對A的每行按降序排列

ans =

        5???? 0?? -11

??? ???15???? 7???? 1

??? ???16???? 9?? -20



[X,I]=sort(A)???? ??????????%對A按列排序,并將每個元素所在行號送矩陣I

X =

       0?? ?-11?? -20

???? ??1???? 9???? 5

??? ??16??? 15???? 7

I =

       1???? 1???? 3

???? ??2???? 3???? 1

???? ??3???? 2???? 2

?二、數(shù)據(jù)優(yōu)化(數(shù)據(jù)殘缺值和異常值的處理)

插值和擬合都是數(shù)據(jù)優(yōu)化的一種方法,當(dāng)實驗數(shù)據(jù)不夠多時經(jīng)常需要用到這種方法來畫圖。在MATLAB中都有特定的函數(shù)來完成這些功能。這兩種方法的確別在于:

當(dāng)測量值是準確的,沒有誤差時,一般用插值;

當(dāng)測量值與真實值有誤差時,一般用數(shù)據(jù)擬合。

1、數(shù)據(jù)殘缺

①插值

對于一維曲線的插值,一般用到的函數(shù)yi=interp1(X,Y,xi,method) ,其中method包括nearst,linearspline,cubic

對于二維曲面的插值,一般用到的函數(shù)zi=interp2(X,Y,Z,xi,yi,method),其中method也和上面一樣,常用的是cubic

%產(chǎn)生原始數(shù)據(jù)
x=0:0.1:1;
y=(x.^2-3*x+7).*exp(-4*x).*sin(2*x);
subplot(2,2,1);
plot(x,y);
title('原始數(shù)據(jù)');
%線性插值
xx=0:0.01:1;
y1=interp1(x,y,xx,'linear');
%subplot(2,2,1)
%plot(x,y,'o',xx,y1);
%title('線性插值');
%最鄰近點插值
y2=interp1(x,y,xx,'nearest');
subplot(2,2,2)
plot(x,y,'o',xx,y2);
title('最鄰近點插值');
%三次插值
y3=interp1(x,y,xx,'pchip');
subplot(2,2,3)
plot(x,y,'o',xx,y3);
title('三次插值');
%三次樣條插值
y4=interp1(x,y,xx,'spline');
subplot(2,2,4)
plot(x,y,'o',xx,y4);
title('三次樣條插值');

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

經(jīng)典問題:利用給定的高度補充地圖

%插值基點為網(wǎng)格節(jié)點
clear all
y=20:-1:0;
x=0:20;
z=[0.2	0.2	0.2	0.2	0.2	0.2	0.4	0.4	0.3	0.2	0.3	0.2	0.1	0.2	0.2	0.4	0.3	0.2	0.2	0.2	0.2;
0.3	0.2	0.2	0.2	0.2	0.4	0.3	0.3	0.3	0.3	0.4	0.2	0.2	0.2	0.2	0.4	0.4	0.4	0.3	0.2	0.2;
0.2	0.3	0.3	0.2	0.3	1	0.4	0.5	0.3	0.3	0.3	0.3	0.2	0.2	0.2	0.6	0.5	0.4	0.4	0.2	0.2;
0.2	0.2	0.4	0.2	1	1.1	0.9	0.4	0.3	0.3	0.5	0.3	0.2	0.2	0.2	0.7	0.3	0.6	0.6	0.3	0.4;
0.2	0.2	0.9	0.7	1	1	1	0.7	0.5	0.3	0.2	0.2	0.2	0.6	0.2	0.8	0.7	0.9	0.5	0.5	0.4;
0.2	0.3	1	1	1	1.2	1	1.1	0.8	0.3	0.2	0.2	0.2	0.5	0.3	0.6	0.6	0.8	0.7	0.6	0.5;
0.2	0.4	1	1	1.1	1.1	1.1	1.1	0.6	0.3	0.4	0.4	0.2	0.7	0.5	0.9	0.7	0.4	0.9	0.8	0.3;
0.2	0.2	0.9	1.1	1.2	1.2	1.1	1.1	0.6	0.3	0.5	0.3	0.2	0.4	0.3	0.7	1	0.7	1.2	0.8	0.4;
0.2	0.3	0.4	0.9	1.1	1	1.1	1.1	0.7	0.4	0.4	0.4	0.3	0.5	0.5	0.8	1.1	0.8	1.1	0.9	0.3;
0.3	0.3	0.5	1.2	1.2	1.1	1	1.2	0.9	0.5	0.6	0.4	0.6	0.6	0.3	0.6	1.2	0.8	1	0.8	0.5;
0.3	0.5	0.9	1.1	1.1	1	1.2	1	0.8	0.7	0.5	0.6	0.4	0.5	0.4	1	1.3	0.9	0.9	1	0.8;
0.3	0.5	0.6	1.1	1.2	1	1	1.1	0.9	0.4	0.4	0.5	0.5	0.8	0.6	0.9	1	0.5	0.8	0.8	0.9;
0.4	0.5	0.4	1	1.1	1.2	1	0.9	0.7	0.5	0.6	0.3	0.6	0.4	0.6	1	1	0.6	0.9	1	0.7;
0.3	0.5	0.8	1.1	1.1	1	0.8	0.7	0.7	0.4	0.5	0.4	0.4	0.5	0.4	1.1	1.3	0.7	1	0.7	0.6;
0.3	0.5	0.9	1.1	1	0.7	0.7	0.4	0.6	0.4	0.4	0.3	0.5	0.5	0.3	0.9	1.2	0.8	1	0.8	0.4;
0.2	0.3	0.6	0.9	0.8	0.8	0.6	0.3	0.4	0.5	0.4	0.5	0.4	0.2	0.5	0.5	1.3	0.6	1	0.9	0.3;
0.2	0.3	0.3	0.7	0.6	0.6	0.4	0.2	0.3	0.5	0.8	0.8	0.3	0.2	0.2	0.8	1.3	0.9	0.8	0.8	0.4;
0.2	0.3	0.3	0.6	0.3	0.4	0.3	0.2	0.2	0.3	0.6	0.4	0.3	0.2	0.4	0.3	0.8	0.6	0.7	0.4	0.4;
0.2	0.3	0.4	0.4	0.2	0.2	0.2	0.3	0.2	0.2	0.2	0.2	0.2	0.2	0.2	0.5	0.7	0.4	0.4	0.3	0.3;
0.2	0.2	0.3	0.2	0.2	0.3	0.2	0.2	0.2	0.2	0.2	0.1	0.2	0.4	0.3	0.6	0.5	0.3	0.3	0.3	0.2;
0.2	0.2	0.2	0.2	0.2	0.2	0.2	0.2	0.2	0.2	0.2	0.2	0.2	0.2	0.4	0.7	0.4	0.2	0.4	0.5	0.5];

%未插值直接畫圖
figure(1)                                         %創(chuàng)建圖形窗口1,并激活
surf(x,y,z);
shading flat                                      %用shading flat命令,使曲面變的光滑
title('未插值地形圖')
xlabel('橫坐標')
ylabel('縱坐標')
zlabel('高度')

%三次插值后畫圖
%畫地形圖
figure(2)
xi=0:0.05:20;
yi=20:-0.05:0;
zi=interp2(x,y,z,xi',yi,'cubic');                 %'cubic'三次插值
surfc(xi,yi,zi);                                  %底面帶等高線
shading flat
title('插值后地形圖')
xlabel('橫坐標')
ylabel('縱坐標')
zlabel('高度')

%畫立體等高線圖
figure(3)
contour3(xi,yi,zi);
title('立體等高線圖')
xlabel('橫坐標')
ylabel('縱坐標')
zlabel('高度')

%畫等高線圖
figure(4)
[c,h]=contour(xi,yi,zi);
clabel(c,h);                                       %用于為2維等高線添加標簽
colormap cool                                     %冷色調(diào)
title('平面等高線圖')
xlabel('橫坐標')
ylabel('縱坐標')

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

②擬合

對于一維曲線的擬合,一般用到的函數(shù)p=polyfit(x,y,n)yi=polyval(p,xi),這個是最常用的最小二乘法的擬合方法。

對于二維曲面的擬合,有很多方法可以實現(xiàn),這里運用Spline Toolbox里面的函數(shù)功能。

x = 0:0.1:1;
y = [-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
A = polyfit(x,y,2)   %A為擬合出來的函數(shù)
z = polyval(A,x);    %求多項式在x處的值z
plot(x,y,'k+',x,z,'r')

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

?③鄰近替換

前/后一個非缺失值將其替換

最近的非缺失值替換

相鄰的非離群值線性插值填充

test_data1=fillmissing(test_data,'previous');
test_data1=fillmissing(test_data,'next');
test_data1=fillmissing(test_data,'nearest');
test_data1=fillmissing(test_data,'linear');

④KNN算法填充

from sklearn.metrics import nan_euclidean_distances
import numpy as np
from sklearn.impute import KNNImputer

X = [[1, 2, np.nan], [3, 4, 3], [np.nan, 6, 5], [8, 8, 7]]

# python的nan_euclidean_distances函數(shù)可計算含空值的距離矩陣
nan_euclidean_distances(X, X)

# python用KNNImputer進行空值填充
X = [[1, 2, np.nan], [3, 4, 3], [np.nan, 6, 5], [8, 8, 7]]
imputer = KNNImputer(n_neighbors=2)
a = imputer.fit_transform(X)
print(a)

2、數(shù)據(jù)異常

①拉依達準則

拉依達準則是用來發(fā)現(xiàn)數(shù)據(jù)異常值

x=[1, 1.1, 1.2, 1.3, 1.4, 2, 1.2, 1.3, 1.5, 0.9, 0.8, 1.1, 11];
inlier = [];outlier = [];
len = length(x);
average1 = mean(x);  % x中所有元素的均值
standard1 = std(x);  % x的標準差
for i = 1:len  % 遍歷x向量,判斷是否為偏離點,不是偏離點則存入inline
     if abs(x(i)-average1)<standard1*3
       inlier = [inlier x(i)];
     end
   end


average2 = mean(inlier);
standard2 = std(inlier);
for i = 1:len  % 遍歷x向量,判斷是否為偏離點,不是偏離點則存入outline
     if abs(x(i)-average2) >= standard2*3
       outlier = [outlier x(i)];
     end
end

②替換異常值

替換方法跟缺失值的替換一致,我們可以直接將其看作缺失值進行處理,替換方法如上。

3、數(shù)據(jù)變換

①0-1標準化

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# matplotlib inline
# 數(shù)據(jù)標準化
# (1)0-1標準化
df = pd.DataFrame({"value1":np.random.rand(10)*20,
                  'value2':np.random.rand(10)*100})
print(df.head())
print('------')
# 創(chuàng)建數(shù)據(jù)

def data_norm(df,*cols):
    df_n = df.copy()
    for col in cols:
        ma = df_n[col].max()
        mi = df_n[col].min()
        df_n[col + '_n'] = (df_n[col] - mi) / (ma - mi)
    return(df_n)
# 創(chuàng)建函數(shù),標準化數(shù)據(jù)
df_n = data_norm(df, 'value1',  'value2')
print(df_n.head())#標準化數(shù)據(jù)

②z-score標準化

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({"value1": np.random.rand(10) * 100,
                   'value2': np.random.rand(10) * 100})
print(df.head())
print('------')


# 創(chuàng)建數(shù)據(jù)

def data_Znorm(df, *cols):
    df_n = df.copy()
    for col in cols:
        u = df_n[col].mean()
        std = df_n[col].std()
        df_n[col + '_Zn'] = (df_n[col] - u) / std  # 平均值/標準差
    return (df_n)


# 創(chuàng)建函數(shù),標準化數(shù)據(jù)

df_z = data_Znorm(df, 'value1', 'value2')
u_z = df_z['value1_Zn'].mean()
std_z = df_z['value1_Zn'].std()
print(df_z)
print('標準化后value1的均值為:%.2f, 標準差為:%.2f' % (u_z, std_z))
# 標準化數(shù)據(jù)
# 經(jīng)過處理的數(shù)據(jù)符合標準正態(tài)分布,即均值為0,標準差為1

# 什么情況用Z-score標準化:
# 在分類、聚類算法中,需要使用距離來度量相似性的時候,Z-score表現(xiàn)更好

③標準化的應(yīng)用

# 八類產(chǎn)品的兩個指標value1,value2,其中value1權(quán)重為0.6,value2權(quán)重為0.4
# 通過0-1標準化,判斷哪個產(chǎn)品綜合指標狀況最好
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({"value1": np.random.rand(10) * 30,
                   'value2': np.random.rand(10) * 100},
                  index=list('ABCDEFGHIJ'))


# print(df.head())
# print('------')
# 創(chuàng)建數(shù)據(jù)"
def data_norm(df, *cols):
    df_n = df.copy()
    for col in cols:
        ma = df_n[col].max()
        mi = df_n[col].min()
        df_n[col + '_n'] = (df_n[col] - mi) / (ma - mi)
    return df_n


df_n1 = data_norm(df, 'value1', 'value2')
# 進行標準化處理

df_n1['f'] = df_n1['value1_n'] * 0.6 + df_n1['value2_n'] * 0.4
df_n1.sort_values(by='f', inplace=True, ascending=False)
df_n1['f'].plot(kind='line', style='--.k', alpha=0.8, grid=True)
print(df_n1)
# 查看綜合指標狀況

4、數(shù)據(jù)離散化

①等寬法

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 等寬法 → cut方法
ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
# 有一組人員年齡數(shù)據(jù),希望將這些數(shù)據(jù)劃分為“18到25”,“26到35”,“36到60”,“60以上”幾個面元,分成4個區(qū)間。

bins = [18, 25, 35, 60, 100]
cats = pd.cut(ages, bins)
print(cats)
print(type(cats))
print('____')

print(cats.codes, type(cats.codes))  # 0-3對應(yīng)分組后的四個區(qū)間,用代號來注釋數(shù)據(jù)對應(yīng)區(qū)間,結(jié)果為ndarray;可以查看里邊的等級
print(cats.categories, type(cats.categories))  # 四個區(qū)間,結(jié)果為index
print(pd.value_counts(cats))  # 按照區(qū)間計數(shù)
print('-------')
# cut結(jié)果含有一個表示不同分類名稱的層級數(shù)組以及一個年齡數(shù)據(jù)進行標號的代號屬性

print(pd.cut(ages, [18, 26, 36, 61, 100], right=False))
print('-------')
# 通過right函數(shù)修改閉端,默認為True

group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior']
print(pd.cut(ages, bins, labels=group_names))
print('-------')
# 可以設(shè)置自己的區(qū)間名稱,用labels參數(shù)


df = pd.DataFrame({'ages': ages})
group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior']
s = pd.cut(df['ages'], bins)  # 也可以 pd.cut(df['ages'],5),將數(shù)據(jù)等分為5份
df['label'] = s
cut_counts = s.value_counts(sort=False)
print(df)
print(cut_counts)
# 對一個Dataframe數(shù)據(jù)進行離散化,并計算各個區(qū)間的數(shù)據(jù)計數(shù)

plt.scatter(df.index, df['ages'], cmap='Reds', c=cats.codes)
plt.grid()
# 用散點圖表示,其中顏色按照codes分類
# 注意codes是來自于Categorical對象

②等頻法

# 等頻法 → qcut方法
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = np.random.randn(1000)
s = pd.Series(data)
cats = pd.qcut(s,4)  # 按四分位數(shù)進行切割,可以試試 pd.qcut(data,10)
print(cats.head())
print(pd.value_counts(cats))
print('------')
# qcut → 根據(jù)樣本分位數(shù)對數(shù)據(jù)進行面元劃分,得到大小基本相等的面元,但并不能保證每個面元含有相同數(shù)據(jù)個數(shù)
# 也可以設(shè)置自定義的分位數(shù)(0到1之間的數(shù)值,包含端點) → pd.qcut(data1,[0,0.1,0.5,0.9,1])

plt.scatter(s.index,s,cmap = 'Greens',c = pd.qcut(data,4).codes)
plt.xlim([0,1000])
plt.grid()
# 用散點圖表示,其中顏色按照codes分類
# 注意codes是來自于Categorical對象

三、數(shù)據(jù)降維

1、主成分分析

①主成分分析簡介

主成分分析是一種降維算法,它能將多個指標轉(zhuǎn)換為少數(shù)幾個主成分,這些主成分是原始變量的線性組合,且彼此之間互不相關(guān),其能反映出原始數(shù)據(jù)的大部分信息。一般來說,當(dāng)研究的問題涉及到多變量且變量之間存在很強的相關(guān)性時,我們可考慮使用主成分分析的方法來對數(shù)據(jù)進行簡化。

②主成分分析計算步驟

標準化處理

計算標準化樣本的協(xié)方差矩陣

計算R的特征值和特征向量

計算主成分貢獻率以及累計貢獻率

寫出主成分

根據(jù)系數(shù)分析主成分代表的意義

③案例分析

主成分分析指標解釋案例
主成分分析的一大難點是指標意義模糊,難以解釋,下面這個例子可以輔助理解。

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理
上表的累計貢獻率 = 當(dāng)前項貢獻率 + 之前的累計貢獻率。當(dāng)累計貢獻率 > 80%時,剩下的特征向量可以舍棄。

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

上面的分析需要一定的語言組織能力,也需要一定運氣成分,若難以解釋,或者強行解釋,或者換方法。

案例參考文章:原文鏈接:https://blog.csdn.net/qq1198768105/article/details/119898545

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

clear;clc
% load data1.mat   % 主成分聚類
load data2.mat   % 主成分回歸

[n,p] = size(x);  % n是樣本個數(shù),p是指標個數(shù)

%% 第一步:對數(shù)據(jù)x標準化為X
X=zscore(x);   % matlab內(nèi)置的標準化函數(shù)(x-mean(x))/std(x)

%% 第二步:計算樣本協(xié)方差矩陣
R = cov(X);

%% 注意:以上兩步可合并為下面一步:直接計算樣本相關(guān)系數(shù)矩陣
R = corrcoef(x);
disp('樣本相關(guān)系數(shù)矩陣為:')
disp(R)

%% 第三步:計算R的特征值和特征向量
% 注意:R是半正定矩陣,所以其特征值不為負數(shù)
% R同時是對稱矩陣,Matlab計算對稱矩陣時,會將特征值按照從小到大排列哦
% eig函數(shù)的詳解見第一講層次分析法的視頻
[V,D] = eig(R);  % V 特征向量矩陣  D 特征值構(gòu)成的對角矩陣


%% 第四步:計算主成分貢獻率和累計貢獻率
lambda = diag(D);  % diag函數(shù)用于得到一個矩陣的主對角線元素值(返回的是列向量)
lambda = lambda(end:-1:1);  % 因為lambda向量是從小大到排序的,我們將其調(diào)個頭
contribution_rate = lambda / sum(lambda);  % 計算貢獻率
cum_contribution_rate = cumsum(lambda)/ sum(lambda);   % 計算累計貢獻率  cumsum是求累加值的函數(shù)
disp('特征值為:')
disp(lambda')  % 轉(zhuǎn)置為行向量,方便展示
disp('貢獻率為:')
disp(contribution_rate')
disp('累計貢獻率為:')
disp(cum_contribution_rate')
disp('與特征值對應(yīng)的特征向量矩陣為:')
% 注意:這里的特征向量要和特征值一一對應(yīng),之前特征值相當(dāng)于顛倒過來了,因此特征向量的各列需要顛倒過來
%  rot90函數(shù)可以使一個矩陣逆時針旋轉(zhuǎn)90度,然后再轉(zhuǎn)置,就可以實現(xiàn)將矩陣的列顛倒的效果
V=rot90(V)';
disp(V)


%% 計算我們所需要的主成分的值
m =input('請輸入需要保存的主成分的個數(shù):  ');
F = zeros(n,m);  %初始化保存主成分的矩陣(每一列是一個主成分)
for i = 1:m
   ai = V(:,i)';   % 將第i個特征向量取出,并轉(zhuǎn)置為行向量
   Ai = repmat(ai,n,1);   % 將這個行向量重復(fù)n次,構(gòu)成一個n*p的矩陣
   F(:, i) = sum(Ai .* X, 2);  % 注意,對標準化的數(shù)據(jù)求了權(quán)重后要計算每一行的和
end

?2、因子分析(FA)

①應(yīng)用場景

減少分析變量個數(shù)
通過對變量間相關(guān)關(guān)系的探測,將原始變量分組,即將相關(guān)性高的變量分為一組,用共性因子來代替該變量
使問題背后的業(yè)務(wù)因素的意義更加清晰呈現(xiàn)

②步驟

1、選擇分析的變量

2、計算所選原始變量的相關(guān)系數(shù)矩陣

3、提取公共因子

4、因子旋轉(zhuǎn)

5、計算因子得分

③模型分析

?以廢氣排放為例說明主成分降維處理過程

1、評價標準體系的構(gòu)建

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

2、因子分析

因子分析首先將原始數(shù)據(jù)標準化處理,建立相關(guān)系數(shù)矩 陣并計算其特征值和特征向量,接著從中選擇特征值大于等 于1的特征值個數(shù)為公共因子數(shù),或者根據(jù)因子對X的累計貢獻 率大于80%來確定公共因子,求得因子載荷矩陣, 后計算公因子得分和綜合得分。

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

?觀察相關(guān)系數(shù)矩陣表 2,可以發(fā)現(xiàn)所選取指標之間存在著一定的相關(guān)關(guān)系,其中 X3 和 X6、X4 和
X7、 X7 和 X8 分別存在著較強的相關(guān)性,相關(guān)系數(shù)分別為 0.96、 0.96、0.91,這進一步驗證了對所選指標做因子分析的科學(xué)性和必要性。計算相關(guān)系數(shù)矩陣的特征值、貢獻率及累計貢獻率如
所示:

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理

?確定提取的主成分個數(shù)可綜合考慮 3 個方面:

(1)提取的所有特征值大于某一特定特征值,一般特定值設(shè)為 1,本文同樣以 1 為標準;

(2) 提取的主成分的累計貢獻率要大于 85%,即所提取的主成分要能夠概括原有指標的絕大部分信息; 由表 3 可知,前 3 個主成分的累計貢獻率已經(jīng)達到了94.01%,滿足按照累計貢獻率大于 85% 確定主成分個數(shù)的原則;

(3) 以做主成分分析時生成的碎石圖 (Scree Plot) 做參考,碎石圖是按照特征值大小排列的,以特征值為縱坐標、因子數(shù)為橫坐標生成的主成分散點圖,有明顯的拐點,一般取拐點前所有的因子及拐點后第一個因子作為主成分 。
觀察圖 4 可得,第一、第二個主成分的特征值較大,其余幾個均較小,碎石圖在第三個特征值出現(xiàn)
拐點。
根據(jù)上述分析,在本研究中選取前 3 個主成分對河南省水資源使用情況進行動態(tài)分析,從表 3
和 4,我們可以看出前 3 個主成分已經(jīng)能夠概括絕大部分的原始信息,因此提取 3 個主成分因子是
合理的. 提取 3 個主成分用于概括原有 10 個指標的絕大部分信息,這既達到了降維、簡化的目的,又在一定程度上保證了后續(xù)研究結(jié)果能準確有效地反映出河南省水資源使用情況動態(tài)變化的基本特征。計算主成分的載荷矩陣, 主成分載荷是指提取的 3 大主成分與各變量指標之間的相關(guān)系數(shù)如表4:

數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理文章來源地址http://www.zghlxwxcb.cn/news/detail-429205.html

?④代碼實現(xiàn)

clc,clear
r=[1.000 0.577 0.509 0.387 0.462
0.577 1.000 0.599 0.389 0.322
0.509 0.599 1.000 0.436 0.426
0.387 0.389 0.436 1.000 0.523
0.462 0.322 0.426 0.523 1.000];
%下面利用相關(guān)系數(shù)矩陣求主成分解,val的列為r的特征向量,即主成分的系數(shù)
[vec,val,con]=pcacov(r);%val為r的特征值,con為各個主成分的貢獻率
f1=repmat(sign(sum(vec)),size(vec,1),1); %構(gòu)造與vec同維數(shù)的元素為±1的矩陣
vec=vec.*f1; %修改特征向量的正負號,每個特征向量乘以所有分量和的符號函數(shù)值
f2=repmat(sqrt(val)',size(vec,1),1);
a=vec.*f2 %構(gòu)造全部因子的載荷矩陣
a1=a(:,1) %提出一個因子的載荷矩陣
tcha1=diag(r-a1*a1') %計算一個因子的特殊方差
a2=a(:,[1,2]) %提出兩個因子的載荷矩陣
tcha2=diag(r-a2*a2') %計算兩個因子的特殊方差
ccha2=r-a2*a2'-diag(tcha2) %求兩個因子時的殘差矩陣
gong=cumsum(con) %求累積貢獻率
 
 
 
clc,clear
load data.txt; %把原始數(shù)據(jù)保存在純文本文件data.txt中
n=size(data,1);
x=data(:,1:4); y=data(:,5); %分別提出自變量x和因變量y的值
——————————————————————————————————
如果不需要檢驗,則不需要把y列入原始數(shù)據(jù)中,把矩陣x的大小改變一下,以及下文中的m,m為原始數(shù)據(jù)中變量的個數(shù)。
——————————————————————————————————
m=4;%m為變量的個數(shù)
x=zscore(x); %數(shù)據(jù)標準化
r=cov(x); %求標準化數(shù)據(jù)的協(xié)方差陣,即求相關(guān)系數(shù)矩陣
[vec,val,con]=pcacov(r); %進行主成分分析的相關(guān)計算
c=cumsum(con);
i=1;
while ((c(i)<90)&(con(i+1)>10))
    i=i+1;
end
num=i;
f1=repmat(sign(sum(vec)),size(vec,1),1);
vec=vec.*f1; %特征向量正負號轉(zhuǎn)換
f2=repmat(sqrt(val)',size(vec,1),1);
a=vec.*f2; %求初等載荷矩陣
am=a(:,1:num); %提出num個主因子的載荷矩陣
[b,t]=rotatefactors(am,'method', 'varimax'); %旋轉(zhuǎn)變換,b為旋轉(zhuǎn)后的載荷陣
bt=[b,a(:,num+1:end)]; %旋轉(zhuǎn)后全部因子的載荷矩陣
contr=sum(bt.^2); %計算因子貢獻
rate=contr(1:num)/sum(contr); %計算因子貢獻率
fprintf('綜合因子得分公式:F=');
for i=1:num
    fprintf('+%f*F%d',rate(i),i);
end
fprintf('\n');
coef=inv(r)*b; %計算得分函數(shù)的系數(shù)
coef=coef';
for i=1:num
    fprintf('各個因子得分函數(shù)為F%d=',i);
    for j=1:m
        fprintf('+(%f)*x_%d',coef(i,j),j);
    end
    fprintf('\n');
end
%如果僅僅因子分析,程序到此為止
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
score=x*coef';%計算各個因子的得分
weight=rate/sum(rate); %計算得分的權(quán)重
Tscore=score*weight'; %對各因子的得分進行加權(quán)求和,即求各企業(yè)綜合得分
[STscore,ind]=sort(Tscore,'descend'); %對企業(yè)進行排序
display=[score(ind,:)';STscore';ind']; %顯示排序結(jié)果
fprintf('排序結(jié)果如下:');
for i=1:num
    fprintf('第%d行為F%d得分,',i,i);
end
fprintf('第%d行為綜合因子得分,第%d為原序列\(zhòng)n',num+1,num+2);
disp(display);
[ccoef,p]=corrcoef([Tscore,y]); %計算F與資產(chǎn)負債的相關(guān)系數(shù)
[d,dt,e,et,stats]=regress(Tscore,[ones(n,1),y]);%計算F與資產(chǎn)負債的方程
fprintf('因子分析法的回歸方程為:F=%f+(%f*y)',d(1),d(2));
if (stats(3)<0.05)%判斷是否通過顯著性檢驗的結(jié)果
    fprintf('\n在顯著性水平0.05的情況下,通過了假設(shè)檢驗。\n');
else
    fprintf('\n在顯著性水平0.05的情況下,通不過假設(shè)檢驗。\n');
end該MATLAB源代碼的displsy為最終排序結(jié)果。

到了這里,關(guān)于數(shù)學(xué)建模--數(shù)據(jù)預(yù)處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 數(shù)據(jù)預(yù)處理方法整理(數(shù)學(xué)建模)

    數(shù)據(jù)預(yù)處理方法整理(數(shù)學(xué)建模)

    這篇文章主要是整理了一些作者在各種建模比賽中遇到的數(shù)據(jù)預(yù)處理問題以及方法,主要針對excel或csv格式的數(shù)據(jù),為后續(xù)進行機器學(xué)習(xí)或深度學(xué)習(xí)做前期準備 導(dǎo)入庫和文件,這里使用的是絕對路徑,可改為相對路徑 傳入的為csv格式的文件,如果是xlsx格式的文件,建議先使

    2024年02月14日
    瀏覽(20)
  • 數(shù)學(xué)建模Matlab之?dāng)?shù)據(jù)預(yù)處理方法

    數(shù)學(xué)建模Matlab之?dāng)?shù)據(jù)預(yù)處理方法

    本文綜合代碼來自文章 作者通常首先判斷是否具有異常值,因為如果有異常值的話,咱們就會剔除異常值,使其變成缺失值,然后再做缺失值處理會好很多。 對于上面的異常值檢驗法做講解與擴展: 1. Mean 三倍標準差法(3σ原則) 描述 :在正態(tài)分布數(shù)據(jù)中,任何一個數(shù)值如

    2024年02月08日
    瀏覽(20)
  • matlab數(shù)據(jù)的獲取、預(yù)處理、統(tǒng)計、可視化、降維 | 《matlab數(shù)學(xué)建模方法與實踐(第三版)》學(xué)習(xí)筆記

    matlab數(shù)據(jù)的獲取、預(yù)處理、統(tǒng)計、可視化、降維 | 《matlab數(shù)學(xué)建模方法與實踐(第三版)》學(xué)習(xí)筆記

    一、數(shù)據(jù)的獲取 1.1 從Excel中獲取 使用readtable() 使用xlsread()——xlswrite() 1.2? 從TXT中獲取 使用load() 使用textread() 使用fopen() fread() fclose()? 使用fprintf()寫入信息到txt ?1.3?從圖片中獲取 使用imread? 1.4 從視頻獲取? 使用視覺工具箱中的VideoFileReader? 二、數(shù)據(jù)的預(yù)處理 2.1 缺失值處

    2024年01月19日
    瀏覽(42)
  • 2023高教社數(shù)學(xué)建模國賽C題 - 蔬菜類商品的自動定價與補貨決策(數(shù)據(jù)預(yù)處理部分)附詳細代碼

    2023高教社數(shù)學(xué)建模國賽C題 - 蔬菜類商品的自動定價與補貨決策(數(shù)據(jù)預(yù)處理部分)附詳細代碼

    C題用到了vlookup函數(shù)將所有數(shù)據(jù)同類項進行合并,公式如下: 單品類:=VLOOKUP(C2,[附件1.xlsx]Sheet1!A$2:D$252,2,FALSE) 大類:?=VLOOKUP(C2,[附件1.xlsx]Sheet1!A$2:D$252,4,FALSE) 批發(fā)價格:?=VLOOKUP(C2,[附件3.xlsx]Sheet1!B$2:C$55983,2,FALSE) 單品損耗率:?=VLOOKUP(H2,[附件4.xlsx]Sheet1!B$2:CS252,2,FALSE) 價格=單位成本

    2024年02月08日
    瀏覽(26)
  • 數(shù)學(xué)建模-數(shù)據(jù)的處理

    數(shù)學(xué)建模-數(shù)據(jù)的處理

    缺失值處理 刪除法:刪除小部分 插補法: a. 均值插補:定距用平均值、非定距用眾數(shù)。 b. 回歸插補。 c.極大似然估計(ML):觀測數(shù)據(jù)的邊際分布對未知參數(shù)進行極 大似然估計。也可以通過期望最大化來參數(shù)估計。有效樣本的數(shù)量足夠保證ML估計值是漸進無偏的并服從正態(tài)分

    2024年02月11日
    瀏覽(19)
  • 【數(shù)學(xué)建模+數(shù)據(jù)處理類】2021數(shù)學(xué)建模國賽B題 乙醇偶合制備C4烯烴

    【數(shù)學(xué)建模+數(shù)據(jù)處理類】2021數(shù)學(xué)建模國賽B題 乙醇偶合制備C4烯烴

    對附件1中每種催化劑組合,分別研究乙醇轉(zhuǎn)化率、C4烯烴的選擇性與溫度的關(guān)系,并對附件2中350度時給定的催化劑組合在一次實驗不同時間的測試結(jié)果進行分析。 step1:對實驗數(shù)據(jù)進行探索性分析 數(shù)據(jù)的預(yù)處理(A11的缺失) 可視化、數(shù)據(jù)關(guān)系展示 包括畫出各個因變量(不同

    2024年02月16日
    瀏覽(27)
  • 【數(shù)學(xué)建模】數(shù)據(jù)處理與可視化

    【數(shù)學(xué)建?!繑?shù)據(jù)處理與可視化

    兩類基本對象 ndarray(N-dimensional Array Object):存儲單一數(shù)據(jù)類型的多維數(shù)組 ufunc(Universal Funciton Object):對數(shù)組進行處理的通用函數(shù) 數(shù)組創(chuàng)建 向array函數(shù)傳入列表/元組 利用arange、linspace、empty等函數(shù)生成數(shù)組 數(shù)組屬性 數(shù)組元素索引 array數(shù)組和list列表的區(qū)別:list中的元素可以不

    2024年01月18日
    瀏覽(26)
  • 2023數(shù)學(xué)建模國賽E題黃河水沙監(jiān)測數(shù)據(jù)分析完整代碼分析+處理結(jié)果+思路文檔

    2023數(shù)學(xué)建模國賽E題黃河水沙監(jiān)測數(shù)據(jù)分析完整代碼分析+處理結(jié)果+思路文檔

    已經(jīng)寫出國賽E題黃河水沙監(jiān)測數(shù)據(jù)分析完整代碼分析+處理結(jié)果+思路分析(30+頁),包括數(shù)據(jù)預(yù)處理、數(shù)據(jù)可視化(分組數(shù)據(jù)分布圖可視化、相關(guān)系數(shù)熱力圖可視化、散點圖可視化)、回歸模型(決策樹回歸模型、隨機森林回歸、GBDT回歸、支持向量機回歸、全連接神經(jīng)網(wǎng)絡(luò))

    2024年02月09日
    瀏覽(227)
  • 數(shù)據(jù)采集與預(yù)處理01: 項目1 數(shù)據(jù)采集與預(yù)處理準備

    數(shù)據(jù)采集與預(yù)處理01: 項目1 數(shù)據(jù)采集與預(yù)處理準備

    數(shù)據(jù)采集:足夠的數(shù)據(jù)量是企業(yè)大數(shù)據(jù)戰(zhàn)略建設(shè)的基礎(chǔ),因此數(shù)據(jù)采集成為大數(shù)據(jù)分析的前站。數(shù)據(jù)采集是大數(shù)據(jù)價值挖掘中重要的一環(huán),其后的分析挖掘都建立在數(shù)據(jù)采集的基礎(chǔ)上。大數(shù)據(jù)技術(shù)的意義確實不在于掌握規(guī)模龐大的數(shù)據(jù)信息,而在于對這些數(shù)據(jù)進行智能處理,

    2024年01月25日
    瀏覽(29)
  • 數(shù)據(jù)預(yù)處理matlab matlab數(shù)據(jù)的獲取、預(yù)處理、統(tǒng)計、可視化、降維

    1.1 從Excel中獲取 使用readtable() 例1: 使用 spreadsheetImportOptions(Name,Value) 初步確定導(dǎo)入信息, 再用 opts.Name=Value 的格式添加。 例2: 先初始化 spreadsheetImportOptions 對象, 再用 opts.Name=Value 的格式逐個添加。 例3: 將導(dǎo)入信息存到變量里, 再使用 spreadsheetImportOptions(Name,Value)

    2024年02月15日
    瀏覽(55)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包