Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf153615

Browse files
committed
PLS: Add loadings output
1 parent1fe223d commitf153615

File tree

2 files changed

+56
-5
lines changed

2 files changed

+56
-5
lines changed

‎Orange/widgets/model/owpls.py‎

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
fromAnyQt.QtCoreimportQt
1+
importnumpyasnp
22
importscipy.sparseassp
3+
fromAnyQt.QtCoreimportQt
34

4-
fromOrange.dataimportTable,Domain
5+
fromOrange.dataimportTable,Domain,ContinuousVariable,StringVariable
56
fromOrange.regressionimportPLSRegressionLearner
67
fromOrange.widgetsimportgui
78
fromOrange.widgets.settingsimportSetting
@@ -24,6 +25,7 @@ class Outputs(OWBaseLearner.Outputs):
2425
coefsdata=Output("Coefficients",Table,explicit=True)
2526
data=Output("Data",Table)
2627
components=Output("Components",Table)
28+
loadings=Output("Loadings",Table)
2729

2830
classWarning(OWBaseLearner.Warning):
2931
sparse_data=Msg(
@@ -49,16 +51,16 @@ def add_main_layout(self):
4951

5052
defupdate_model(self):
5153
super().update_model()
52-
coef_table=None
53-
data=None
54-
components=None
54+
coef_table=data=components=loadings=None
5555
ifself.modelisnotNone:
5656
coef_table=self.model.coefficients_table()
5757
data=self._create_output_data()
5858
components=self.model.components()
59+
loadings=self._create_output_loadings()
5960
self.Outputs.coefsdata.send(coef_table)
6061
self.Outputs.data.send(data)
6162
self.Outputs.components.send(components)
63+
self.Outputs.loadings.send(loadings)
6264

6365
def_create_output_data(self)->Table:
6466
projection=self.model.project(self.data)
@@ -78,6 +80,24 @@ def _create_output_data(self) -> Table:
7880
data.metas[:,-1]=dmodx.X[:,0]
7981
returndata
8082

83+
def_create_output_loadings(self)->Table:
84+
components=self.model.components()
85+
n_comp=len(components)//2
86+
87+
names= [f"Loading{i+1}"foriinrange(n_comp)]
88+
domain=Domain([ContinuousVariable(n)forninnames],
89+
metas=[StringVariable("Feature name")])
90+
91+
rotations=components[n_comp:n_comp*2].X.T
92+
loadings=components[:n_comp].Y.T
93+
X=np.vstack([rotations,loadings])
94+
95+
M=np.array([[v.name]forvincomponents.domain.variables])
96+
97+
table=Table.from_numpy(domain,X,metas=M)
98+
table.name="Loadings"
99+
returntable
100+
81101
@OWBaseLearner.Inputs.data
82102
defset_data(self,data):
83103
# reimplemented completely because the base learner does not

‎Orange/widgets/model/tests/test_owpls.py‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,37 @@ def test_output_components_multi_target(self):
8787
self.assertEqual(components.Y.shape, (4,2))
8888
self.assertEqual(components.metas.shape, (4,1))
8989

90+
deftest_output_loadings(self):
91+
self.send_signal(self.widget.Inputs.data,self._data)
92+
loadings=self.get_output(self.widget.Outputs.loadings)
93+
self.assertEqual(loadings.name,"Loadings")
94+
self.assertEqual(loadings.X.shape, (14,2))
95+
self.assertEqual(loadings.Y.shape, (14,0,))
96+
self.assertEqual(loadings.metas.shape, (14,1))
97+
self.assertEqual(["Loading 1","Loading 2"],
98+
[v.nameforvinloadings.domain.attributes])
99+
self.assertEqual(["Feature name"],
100+
[v.nameforvinloadings.domain.metas])
101+
self.assertAlmostEqual(loadings.X[0,0],0.237,3)
102+
self.assertAlmostEqual(loadings.X[13,0],-0.304,3)
103+
104+
deftest_output_loadings_multi_target(self):
105+
self.send_signal(self.widget.Inputs.data,self._data_multi_target)
106+
loadings=self.get_output(self.widget.Outputs.loadings)
107+
self.assertEqual(loadings.name,"Loadings")
108+
self.assertEqual(loadings.X.shape, (14,2))
109+
self.assertEqual(loadings.Y.shape, (14,0))
110+
self.assertEqual(loadings.metas.shape, (14,1))
111+
self.assertEqual(["Loading 1","Loading 2"],
112+
[v.nameforvinloadings.domain.attributes])
113+
self.assertEqual(["Feature name"],
114+
[v.nameforvinloadings.domain.metas])
115+
metas= [[v.name]forvinself._data_multi_target.domain.variables]
116+
self.assertTrue((loadings.metas==metas).all())
117+
self.assertAlmostEqual(loadings.X[0,0],-0.198,3)
118+
self.assertAlmostEqual(loadings.X[12,0],-0.288,3)
119+
self.assertAlmostEqual(loadings.X[13,0],0.243,3)
120+
90121

91122
if__name__=="__main__":
92123
unittest.main()

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp